ScrapeBadger provides REST APIs for three products. Use the web_fetch tool to call these endpoints.
Every request needs the SCRAPEBADGER_API_KEY environment variable.
Include it as an HTTP header: X-API-Key: $SCRAPEBADGER_API_KEY
text
https://scrapebadger.com
Get user profile by username:
text
GET /v1/twitter/users/{username}/by_username
Get user profile by numeric ID:
text
GET /v1/twitter/users/{user_id}/by_id
Batch get users by usernames (comma-separated):
text
GET /v1/twitter/users/batch_by_usernames?usernames=elonmusk,OpenAI
Batch get users by IDs (comma-separated):
text
GET /v1/twitter/users/batch_by_ids?user_ids=44196397,1230113324
Search users:
text
GET /v1/twitter/users/search_users?query=AI+agents
Get followers:
text
GET /v1/twitter/users/{username}/followers
Get following:
text
GET /v1/twitter/users/{username}/followings
Get mentions:
text
GET /v1/twitter/users/{username}/mentions
Get subscriptions:
text
GET /v1/twitter/users/{user_id}/subscriptions
Get user articles:
text
GET /v1/twitter/users/{user_id}/articles
Get tweet by ID:
text
GET /v1/twitter/tweets/tweet/{tweet_id}
Get multiple tweets by IDs:
text
GET /v1/twitter/tweets/?tweets=123,456,789
Advanced search:
text
GET /v1/twitter/tweets/advanced_search?query=web+scraping&query_type=Latest&count=20
Get replies:
text
GET /v1/twitter/tweets/tweet/{tweet_id}/replies
Get quotes:
text
GET /v1/twitter/tweets/tweet/{tweet_id}/quotes
Get retweeters:
text
GET /v1/twitter/tweets/tweet/{tweet_id}/retweeters
Get favoriters (likes):
text
GET /v1/twitter/tweets/tweet/{tweet_id}/favoriters
Get similar tweets:
text
GET /v1/twitter/tweets/tweet/{tweet_id}/similar
Get edit history:
text
GET /v1/twitter/tweets/tweet/{tweet_id}/edit_history
Get community notes:
text
GET /v1/twitter/tweets/tweet/{tweet_id}/community_notes
Get article:
text
GET /v1/twitter/tweets/article/{article_id}
Get community:
text
GET /v1/twitter/communities/{community_id}
Get community tweets:
text
GET /v1/twitter/communities/{community_id}/tweets
Search communities:
text
GET /v1/twitter/communities/search?query=AI
Get list details:
text
GET /v1/twitter/lists/{list_id}/detail
Get list tweets:
text
GET /v1/twitter/lists/{list_id}/tweets
Search tweets in list:
text
GET /v1/twitter/lists/{list_id}/search_tweets?query=keyword
Get trending topics:
text
GET /v1/twitter/trends/
Get trends by location (WOEID):
text
GET /v1/twitter/trends/place/{woeid}
Search places:
text
GET /v1/twitter/geo/search?query=New+York
Get place details:
text
GET /v1/twitter/geo/places/{place_id}
Get Space details:
text
GET /v1/twitter/spaces/{space_id}
Get broadcast details:
text
GET /v1/twitter/spaces/broadcast/{broadcast_id}
Search items:
text
GET /v1/vinted/search?query=nike+shoes&market=fr&page=1&per_page=20
Optional params: price_from, price_to, brand_ids, order
Get item details:
text
GET /v1/vinted/items/{item_id}?market=fr
Get user profile:
text
GET /v1/vinted/users/{user_id}?market=fr
Get user's items:
text
GET /v1/vinted/users/{user_id}/items?market=fr
Search brands:
text
GET /v1/vinted/brands?keyword=nike&market=fr
List colors:
text
GET /v1/vinted/colors?market=fr
List statuses:
text
GET /v1/vinted/statuses?market=fr
List markets:
text
GET /v1/vinted/markets
Supported markets: fr, de, uk, us, es, it, nl, be, at, pl, pt, cz, lt, and more.
The domain parameter is the marketplace TLD ( com, co.uk, de, fr, co.jp, …), default com. It also sets the geo-matched residential proxy for correct price/availability.
Search the catalog:
text
GET /v1/amazon/search?query=mechanical+keyboard&domain=com&page=1
Optional params: sort_by, category, min_price, max_price, zip
Keyword autocomplete:
text
GET /v1/amazon/autocomplete?query=mechan&domain=com
Get product detail (PDP) by ASIN:
text
GET /v1/amazon/products/{asin}?domain=com
Optional params: zip, language. Returns variants, buybox, badges, A+ content, frequently-bought-together, also-bought.
Get all seller offers + buybox:
text
GET /v1/amazon/products/{asin}/offers?domain=com
Get product reviews (featured public subset):
text
GET /v1/amazon/products/{asin}/reviews?domain=com&page=1
Optional params: sort_by (helpful|recent), star, verified_only, media_only
Best Sellers:
text
GET /v1/amazon/bestsellers?domain=com&category={node}&page=1
New Releases:
text
GET /v1/amazon/new-releases?domain=com&category={node}&page=1
Deals (Today's / Lightning):
text
GET /v1/amazon/deals?domain=com&category=...&page=1
Browse a category by node:
text
GET /v1/amazon/category?node={node}&domain=com&page=1
Optional param: sort_by
Seller profile:
text
GET /v1/amazon/sellers/{seller_id}?domain=com
Seller storefront products:
text
GET /v1/amazon/sellers/{seller_id}/products?domain=com&page=1
Seller buyer feedback:
text
GET /v1/amazon/sellers/{seller_id}/feedback?domain=com&page=1
List markets (free):
text
GET /v1/amazon/markets
List categories (free):
text
GET /v1/amazon/categories
Supported marketplaces (20): com, co.uk, de, fr, it, es, nl, se, pl, ca, com.mx, com.br, co.jp, in, com.au, sg, ae, sa, com.tr, eg.
The domain parameter is the marketplace TLD ( com, co.uk, de, fr, …), default com. It also sets the geo-matched residential proxy for correct price/availability. Aliases: us → com, uk/ gb → co.uk, au → com.au.
Search active listings:
text
GET /v1/ebay/search?query=mechanical+keyboard&domain=com&page=1
Optional params: category_id, per_page (60|120|240), sort_by (best_match|ending_soonest|newly_listed|price_low_to_high|price_high_to_low), condition (new|open_box|refurbished|used|for_parts|graded|ungraded), buying_format (auction|buy_it_now|best_offer), min_price, max_price, free_shipping, location (domestic|worldwide). Returns results[] + facets + pagination.
Search active listings by image (eBay's own visual search — 10 credits):
text
POST /v1/ebay/search/by-image
{"image_url": "https://example.com/sneaker.jpg", "domain": "com"}
Send exactly one of image_url (a public http(s) URL we download) or image_base64 (the image itself, JPEG or PNG, max 10 MB decoded; a data:image/jpeg;base64,… URL also works). Same optional filters as /search — category_id, page, per_page, condition, buying_format, min_price, max_price, free_shipping, location, language — and the same response shape, with query: null. There is no sort_by: eBay ignores sorting on a visual results page. An image eBay cannot read is a 400, never an empty result set.
Search completed/sold listings (price research):
text
GET /v1/ebay/completed?query=iphone+13+pro&domain=com&page=1
Optional params: category_id, per_page, sort_by, condition (incl. graded/ ungraded for cards), min_price, max_price, location ( domestic keeps only this marketplace's own country — foreign sales otherwise skew a national price series, and eBay shows their prices converted). Returns sold listings (sold=true).
Keyword autocomplete:
text
GET /v1/ebay/autocomplete?query=mechan&domain=com
Get item detail by item ID:
text
GET /v1/ebay/items/{item_id}?domain=com
Returns specifics, images, shipping, returns, and seller.
Get item reviews:
text
GET /v1/ebay/items/{item_id}/reviews?domain=com&page=1
Returns reviews[] + aggregate rating + histogram.
Seller profile:
text
GET /v1/ebay/sellers/{username}?domain=com
Seller active listings:
text
GET /v1/ebay/sellers/{username}/items?domain=com&page=1
Optional params: query, per_page.
Seller buyer feedback:
text
GET /v1/ebay/sellers/{username}/feedback?domain=com&page=1
Browse a category by ID:
text
GET /v1/ebay/categories/{category_id}/items?domain=com&page=1
Optional params: per_page, sort_by, min_price, max_price.
List categories (free):
text
GET /v1/ebay/categories
List markets (free):
text
GET /v1/ebay/markets
Supported marketplaces (18): com, co.uk, de, fr, it, es, com.au, ca, at, ch, be, ie, nl, pl, com.hk, com.sg, com.my, ph.
Unified real-estate API over realtor.com (US, USD) and realtor.ca (Canada, CAD). The market parameter ( us or ca, default us) picks the portal and the geo-matched residential proxy. Rich datapoints: price + price/tax history, beds/baths/sqft/lot, coordinates, photos/videos/virtual tours, features/amenities, HOA, schools, open houses, agent/office/broker contacts, days-on-market, price-per-sqft.
Search listings:
text
GET /v1/realtor/search?location=Austin,+TX&market=us&status=for_sale
Required: location (free-text "Austin, TX" / ZIP / "Toronto, ON"; optional if a CA bbox is given). Optional params: status (for_sale|for_rent|sold|pending, default for_sale), price_min, price_max, beds_min, baths_min, sqft_min/ sqft_max (US), property_type (US CSV: single_family,condos,townhomes,multi_family,mobile,land), sort (relevant|newest|price_low|price_high|photo_count), page, limit (1-200), lat_min/ lat_max/ lng_min/ lng_max (CA bbox; realtor.ca caps ~600/box). Returns results[] of Property + total/count/page/total_pages.
Get property detail by ID:
text
GET /v1/realtor/properties/{property_id}?market=us
Returns a full PropertyDetail: price/tax history, schools, amenities, estimates, agents, open houses.
Location autocomplete:
text
GET /v1/realtor/autocomplete?query=austi&market=us
Optional param: limit (1-25, default 10). Returns suggestions[] (cities, ZIPs, neighborhoods, addresses).
List markets (free):
text
GET /v1/realtor/markets
Supported markets (2): us (realtor.com), ca (realtor.ca).
Product, seller and store data from walmart.com (US only, USD, en-US). No Walmart account or developer key is needed. walmart.ca and walmart.com.mx run on different platforms and are not supported.
Search products:
text
GET /v1/walmart/search?query=laptop&sort=price_low&min_price=100&max_price=500
Required: query. Optional: page (1-10), sort ( best_match | best_seller | price_low | price_high | rating_high | new), min_price, max_price, facet (Walmart's own syntax, e.g. brand:HP). Returns 40-60 organic products a page.
Browse a category / deals:
text
GET /v1/walmart/category?path=electronics/3944&page=2
GET /v1/walmart/deals
path comes from a walmart.com/browse/... or /cp/... URL. /category takes no sort — Walmart's browse pages silently ignore it, so it is not offered. /deals is the rollback/clearance feed; no other Walmart API exposes one.
Product detail and reviews:
text
GET /v1/walmart/products/5689919121
GET /v1/walmart/products/5689919121/reviews?page=1&sort=helpful
item_id is the numeric segment at the end of a /ip/... URL. The product carries UPC/GTIN, structured specifications, variants, per-method promised delivery dates, return policy, and a 10-review sample. The reviews endpoint adds the full star histogram ( one_star.. five_star counts and percentages) plus Walmart's own most-helpful positive and negative reviews. 10 reviews a page — Walmart's page size, not adjustable.
Marketplace sellers:
text
GET /v1/walmart/sellers/101040442
GET /v1/walmart/sellers/6907/products?query=camera
The seller id is the numeric catalog_seller_id found on a product — NOT the 32-character hex seller_id, which 404s. The profile endpoint has no product list because Walmart renders a storefront's grid client-side; /products goes through search with a retailer_id facet instead, which is why it requires a query.
Stores:
text
GET /v1/walmart/stores/100
Returns the store's address, geo, phone, weekly hours, and per-department services (pharmacy, deli, auto centre — each with its own phone and hours), plus ~30 nearby stores. Walmart has no working store-finder-by-ZIP page, so walk outward from a known store id.
Autocomplete:
text
GET /v1/walmart/autocomplete?query=lapt
Gotchas that will bite you:
total_results_reported is Walmart's own claim (~14,000) and is not reachable — results dry up after page 10 (search) or 11 (browse), roughly 500 products a query. Use has_more_pages. To go deeper, segment by brand facet or price band rather than paging.us_item_id.location block naming the store the prices actually came from.Cost: 1 credit autocomplete; 5 credits search / category / deals / seller / seller products / store; 10 credits product detail and reviews. markets and health are free.
Privacy-first search from duckduckgo.com — web, images, news and videos, plus autocomplete and Instant Answers. No DuckDuckGo account or API key is needed. Region is set with the kl/ l code ( us-en, uk-en, de-de, … wt-wt = all regions); safesearch is on | moderate | off.
Web search:
text
GET /v1/duckduckgo/search?query=privacy+tools®ion=us-en&safesearch=moderate&timelimit=week&page=1
Required: query. Optional: region (default wt-wt), safesearch (default moderate), timelimit ( day | week | month | year), page (1-25). Returns organic results (title, url, snippet, display_url, is_ad), the zero-click abstract box, and has_next.
Image search:
text
GET /v1/duckduckgo/images?query=northern+lights&size=Large&color=Blue&image_type=photo&layout=Wide&license=Public
Required: query. Optional: region, safesearch, page (1-10, 100 results a page), size ( Small | Medium | Large | Wallpaper), color, image_type ( photo | clipart | gif | transparent | line), layout ( Square | Tall | Wide), license ( Any | Public | Share | ShareCommercially | Modify).
News search:
text
GET /v1/duckduckgo/news?query=elections®ion=us-en&timelimit=day&page=1
Required: query. Optional: region, safesearch, timelimit ( day | week | month | year), page (1-10, 30 results a page). Each item carries date_utc (unix) and date_at (ISO), source, excerpt and image.
Video search:
text
GET /v1/duckduckgo/videos?query=guitar+lesson&duration=medium&resolution=high&page=1
Required: query. Optional: region, safesearch, page (1-10, 60 results a page), duration ( short | medium | long), resolution ( high | standard). Returns title, publisher, uploader, duration, views and thumbnails.
Autocomplete:
text
GET /v1/duckduckgo/autocomplete?query=pyth®ion=us-en
Required: query. Optional: region. Returns { query, suggestions[] }.
Instant Answer:
text
GET /v1/duckduckgo/instant?query=valley+forge
Required: query. DuckDuckGo's Instant Answer API — abstract, definition, direct answer and related topics.
Regions:
text
GET /v1/duckduckgo/regions
No params. Returns the full list of 64 DuckDuckGo kl region codes ( us-en, uk-en, de-de, … wt-wt = all).
Cost: 1 credit autocomplete / instant; 5 credits search / images / news / videos. regions and health are free.
US rental listings from apartments.com (US, USD, en-US) with unit-level pricing — not just a property's advertised range, but every individual rentable unit with its own rent, beds, baths, square footage and availability date. No apartments.com account is needed.
Search listings:
text
GET /v1/apartments/search?location=kansas-city-mo&beds=1&max_price=1500
Required: location — the apartments.com slug ( kansas-city-mo, new-york-ny) or a ZIP ( 64108). Optional: page (1-28, 40 cards a page), beds (0=studio, 1-4), min_price, max_price. Returns results[] of cards plus total_results / total_pages.
Filters verified against live counts on kansas-city-mo (700 unfiltered): beds=1 → 374, beds=2 → 490, beds=0 → 145, max_price=1500 → 646, beds=1&max_price=1500 → 320. apartments.com also renders a pet filter, but it returns the unfiltered total, so it is deliberately not exposed.
Get property detail (unit-level):
text
GET /v1/apartments/property?url=https%3A%2F%2Fwww.apartments.com%2Furbane-kansas-city-mo%2Fwcd6e5k%2F
GET /v1/apartments/properties/{slug}/{property_id}
Returns the property (name, split address, geo, phone, amenities, office hours, photos), its floor_plans[], and a flattened units[] across all plans.
IMPORTANT — use rent, not max_term_rent. Every unit carries both. rent is the advertised monthly price the site shows a renter. max_term_rent is apartments.com's raw data-maxrent attribute, which measures roughly twice the advertised rent and appears to be an upper bound across lease terms. It is exposed unparsed for completeness only.
available_text is verbatim ( "Now", "Sep 3"); the site renders no year, so it is deliberately not a date. A floor plan with units_available: 0 and valid beds/baths/rent/sqft is the site's own layout for properties that advertise plans rather than individual units — not missing data.
A search card is a summary with a rent/bed rollup; pass its url to the property endpoint for units.
Do not use render_js for apartments.com via the general Web Scraping API — the page is fully server-rendered, so JS rendering only forces the slow browser path (100+ s) and can exceed the CDN timeout with a 524.
Cost: 5 credits per search page and per property.
Real-estate listings from Idealista across 3 markets — Spain ( es), Italy ( it), Portugal ( pt), all EUR. The market parameter defaults to es. No upstream Idealista key is needed; ScrapeBadger signs requests to Idealista's mobile API server-side. Search is keyed by location codes, not free text, so use the two-step flow: suggest → search → property detail.
Suggest locations (free-text → location codes):
text
GET /v1/idealista/suggest?query=sagrada+familia&market=es
Optional params: operation (sale|rent, default sale), property_type (homes|offices|premises|garages|bedrooms|newDevelopments|lands|storageRooms|buildings, default homes). Returns locations[] + total + market. Only entries with type == "location" carry a usable locationId.
Search listings (by location code):
text
GET /v1/idealista/search?location=0-EU-ES-28-07-001-079&operation=sale&market=es
Optional params: property_type (as above, excluding bedrooms), page (default 1), max_items (default 30, 1..50), sort_by (weigh|price|distance|publicationDate|modificationDate|size|floor|rooms|ratioeurm2|pricedown), sort_order (asc|desc, default desc), min_price, max_price, min_size, max_size, min_rooms, max_rooms. Returns elementList[] + total + totalPages + actualPage + itemsPerPage + summary[] + market.
Full property detail (by property code):
text
GET /v1/idealista/properties/{property_code}?market=es&locale=en
Optional params: locale (en|es|it|pt, default en). Returns property + market.
List markets (free):
text
GET /v1/idealista/markets
Supported markets (3): es (idealista.com), it (idealista.it), pt (idealista.pt).
Real-estate listings from the Immobiliare Group — Italy's #1 portal immobiliare.it plus its sister portals — across 4 markets: it ( www.immobiliare.it), es ( www.indomio.es), gr ( www.indomio.gr), lu ( www.immotop.lu), all EUR. The market parameter defaults to it. No upstream API key needed. Search accepts a free-text location (auto-resolved) or explicit region_id/ province_id/ city_id codes from /autocomplete.
Location autocomplete (free-text → location IDs):
text
GET /v1/immobiliare/autocomplete?query=milano&market=it
Returns suggestions[] — each {id, label, type (nation|region|province|comune|zone), region_id, province_id, city_id, macrozone_ids[], url}.
Search listings:
text
GET /v1/immobiliare/search?location=Milano&contract=sale&market=it
Optional params: region_id/ province_id/ city_id (instead of free-text location), contract (sale|rent), category (residential|commercial|garages|offices|land|buildings|warehouses), price_min, price_max, surface_min, surface_max, rooms_min, rooms_max, bathrooms_min, sort (relevance|price_asc|price_desc|newest|oldest|surface_desc|surface_asc), page. Returns listings[] + count + total_ads + current_page + max_pages + is_results_limit_reached + related_searches[].
Get full listing detail:
text
GET /v1/immobiliare/listings/{id}?market=it
Returns a full Listing: price + €/m², surface, rooms, baths, floor, energy class, GPS coordinates, all photos, virtual tours, agency + agent contacts, multi-unit properties[].
Agency profile:
text
GET /v1/immobiliare/agencies/{id}?market=it
Agency listings:
text
GET /v1/immobiliare/agencies/{id}/listings?market=it&page=1
Market price insights (€/m² monthly time series):
text
GET /v1/immobiliare/market-insights/prices?region_id=10&market=it
Required: region_id. Optional params: province_id, city_id, contract (sale|rent). Returns {contract, unit: "EUR/m²", points[{label, value}]}.
List markets (free):
text
GET /v1/immobiliare/markets
Reference data — contracts/categories/sorts (free):
text
GET /v1/immobiliare/reference
Supported markets (4): it (immobiliare.it), es (indomio.es), gr (indomio.gr), lu (immotop.lu).
No YouTube Data API key, OAuth, or quota required. Data is fetched via YouTube's unauthenticated InnerTube JSON API ( youtubei/v1/*) plus SSR-HTML fallback. The gl parameter (ISO 3166-1 alpha-2 content region, default US) and hl parameter (BCP-47 UI language, default en) steer the geo-matched residential proxy + locale. All list endpoints paginate via a continuation token (no page numbers); pass the returned token back as continuation. All datetime fields ship as both *_utc (Unix) and *_at (ISO 8601 UTC).
Search videos / channels / playlists:
text
GET /v1/youtube/search?query=machine+learning&gl=US&hl=en
Optional params: type (video|channel|playlist|movie|all), sort_by (relevance|date|views|rating), upload_date (hour|today|week|month|year), duration (short|medium|long), features (csv: hd,4k,360,vr180,3d,hdr,cc,subtitles,live,creative_commons,location,purchased), continuation. Returns results[] + continuation.
Search autocomplete:
text
GET /v1/youtube/autocomplete?query=machine+lea&gl=US&hl=en
Get video detail (merged player+next):
text
GET /v1/youtube/videos/{video_id}
Related videos:
text
GET /v1/youtube/videos/{video_id}/related?continuation=...
Video comments and nested replies:
text
GET /v1/youtube/videos/{video_id}/comments?sort_by=top&continuation=...
GET /v1/youtube/videos/{video_id}/comments/{comment_id}/replies?continuation=...
Transcript (timed text + full text + SRT/VTT):
text
GET /v1/youtube/videos/{video_id}/transcript?lang=en
Captions / streams / live chat:
text
GET /v1/youtube/videos/{video_id}/captions
GET /v1/youtube/videos/{video_id}/streams
GET /v1/youtube/videos/{video_id}/live_chat?continuation=...
Batch video lookup (POST):
text
POST /v1/youtube/videos/batch
{ "video_ids": ["dQw4w9WgXcQ", "..."] }
Channel detail + tabs:
text
GET /v1/youtube/channels/{channel_id}
GET /v1/youtube/channels/{channel_id}/videos?sort_by=newest&continuation=...
GET /v1/youtube/channels/{channel_id}/shorts?continuation=...
GET /v1/youtube/channels/{channel_id}/streams?continuation=...
GET /v1/youtube/channels/{channel_id}/playlists?continuation=...
GET /v1/youtube/channels/{channel_id}/community?continuation=...
GET /v1/youtube/channels/{channel_id}/about
GET /v1/youtube/channels/{channel_id}/subscriber_count
GET /v1/youtube/channels/{channel_id}/search?query=...&continuation=...
Resolve a handle / custom URL to a channel_id:
text
GET /v1/youtube/channels/resolve?handle=@GoogleDevelopers
Playlists and mixes:
text
GET /v1/youtube/playlists/{playlist_id}
GET /v1/youtube/playlists/{playlist_id}/items?continuation=...
GET /v1/youtube/mixes/{mix_id}
Trending, hashtags, home feed:
text
GET /v1/youtube/trending?gl=US&type=now&continuation=...
GET /v1/youtube/trending/shorts?gl=US&continuation=...
GET /v1/youtube/hashtags/{tag}?gl=US&continuation=...
GET /v1/youtube/home?gl=US&hl=en&continuation=...
Shorts:
text
GET /v1/youtube/shorts/{short_id}
GET /v1/youtube/shorts/by_sound/{sound_id}?continuation=...
Community posts:
text
GET /v1/youtube/posts/{post_id}
GET /v1/youtube/posts/{post_id}/comments?continuation=...
YouTube Music search:
text
GET /v1/youtube/music/search?query=...
Reference (free):
text
GET /v1/youtube/oembed?url=...
GET /v1/youtube/categories
GET /v1/youtube/languages
GET /v1/youtube/regions
GET /v1/youtube/markets
No TikTok login required. The region parameter (ISO 3166-1 alpha-2, default US) steers the residential proxy geo + locale. count is 1–50. Most endpoints use a fast device-signed mobile path with deep cursor pagination. All datetime fields ship as both *_utc (Unix) and *_at (ISO 8601 UTC).
Get user profile:
text
GET /v1/tiktok/users/{username}
Get user's videos (cursor pagination):
text
GET /v1/tiktok/users/{username}/videos?count=30&cursor=...
Get followers (403 if the account hides the list):
text
GET /v1/tiktok/users/{username}/followers?count=20
Get following (403 if private):
text
GET /v1/tiktok/users/{username}/following?count=20
Get liked videos (403 if private):
text
GET /v1/tiktok/users/{username}/liked?count=20
Get reposted videos:
text
GET /v1/tiktok/users/{username}/reposts?count=20
Get video / photo detail:
text
GET /v1/tiktok/videos/{video_id}
Optional param: username
Get video comments:
text
GET /v1/tiktok/videos/{video_id}/comments?count=20
Get comment replies:
text
GET /v1/tiktok/comments/{comment_id}/replies?item_id={video_id}&count=20
Get related videos:
text
GET /v1/tiktok/videos/{video_id}/related?count=20
Get auto-caption transcript:
text
GET /v1/tiktok/videos/{video_id}/transcript
Get oEmbed metadata for a TikTok URL:
text
GET /v1/tiktok/oembed?url=https://www.tiktok.com/@user/video/123
Get hashtag / challenge detail:
text
GET /v1/tiktok/hashtags/{name}
Get videos for a hashtag:
text
GET /v1/tiktok/hashtags/{name}/videos?count=20
Get sound / music detail:
text
GET /v1/tiktok/music/{music_id}
Get videos using a sound:
text
GET /v1/tiktok/music/{music_id}/videos?count=20
General search (returns videos):
text
GET /v1/tiktok/search?query=ai+agents&count=20
Search videos:
text
GET /v1/tiktok/search/videos?query=ai+agents&count=20
Search hashtags:
text
GET /v1/tiktok/search/hashtags?query=ai&count=20
Search users:
text
GET /v1/tiktok/search/users?query=charli&count=20
Trending videos (curated Explore feed):
text
GET /v1/tiktok/trending/videos?region=US&count=20
Trending hashtags (with view_count + creator counts):
text
GET /v1/tiktok/trending/hashtags?region=US&count=20
Trending songs (ranked by usage):
text
GET /v1/tiktok/trending/songs?region=US&count=20
Search the TikTok Commercial Content Library (EU-DSA ad transparency):
text
GET /v1/tiktok/ads/search?query=sneakers®ion=DE&days=30&count=20
Search by keyword ( query) OR by advertiser ( advertiser_id). Paginates via offset + search_id. EU regions only.
List supported regions:
text
GET /v1/tiktok/regions
Coverage notes: following/ liked return 403 when the account hides those lists (most large accounts do). Trending creators and trending keywords are not available (TikTok deprecated the Creative Center trend lists). The Ad Library is EU-only.
Sends a prompt to the real chatgpt.com (not the OpenAI API) and returns the answer as structured JSON, including the web sources ChatGPT cited. Anonymous — no OpenAI account or API key is involved. Measured latency 20-25s ungrounded, 30-70s with web search per call, so set a generous client timeout and don't poll.
Ask ChatGPT (20 credits):
text
GET /v1/chatgpt/ask?prompt=best+open-source+vector+databases&country=US&web_search=auto
Required: prompt (max 4096 chars). Optional: country (ISO-3166 alpha-2 egress country, default US), web_search ( auto | force | off, default auto). Also accepts POST with the same fields as a JSON body.
Returns: prompt, answer, answer_markdown, citations[], search_results[], source_domains[], web_search_triggered (whether ChatGPT actually browsed), reference_tokens[], model, conversation_id, message_id, country, answer_length, citation_count, latency_ms, created_utc/ created_at.
Each Citation is {url, title, snippet, domain, attribution, pub_date_utc, published_at, start_index, end_index, matched_text} — start_index/ end_index are char offsets into answer, so you can anchor a source to the exact sentence it supports. search_results[] is the FULL retrieved set ( {url, title, snippet, domain, attribution, pub_date_utc, published_at, ref_index, cited}), including results ChatGPT retrieved but never cited.
Brand visibility — AEO/GEO (25 credits):
text
GET /v1/chatgpt/brand-visibility?prompt=best+CRM+for+startups&brand=Acme&domain=acme.com&competitors=Salesforce,HubSpot
Required: prompt, brand. Optional: domain, aliases (comma-separated on GET, string[] on POST), competitors (same), country, web_search (default force).
Returns the brand block plus the answer: mentioned, mention_count, first_position (char offset), position_score (1.0 = named at the very start, 0.0 = absent), share_of_voice_pct (brand mentions / brand+competitor mentions), cited, cited_urls[], citation_rank, competitors[] ( {name, mentioned, mention_count, first_position, cited, cited_urls}), excerpt, answer, citations[], web_search_triggered, model, country, latency_ms, created_utc/ created_at.
List available models (1 credit):
text
GET /v1/chatgpt/models?country=US
Returns {models: [{slug, title, description, max_tokens, tags[]}], count}. Informational only — /ask does not take a model parameter.
Health (free):
text
GET /v1/chatgpt/health
Errors come back as {"detail": {"code", "message"}} with codes blocked (422), rate_limited (429), upstream_error, composer_not_found, empty_answer, render_failed, models_unavailable (502). Non-2xx responses are never billed.
Not supported: multi-turn conversations, model selection, streaming, and image input.
Sends a prompt to the real perplexity.ai and returns the grounded answer as structured JSON, including the web sources Perplexity cited. Anonymous — no Perplexity account or API key is involved. Every answer is a live browse taking tens of seconds, so set a generous client timeout and don't poll.
Ask Perplexity (20 credits):
text
GET /v1/perplexity/ask?prompt=best+open-source+vector+databases&country=US&focus=web
Required: prompt (max 4096 chars). Optional: country (ISO-3166 alpha-2 egress country, default US), focus ( web | scholar | social, default web — scholar grounds on academic sources, social on community sources). Also accepts POST with the same fields as a JSON body.
Returns: prompt, answer, answer_markdown, citations[], search_results[], source_domains[], related_questions[], images[]/ videos[], web_search_triggered, truncated, search_queries[] (Perplexity's own retrieval fan-out — the sub-queries it issued to its search backend, which no other vendor exposes), focus, model, backend_uuid, country, answer_length, citation_count, latency_ms, created_utc/ created_at.
Each Citation is {url, title, snippet, domain, source_type, pub_date_utc, published_at, last_updated, ref_index, start_index, end_index, matched_text} — start_index/ end_index are char offsets into answer, so you can anchor a source to the exact sentence it supports. search_results[] is the FULL retrieved set ( {url, title, snippet, domain, source_type, pub_date_utc, published_at, last_updated, ref_index, cited}), including results Perplexity retrieved but never cited.
Brand visibility — AEO/GEO (25 credits):
text
GET /v1/perplexity/brand-visibility?prompt=best+CRM+for+startups&brand=Acme&domain=acme.com&competitors=Salesforce,HubSpot
Required: prompt, brand. Optional: domain, aliases (comma-separated on GET, string[] on POST), competitors (same), country.
Returns the brand block plus the answer: mentioned, mention_count, first_position (char offset), position_score (1.0 = named at the very start, 0.0 = absent), share_of_voice_pct (brand mentions / brand+competitor mentions), cited, cited_urls[], citation_rank, competitors[] ( {name, mentioned, mention_count, first_position, cited, cited_urls}), excerpt, answer, citations[], web_search_triggered, model, country, latency_ms, created_utc/ created_at.
List available models (1 credit):
text
GET /v1/perplexity/models?country=US
Returns {models: [{slug, title, description, requires_account}], count}. Informational only — /ask takes a focus parameter, not a model.
Health (free):
text
GET /v1/perplexity/health
Non-2xx responses are never billed.
Not supported: multi-turn conversations (a backend_uuid is returned but follow-up chaining is not exposed), model selection, streaming, and image input.
Web search, news, images and autocomplete from baidu.com — China's #1 search engine (~60% CN market share). No Baidu account or developer key is needed. Chinese and English queries both work; there is no country parameter, Baidu is a single market.
Web search (5 credits):
text
GET /v1/baidu/search?query=咖啡机&page=1&num=20&language=zh-cn
GET /v1/baidu/search?query=site:zhihu.com+咖啡&time_from=1735689600&time_to=1767225600
Required: query. Optional: page (1-76), num (1-50), language ( all | zh-cn | zh-tw), time_from/ time_to (unix timestamps). Baidu's own operators — site:, intitle:, inurl:, filetype:, "quoted phrases" — work inside query. page is translated to Baidu's pn offset using num, so the two compose ( page=3&num=50 starts at result 101).
Each organic result carries the real target URL in url (from Baidu's mu attribute) alongside baidu_url (the baidu.com/link?url= tracking redirect competitors return on its own), plus display_url, snippet, source, date (Baidu's own string, e.g. 2026年8月1日 / 3天前), date_at (ISO 8601 date), thumbnail, tpl (Baidu's result template id). The response also carries total_results and related_searches[].
News (5 credits):
text
GET /v1/baidu/news?query=人工智能&sort=time
Required: query. Optional: page (1-76), sort ( relevance default, or time for newest first). 10 articles a page; each has title, url, baidu_url, snippet, source, date, date_at, thumbnail.
Images (5 credits):
text
GET /v1/baidu/images?query=熊猫&page=1
Required: query. Optional: page (1-50). 30 images a page, each with image_url (full size), thumbnail_url, middle_url, hover_url, width, height, type, from_url and from_title (the page it was found on).
Autocomplete (1 credit):
text
GET /v1/baidu/autocomplete?query=咖啡
Gotchas that will bite you:
total_results is Baidu's own claim ( 百度为您找到相关结果约N个) and is not reachable — pagination stops around page 76 regardless.position is organic rank.*_utc float — only date (raw) and date_at (ISO date). A midnight timestamp would be fabricated precision.url is null when Baidu omits the mu attribute on a result; baidu_url is present either way.language and the time window are server-side Baidu filters, not post-filtering — they change which results Baidu returns.Cost: 1 credit autocomplete; 5 credits search / news / images. health is free.
Scrape a URL:
text
POST /v1/web/scrape
Content-Type: application/json
{"url": "https://example.com", "render_js": false, "return_format": "markdown"}
Optional fields: render_js (boolean), wait_for (CSS selector), timeout_ms, proxy_country, return_format (html/markdown/text)
Detect anti-bot protection (1 credit):
text
POST /v1/web/detect
Content-Type: application/json
{"url": "https://example.com"}
Take screenshot:
text
POST /v1/web/screenshot
Content-Type: application/json
{"url": "https://example.com", "full_page": true}
Extract structured data:
text
POST /v1/web/extract
Content-Type: application/json
{"url": "https://example.com", "ai_query": "What is the main product price?"}
Optional fields: extract_rules (CSS/XPath), ai_extract_rules, ai_query
Submit batch job:
text
POST /v1/web/batch
Content-Type: application/json
{"urls": ["https://example.com", "https://example.org"]}
Check batch status:
text
GET /v1/web/batch/{job_id}
Most list endpoints support cursor-based pagination. Pass the cursor query parameter from the previous response to get the next page.
Each API call costs credits. Check your balance:
Rate limits are per API key. Check the X-RateLimit-* response headers for current limits.