{"serverId":"mcp-registry/io.github.cdcstream/captapi","tools":[{"name":"analytics_compare","fixed":{"name":"analytics_compare","description":"Compare unified metrics across up to 10 URLs — each row is the analytics/post object (1 credit/resolved URL). Costs 1 credit/url. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["urls"],"properties":{"urls":{"type":"string","description":"Comma-separated post/video/reel URLs (up to 10), any mix of the same 11 platforms as Post Analytics. Example: a TikTok URL and a YouTube URL in one call."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":201,"tokensAfter":201},{"name":"analytics_post","fixed":{"name":"analytics_post","description":"Unified metrics for one post, video, or reel — platform auto-detected (1 credit). Costs 1 credit. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Public post/video/reel URL from one of 11 platforms: YouTube, TikTok, Instagram, Facebook, X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, or Rumble. Platform is auto-detected — cross-platform URLs are expected here (unlike single-platform endpoints). Not in scope: Kwai, Twitch, Spotify, Snapchat, and other Captapi platforms."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":244,"tokensAfter":244},{"name":"bluesky_post_details","fixed":{"name":"bluesky_post_details","description":"Post thread via getPostThread — nested replies[], facet links/mentions/hashtags, rich author (1 credit). Costs 1 credit. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Bluesky post URL, e.g. https://bsky.app/profile/handle/post/RKEY. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"depth":{"type":"integer","minimum":1,"description":"Reply nesting levels under the post (0 = post only with no replies[], default 1, max 6). Maps to Bluesky getPostThread depth."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":279,"tokensAfter":279},{"name":"bluesky_user_posts","fixed":{"name":"bluesky_user_posts","description":"Author feed — posts and reposts (isRepost marked), quote/external/images embeds, opaque cursor. Costs ~3 credits (0.1/result). Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Bluesky profile URL, @handle, or handle, e.g. https://bsky.app/profile/handle.bsky.social. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 25, max 100). Billed per result."},"cursor":{"type":"string","description":"Opaque pagination cursor from the previous nextCursor. Leave empty for the first page. Do not invent a cursor from publishedAt — the feed is ordered by feed time (reposts sort by repost time)."},"filter":{"type":"string","description":"Bluesky getAuthorFeed filter: posts_with_replies (default), posts_no_replies, posts_with_media, posts_and_author_threads, or posts_with_video. Controls replies/media/threads — not reposts. Use includeReposts=false to drop reposts."},"includeReposts":{"type":"boolean","description":"When false, omit repost rows (reasonRepost). Default true — reposts are included and marked with isRepost / repostedBy / repostedAt."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":462,"tokensAfter":462},{"name":"facebook_ad_library_search","fixed":{"name":"facebook_ad_library_search","description":"Search Meta Ad Library by keyword — active/inactive, media type, date range, platforms, cursor, and spend/impressions when Meta publishes them. Costs 2 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Keyword, brand, or advertiser to search Meta Ad Library (min 2 characters)."},"trim":{"type":"boolean","description":"When true, omit cards/images/videos typed arrays (media[] stays). Captapi payloads are already lean vs Meta nested snapshots."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 20, max 200). Flat 2 credits per call."},"cursor":{"type":"string","description":"Pagination cursor from a previous nextCursor. Pages through the current Meta HTML result batch."},"status":{"type":"string","description":"Ad delivery status: ACTIVE (default), INACTIVE, or ALL. Use ACTIVE for \"what are they running now?\"."},"ad_type":{"type":"string","description":"all (default) or political_and_issue_ads. Spend/impressions are typically only filled for political/issue ads."},"country":{"type":"string","description":"Two-letter ISO country code (e.g. US, GB, DE). Default US. Non-ISO codes are a definitive 400 INVALID_COUNTRY — Meta would otherwise ignore the code and search globally while echoing it back as if the filter worked."},"sort_by":{"type":"string","description":"Meta sort mode: total_impressions or relevancy_monthly_grouped."},"end_date":{"type":"string","description":"Only ads with delivery start on/before this date (YYYY-MM-DD)."},"platforms":{"type":"string","description":"Comma-separated publisher platforms to keep: FACEBOOK, INSTAGRAM, MESSENGER, AUDIENCE_NETWORK, THREADS."},"media_type":{"type":"string","description":"Creative filter: ALL (default), IMAGE, VIDEO, MEME, IMAGE_AND_MEME, or NONE."},"start_date":{"type":"string","description":"Only ads with delivery start on/after this date (YYYY-MM-DD)."},"search_type":{"type":"string","description":"keyword_unordered (default) or keyword_exact_phrase."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":658,"tokensAfter":658},{"name":"facebook_ad_library_search_companies","fixed":{"name":"facebook_ad_library_search_companies","description":"Find Meta Ad Library pages by brand — name-matched, pageId for company-ads (not profileId). Costs 2 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Company or brand name to search for (min 2 characters). Name-matched — off-brand pages are dropped."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 20, max 200). Flat 2 credits per call."},"country":{"type":"string","description":"Two-letter ISO country code. Default US. Non-ISO codes are a definitive 400 INVALID_COUNTRY."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":256,"tokensAfter":256},{"name":"facebook_event_search","fixed":{"name":"facebook_event_search","description":"Search Facebook events by topic and city — local startDate/timezone, venue. 2 credits. Costs 2 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Topic keyword, e.g. 'comedy'. Pair with location for city-scoped results."},"to":{"type":"string","description":"Inclusive local start date filter YYYY-MM-DD."},"from":{"type":"string","description":"Inclusive local start date filter YYYY-MM-DD. Use for upcoming-only windows — Facebook/SERP may return past events."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 20, max 200). Flat 2 credits per call. Response `source` is native or extended (fetch path — not a price change)."},"location":{"type":"string","description":"City/place geo filter (e.g. London). Matches timezone, location.city, or coords near the city — not a title substring."},"upcoming":{"type":"boolean","description":"When true and from is omitted, sets from to today's UTC date so past events are dropped."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":376,"tokensAfter":376},{"name":"facebook_group_posts","fixed":{"name":"facebook_group_posts","description":"Newest posts from a public Facebook group — caption, author, engagement, sortBy; 1 credit per post. Costs ~20 credits (1/result). Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Public Facebook group URL, e.g. https://facebook.com/groups/ID. Must contain /groups/ — profile/page URLs are a definitive 400 (use /v1/facebook/profile-posts for those). The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max posts to return (default 20, max 200; up to 80 per call — above that you get 80 with truncatedReason per-call-cap). Billed 1 credit per returned post, minimum 2."},"sortBy":{"type":"string","description":"TOP_POSTS | RECENT_ACTIVITY | CHRONOLOGICAL (default) | CHRONOLOGICAL_LISTINGS. Maps to Facebook sorting_setting."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":365,"tokensAfter":365},{"name":"facebook_marketplace_location_search","fixed":{"name":"facebook_marketplace_location_search","description":"Disambiguate city names into Marketplace hubs — id + lat/lng. Flat 2 credits. Costs 2 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"City/place query. Bare names like 'Austin' may return multiple candidates (TX/MN/IN); include a state for a single hit (e.g. 'Austin, TX')."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 10, max 50). Flat 2 credits per call."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":225,"tokensAfter":225},{"name":"facebook_marketplace_search","fixed":{"name":"facebook_marketplace_search","description":"Search Marketplace by keyword + city — filters, isLocal/shipsOutsideRadius, opaque cursor (2 credits). Costs 2 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["q","searchLocation"],"properties":{"q":{"type":"string","description":"Product or keyword to search Facebook Marketplace for."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"How many listings to return (1–200). Flat 2 credits when details=false; details=true billed as 2 + 2 per listing."},"cursor":{"type":"string","description":"Opaque pagination cursor from a previous nextCursor."},"sortBy":{"type":"string","description":"suggested | distance | creation_time | price_ascend | price_descend."},"details":{"type":"boolean","description":"When true, adds description/condition/coordinates/full photo gallery/seller/distanceMiles — billed as 2 + 2 credits per listing. Default false → flat 2 credits; cover photo is still in image."},"category":{"type":"string","description":"Top-level category slug, e.g. electronics."},"location":{"type":"string","description":"Alias of searchLocation. Prefer searchLocation. Either one is required."},"maxPrice":{"type":"integer","minimum":1,"description":"Maximum price in local currency units."},"minPrice":{"type":"integer","minimum":1,"description":"Minimum price in local currency units."},"condition":{"type":"string","description":"new, like_new, good, fair (comma-separated ok)."},"radiusMiles":{"type":"integer","minimum":1,"description":"Radius in miles: 1,2,5,10,20,40,60,80,100,250,500. Does not exclude nationwide shipped inventory."},"availability":{"type":"string","description":"available | sold | all."},"deliveryMethod":{"type":"string","description":"local_pickup | shipping | all. Shipped listings can appear nationwide outside radiusMiles — use local_pickup for nearby-only; rows expose isLocal / shipsOutsideRadius."},"searchLocation":{"type":"string","description":"Search-origin city or place name, e.g. 'Austin, TX'. Required — there is no default city. Echoed on the envelope and inside filters. Not listings[].location. Names that don't resolve to a real place are a definitive 400 UNKNOWN_LOCATION (Facebook would otherwise silently search an unrelated metro) — /v1/facebook/marketplace-location-search finds valid ones."},"daysSinceListed":{"type":"string","description":"Facebook calendar-day recency: 1 = since the start of yesterday (not a rolling 24 hours), 7, or 30."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":765,"tokensAfter":765},{"name":"facebook_profile_posts","fixed":{"name":"facebook_profile_posts","description":"Latest posts and Reels from a Facebook page — listingHits / timings.phase; 60s deadline, failures 0 credits. Costs 2 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Facebook profile/page URL, @handle, or page name. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 4, max 4). The logged-out listing hop is ~23–29s typical, hard-capped at 40s. Each hydrate is typically 6–10s (can be ~100ms when listing already carried the post) and is capped at 12s. The next-item fit check uses that 12s cap, not the typical 6–10s, so a call cannot exceed 60s. The loop stops when the next item would miss the 60s deadline and returns what it has (truncatedReason=hydrate-budget | deadline). Asking for 20 cannot return 20 inside that ceiling. Flat 2 credits per call."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":385,"tokensAfter":385},{"name":"facebook_summarize","fixed":{"name":"facebook_summarize","description":"Summarizer Costs 4 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Public Facebook video or post URL. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":194,"tokensAfter":194},{"name":"google_ad_library_advertiser_search","fixed":{"name":"google_ad_library_advertiser_search","description":"Find Google Ads Transparency AR… entities — ranked multi-result (1 credit when found; empty is free). Costs 1 credit. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Brand, domain, or advertiser name (min 2 characters). Expanded + ranked so US prefers Inc. over SRL."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 10, max 50). Flat 1 credit when results are returned; 0 credits when totalReturned is 0."},"country":{"type":"string","description":"Two-letter ISO country code used for ranking (e.g. US). Default US. Non-ISO codes are a definitive 400 INVALID_COUNTRY."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":280,"tokensAfter":280},{"name":"google_maps_business_search","fixed":{"name":"google_maps_business_search","description":"Local businesses from a Maps search — name, address, phone, website, rating, hours, place id. Flat 2 credits. No emails. Costs 2 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Keyword, for example plumber or coffee. Min 2 characters."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max businesses to return (default 20, max 100). Not a page cursor — there is no next page. Flat 2 credits on every successful call, including zero businesses."},"language":{"type":"string","description":"Language code, for example en. Default en."},"location":{"type":"string","description":"Place name: City, Country or City, Region, Country — for example Austin, TX, Istanbul, Turkey, Paris, France, or a country such as Germany. Case, accents, US state codes, and country aliases (USA, UK, Turkey) are handled. A city name shared by several places (Paris) returns 400 with suggestions. When set, the locationCode parameter is ignored."},"locationCode":{"type":"integer","minimum":1,"description":"Numeric place code, used only when location is omitted. Default 2840 (United States)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":411,"tokensAfter":411},{"name":"instagram_channel_posts","fixed":{"name":"instagram_channel_posts","description":"Latest posts from a public Instagram profile — carousel children[], mediaCount, user{} in one call. Costs ~6 credits (0.3/result). Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Instagram profile URL, @handle, or username, e.g. https://instagram.com/username/. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 20, max 200). Billed per result."},"cursor":{"type":"string","description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response (e.g. 3937014945555313553_1697296). A null nextCursor means the end of the list."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":336,"tokensAfter":336},{"name":"instagram_hashtag_search","fixed":{"name":"instagram_hashtag_search","description":"Hashtag Explore: native grid first, fallback path only on miss. Max 50. Flat 2 credits. Costs 2 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Hashtag without the # (min 2 characters). One token — spaces are 400 HASHTAG_HAS_SPACES."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 20, max 50). Flat 2 credits per call."},"mediaType":{"type":"string","description":"all (default) or reels — return only Reels/clips when set to reels."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":242,"tokensAfter":242},{"name":"instagram_profile_search","fixed":{"name":"instagram_profile_search","description":"Resolve a brand or @handle to one public Instagram profile — stable id, bio, links, and stats (not niche discovery). Costs 1 credit. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Account name, @handle, or profile URL to resolve (min 2 characters). A leading _, accents (misión → mision), spaces and URL query strings (?igsh=…) are stripped. A q with no usable username characters is 400 BAD_REQUEST. Not a niche keyword search."},"cache":{"type":"boolean","description":"Serve from the 24h shared cache when available (0 credits on hit). Default true — set false to always fetch fresh."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":232,"tokensAfter":232},{"name":"instagram_reels_search","fixed":{"name":"instagram_reels_search","description":"Native tag feed first, slower fallback paths on a miss. Max 50. Flat 2 credits. Costs 2 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Hashtag without the # (min 2 characters). One token — spaces are 400 HASHTAG_HAS_SPACES."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 20, max 50). Flat 2 credits per call."},"datePosted":{"type":"string","description":"last_24_hours | last_week | last_month | last_year (aliases: today, this_week, this_month, this_year)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":249,"tokensAfter":249},{"name":"instagram_summarize","fixed":{"name":"instagram_summarize","description":"Get an AI summary of any Instagram Reel — a short paragraph plus key points, without watching the video. Costs 4 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Instagram Reel URL, e.g. https://instagram.com/reel/ID/. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"language":{"type":"string","description":"ISO code, e.g. \"tr\": pins the speech language and sets the summary output language. Defaults to auto-detect + English summary."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":274,"tokensAfter":274},{"name":"instagram_tagged_posts","fixed":{"name":"instagram_tagged_posts","description":"Posts that tag an Instagram account — author verified/avatar when available, staleFeed when Instagram only exposes an archive. Costs 1 credit. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Instagram profile URL, @handle, or username, e.g. https://instagram.com/username/. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 20, max 200). Flat 1 credit per call."},"cursor":{"type":"string","description":"Leave empty for the first page; then pass the nextCursor value returned in the previous response."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":313,"tokensAfter":313},{"name":"kwai_post","fixed":{"name":"kwai_post","description":"Single Kwai video — caption (\"\" when none), hashtags[], author, mp4 (2 credits). Costs 2 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Kwai video URL, e.g. https://www.kwai.com/@topfilmeseseriesnatv/video/5240932700689736196. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":227,"tokensAfter":227},{"name":"kwai_user_posts","fixed":{"name":"kwai_user_posts","description":"Kwai profile posts — caption (\"\" when none), engagement, mp4 + transcript (~1 credit/post). Costs ~20 credits (1/result). Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Kwai profile URL or @handle, e.g. https://www.kwai.com/@topfilmeseseriesnatv. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max posts to return (1–200). Default 20. ~1 credit per post returned (min 2)."},"cursor":{"type":"string","description":"Opaque pagination cursor from the previous nextCursor. Pages within posts from one profile fetch."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":307,"tokensAfter":307},{"name":"linkedin_ad_library_search_ads","fixed":{"name":"linkedin_ad_library_search_ads","description":"LinkedIn publishes run dates, impressions and targeting only on a subset of creatives. Search is the SERP card; source is native|extended. Costs 2 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"Advertiser / account owner name (min 2 when used). Provide q/company, keyword, or companyId."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 20, max 200). One LinkedIn SERP page is ~25 cards — when limit is higher, further pages are pulled automatically within the request's time budget, so limit=50 fills to 50 when LinkedIn has the ads (hasMore + nextCursor cover the rest). Flat 2 credits per call on the native path; the extended fallback bills ~3.5 credits per returned ad. Response `source` is native or extended so you can see which price applied."},"cursor":{"type":"string","description":"Pagination token from paginationToken / nextCursor."},"company":{"type":"string","description":"Alias of q — advertiser / account owner name."},"country":{"type":"string","description":"Single ISO country code. Default US. Ignored when countries is set. Non-ISO codes are a definitive 400 INVALID_COUNTRY — LinkedIn would otherwise answer an empty result set as if the filter worked."},"endDate":{"type":"string","description":"Custom range end YYYY-MM-DD (use with startDate)."},"keyword":{"type":"string","description":"Optional keyword filter on ad creative copy. Whole-word hits are ordered first; already-fetched SERP cards without a literal hit fill behind them up to limit (matchedFrom [] = ranked fill)."},"companyId":{"type":"string","description":"LinkedIn numeric company id for exact advertiser match."},"countries":{"type":"string","description":"Comma-separated ISO country codes (e.g. US,CA,MX). Each code is validated — non-ISO codes are a 400 INVALID_COUNTRY."},"startDate":{"type":"string","description":"Custom range start YYYY-MM-DD (use with endDate)."},"paginationToken":{"type":"string","description":"Alias of cursor."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":656,"tokensAfter":656},{"name":"linkedin_company_posts","fixed":{"name":"linkedin_company_posts","description":"The recent posts a company page shows logged-out visitors (about 10), with engagement{likes,comments}. Flat 1 credit. Costs 1 credit. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"LinkedIn company URL, e.g. https://linkedin.com/company/slug. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 20, max 100). Only the ~10 posts the public page shows are available. Flat 1 credit."},"cursor":{"type":"string","description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response (numeric offset, e.g. 5). A null nextCursor means the end of the list. Only the recent posts LinkedIn shows logged-out visitors (about 10) are available."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":365,"tokensAfter":365},{"name":"linkedin_post_details","fixed":{"name":"linkedin_post_details","description":"Get a LinkedIn post — text, author, reactions, and comments count as structured JSON. Costs 1 credit. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"LinkedIn post or activity URL. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":214,"tokensAfter":214},{"name":"linkedin_post_transcript","fixed":{"name":"linkedin_post_transcript","description":"LinkedIn post text as a transcript — paragraph segments, timingSource none. Flat 1 credit. Costs 1 credit. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"LinkedIn post or activity URL. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":216,"tokensAfter":216},{"name":"linkedin_search_posts","fixed":{"name":"linkedin_search_posts","description":"Keyword search of public LinkedIn posts — offset cursor, ceiling 50. Costs ~16 credits (0.8/result). Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Search query or keywords (min 2 characters)."},"sort":{"type":"string","description":"relevance (default, search-engine rank — dates can span years) or date (found posts newest first)."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 20, max 50). Billed per result."},"cursor":{"type":"string","description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response (numeric offset, e.g. 20). A null nextCursor means the end of the list (max 50 posts)."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":301,"tokensAfter":301},{"name":"pinterest_search","fixed":{"name":"pinterest_search","description":"Keyword pin search — offset cursor, SERP window 40. Costs ~13 credits (0.5/result). Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Keywords or search query (min 2 characters)."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 25, max 200). Billed per result."},"cursor":{"type":"string","description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response (numeric offset, e.g. 25). A null nextCursor means the end of the SERP window (max 40)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":257,"tokensAfter":257},{"name":"reddit_post_comments","fixed":{"name":"reddit_post_comments","description":"Flat Reddit comment threads with depth/parentId and the parent post in one call. Costs 2 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Reddit post URL. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 50, max 500). Flat 2 credits per call."},"cursor":{"type":"string","description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":287,"tokensAfter":287},{"name":"reddit_post_details","fixed":{"name":"reddit_post_details","description":"Get a Reddit post — title, body, score, comments count, subreddit, and author as structured JSON. Costs 1 credit. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Reddit post URL, e.g. https://reddit.com/r/sub/comments/ID/... The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":225,"tokensAfter":225},{"name":"reddit_post_transcript","fixed":{"name":"reddit_post_transcript","description":"Written post text — title, body and top comments. Not a speech transcript. Flat 2 credits. Costs 2 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Reddit post URL. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 50, max 200). Flat 2 credits per call."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":246,"tokensAfter":246},{"name":"reddit_search","fixed":{"name":"reddit_search","description":"Reddit site-wide post search — sort + timeframe + cursor, score/upvoteRatio, authorFullname. Flat 2 credits. Costs 2 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Keyword or phrase to search Reddit posts site-wide (min 2 characters)."},"sort":{"type":"string","description":"relevance (default) | new | top | hot | comments (alias: comment_count)."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 25, max 200). Flat 2 credits per call."},"cursor":{"type":"string","description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response."},"timeframe":{"type":"string","description":"For sort=top or comments: hour | day | week | month | year | all (default all)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":319,"tokensAfter":319},{"name":"reddit_subreddit_posts","fixed":{"name":"reddit_subreddit_posts","description":"List posts from a subreddit with sort, timeframe, and cursor pagination — title, score, upvote ratio, flair, and more. Costs 2 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Subreddit URL, r/name, or bare name, e.g. r/technology. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"sort":{"type":"string","description":"Feed sort: best, hot, new (default), top, or rising."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 25, max 200). Flat 2 credits per call."},"cursor":{"type":"string","description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response."},"timeframe":{"type":"string","description":"For sort=top: hour, day (default), week, month, year, or all."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":365,"tokensAfter":365},{"name":"reddit_subreddit_search","fixed":{"name":"reddit_subreddit_search","description":"Search posts inside one subreddit — not subreddit discovery. Same sort/timeframe as site-wide Search. Flat 2 credits. Costs 2 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url","q"],"properties":{"q":{"type":"string","description":"Keywords or search query (min 2 characters)."},"url":{"type":"string","format":"uri","description":"Subreddit URL, r/name, or bare name, e.g. r/technology. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"sort":{"type":"string","description":"relevance (default) | new | top | hot | comments (alias: comment_count)."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 25, max 200). Flat 2 credits per call."},"cursor":{"type":"string","description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response."},"timeframe":{"type":"string","description":"For sort=top or comments: hour | day | week | month | year | all (default all)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":400,"tokensAfter":400},{"name":"rumble_search","fixed":{"name":"rumble_search","description":"Rumble keyword search — same video card shape as channel-videos (type, durationSeconds + durationText, UTC publishedAt). Costs ~12 credits (0.6/result). Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Keywords or search query (min 2 characters)."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 20, max 200). Billed per result."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":207,"tokensAfter":207},{"name":"spotify_search","fixed":{"name":"spotify_search","description":"Search Spotify — canonical spotify: URIs, explicit, fetchedAt (flat 2 credits). Costs 2 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Search term (min 2 chars)."},"raw":{"type":"boolean","description":"Include per-result upstream payload as results[].raw. Default false. Pathfinder GraphQL vs fallback-path shapes differ — see FAQ."},"type":{"type":"string","description":"Result kind: tracks (default), albums, artists, podcasts, or episodes."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 20, max 50). Flat 2 credits per call."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":266,"tokensAfter":266},{"name":"threads_post_details","fixed":{"name":"threads_post_details","description":"Threads post — engagement (views when exposed), comments[], relatedPosts[], threadId/isReply. Flat 1 credit. Costs 1 credit. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Threads post URL, e.g. https://threads.net/@user/post/CODE. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":228,"tokensAfter":228},{"name":"threads_search","fixed":{"name":"threads_search","description":"Threads keyword search — posts with engagement + media. orderBy relevant | post_dated | engagement. Flat 2 credits. Costs 2 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Keyword or phrase to search public Threads posts (min 2 characters)."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 25, max 200). Flat 2 credits per call."},"orderBy":{"type":"string","description":"Sort the fetched page: relevant (default, Meta Top / similar to query), post_dated (newest publishedAt first), or engagement (likes+replies+reposts+quotes+views). Unknown values are 400."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":274,"tokensAfter":274},{"name":"threads_search_users","fixed":{"name":"threads_search_users","description":"Threads user discovery from keyword search — id, handle, avatar, verified. Flat 1 credit. Costs 1 credit. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Keyword to find Threads users / creators (min 2 characters)."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 20, max 100). Flat 1 credit per call."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":201,"tokensAfter":201},{"name":"threads_user_posts","fixed":{"name":"threads_user_posts","description":"Recent Threads posts — engagement{views,likes,replies,reposts,quotes}, threadId/isReply. Flat 2 credits. source + stages/ms. Costs 2 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Threads profile URL or @handle. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 20, max 100). Threads exposes only a short window of recent public posts on this surface. limit caps what you receive; it cannot increase what Threads returns. Flat 2 credits on every successful path (native and extended)."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":310,"tokensAfter":310},{"name":"tiktok_ad_library_search","fixed":{"name":"tiktok_ad_library_search","description":"Search TikTok Commercial Content Library — relevance-filtered, uniform null schema (2 credits native, 5 via fallback). Costs 2 credits (5 via fallback path). Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Keyword or advertiser to search TikTok Commercial Content Library (min 2 characters)."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 20, max 200). Does not change the price: 2 credits native, 5 via the fallback path, 0 when empty."},"match":{"type":"string","description":"Keyword token mode: \"any\" (default, OR whole-word) or \"all\" (AND). hair ≠ wheelchair. Literal hits lead; already-fetched SERP ads fill behind them up to limit (matchedFrom [] = ranked fill). Empty results are free."},"country":{"type":"string","description":"Two-letter ISO country code (e.g. GB, DE, FR). Default GB. TikTok's Commercial Content Library only covers the EU/EEA, the UK and Switzerland (32 countries) — other codes (US, SA, …) return 400 UNSUPPORTED_REGION with the supported list; TikTok has no ad-library data for them."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":402,"tokensAfter":402},{"name":"tiktok_channel_posts","fixed":{"name":"tiktok_channel_posts","description":"Latest videos from a TikTok profile. May return a labelled 6h-stale snapshot (degraded + staleAgeMs) when the live list is blocked. Failures are 0 credits. Costs 2 credits (fallback: 1 per 20 posts, min 2). Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"TikTok profile URL, @handle, or username, e.g. https://tiktok.com/@username. Not a YouTube channel URL. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"How many of the creator's latest videos to return on this page (default 20, max 200). Newest first. Native serves cost a flat 2 credits; extended serves scale with returned posts — 1 credit per 20, minimum 2 (200 posts = 10 credits)."},"cursor":{"type":"string","description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response (TikTok's max_cursor timestamp, e.g. 1783614676000). A null nextCursor means the end of the list."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":415,"tokensAfter":415},{"name":"tiktok_live_info","fixed":{"name":"tiktok_live_info","description":"Identical to TikTok Live (isLive, creator.id/secUid, streamQualities hls/cmaf). Costs 1 credit. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"TikTok profile URL, @handle, or username, e.g. https://tiktok.com/@username. Not a YouTube channel URL. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":231,"tokensAfter":231},{"name":"tiktok_music_posts","fixed":{"name":"tiktok_music_posts","description":"List TikTok videos that use a specific sound — caption, author, exact engagement, canonical hashtags, and mentions, with cursor pagination. Costs 2 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"TikTok music/sound URL, e.g. https://tiktok.com/music/name-ID. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Most videos to return (default 20, 1–50; outside that range is a 400). TikTok serves this feed in short pages, so a call can return fewer than limit with a nextCursor to continue. Flat 2 credits per call."},"cursor":{"type":"string","description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response. hasMore is true only when nextCursor is present."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":367,"tokensAfter":367},{"name":"tiktok_search_by_hashtag","fixed":{"name":"tiktok_search_by_hashtag","description":"Videos from TikTok's /tag/{name} challenge feed — not keyword or username search. Cursor + hasMore. Costs ~14 credits (0.7/result). Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Single hashtag token for the /tag/{name} challenge feed, with or without # (min 2). Spaces are 400 — use /v1/tiktok/top-search for a keyword query."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 20, max 100). Billed per result."},"cursor":{"type":"integer","minimum":1,"description":"Pagination offset. Leave at 0 (or omit) for the first page; then pass the nextCursor value returned in the previous response. A null nextCursor means the end of the results."},"region":{"type":"string","description":"Two-letter ISO 3166-1 country our request is sent from. Default US. Does not filter results by country."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":337,"tokensAfter":337},{"name":"tiktok_search_suggestions","fixed":{"name":"tiktok_search_suggestions","description":"Get the autocomplete terms TikTok suggests in its search bar for a keyword — the real phrases people search, ranked, so you can find trending queries and long-tail keyword ideas. Costs 2 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Seed keyword to expand into autocomplete suggestions, e.g. skincare."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 20, max 100). Flat 2 credits per call."},"country":{"type":"string","description":"Two-letter ISO country code that localizes the suggestions to a market, e.g. US, GB, DE. Default US."},"language":{"type":"string","description":"Interface language for the suggestions, e.g. en-US or de-DE. Default en-US."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":304,"tokensAfter":304},{"name":"tiktok_search_users","fixed":{"name":"tiktok_search_users","description":"Search TikTok users — distinct creators only, id + secUid, per-counter isApproximate flags, cursor pagination. Costs 1 credit. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Search query matched against usernames, display names and bios (min 2 characters)."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 20, max 100). Flat 1 credit per call."},"cursor":{"type":"string","description":"Pagination cursor. Omit (or pass 0) for the first page; then pass the nextCursor value from the previous response verbatim — it carries the search session, not just an offset. A null nextCursor means the end of the results."},"fallback":{"type":"boolean","description":"Opt into the slower fallback path when native search is unavailable (~2 min, capped at 100 s, degraded-empty on timeout). Default false — return an empty degraded page (0 credits) instead."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":352,"tokensAfter":352},{"name":"tiktok_shop_search","fixed":{"name":"tiktok_shop_search","description":"TikTok Shop keyword search — priced products with sold, rating/reviews, typed discount, seller id. Costs 2 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Product search query (min 2 characters), e.g. phone case."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 10, max 10). Flat 2 credits per call."},"region":{"type":"string","description":"Two-letter market region for the search (default US). Echoed on the response as data.region — not a creator home country. Native search is a SERP window (not TikTok's full catalog); compare requested to serpHits / windowMax."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":277,"tokensAfter":277},{"name":"tiktok_shop_user_showcase","fixed":{"name":"tiktok_shop_user_showcase","description":"Creator Shop showcase — affiliate shelf products with per-product sold, rating, typed discount, and seller name/url. Costs ~45 credits (2.25/result). Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["username"],"properties":{"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 20, max 200). Billed per result."},"username":{"type":"string","description":"TikTok username, @handle, or profile URL, e.g. jeffreestar or https://www.tiktok.com/@jeffreestar."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":228,"tokensAfter":228},{"name":"tiktok_summarize","fixed":{"name":"tiktok_summarize","description":"Summarizer Costs 4 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Public TikTok video URL, e.g. https://www.tiktok.com/@khaby.lame/video/7646812028874673439. Not a YouTube/Instagram/Facebook URL. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"language":{"type":"string","description":"ISO code, e.g. \"tr\": pins the speech language and sets the summary output language. Defaults to auto-detect + English summary."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":268,"tokensAfter":268},{"name":"tiktok_top_search","fixed":{"name":"tiktok_top_search","description":"TikTok Top/General search — videos and photo carousels when TikTok includes them, with contentType + images[]. Costs 2 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Search query or keywords (min 2 characters)."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 20, max 200). Flat 2 credits per call."},"cursor":{"type":"integer","minimum":1,"description":"Pagination cursor. Leave 0 for the first page; then pass nextCursor from the previous response. TikTok may return duplicates across pages."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":257,"tokensAfter":257},{"name":"truth_social_post","fixed":{"name":"truth_social_post","description":"One Truth — text, links[], card, reblog/quote chain, media.meta, externalVideoId. Flat 1 credit. Costs 1 credit. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Truth Social post URL or post ID. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":217,"tokensAfter":217},{"name":"truth_social_user_posts","fixed":{"name":"truth_social_user_posts","description":"Recent Truths — same post mapper as /post (links, card, reblog/quote, mentions). 2 credits. Costs 2 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Truth Social profile URL or @username. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max posts to return (default 20, max 80). Truth Social's statuses page is ~20 items — a full page returns nextCursor. On the extended path hasMore can be true with nextCursor null (truncatedReason=single_page_only). Flat 2 credits."},"cursor":{"type":"string","description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":343,"tokensAfter":343},{"name":"twitch_user_schedule","fixed":{"name":"twitch_user_schedule","description":"Twitch channel schedule — startAt/endAt, title, game, isRecurring (0 credits when empty). Costs 1 credit. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Twitch channel URL or username, e.g. https://www.twitch.tv/shroud. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max schedule segments to return (default 50, max 100). Flat 1 credit per call."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":262,"tokensAfter":262},{"name":"video_summarize","fixed":{"name":"video_summarize","description":"AI transcription + summary of an uploaded file — transcript included; 1 credit/min + 1. Costs 1 credit/min +1. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","description":"Video or audio file (multipart form field — use -F file=@path, not a query string). Max 200MB / 60 minutes."},"language":{"type":"string","description":"ISO-639-1 language hint, e.g. \"en\" or \"tr\". Omit to auto-detect."},"translate":{"type":"boolean","description":"When true, translate speech to English before summarizing. Default false."},"timestampGranularity":{"type":"string","description":"segment (default) or word."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":230,"tokensAfter":230},{"name":"youtube_community_post_details","fixed":{"name":"youtube_community_post_details","description":"One community post — list schema + commentCount trio + isEdited. Costs 1 credit. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"YouTube community post URL (/post/Ugkx… or /community?lb=). Trailing whitespace is stripped. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":228,"tokensAfter":228},{"name":"youtube_community_posts","fixed":{"name":"youtube_community_posts","description":"Community posts — channel{}, publishedTimeApprox, likeCountIsApproximate, linkedVideos[], cursor (1 credit). Costs 1 credit. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"YouTube channel URL, @handle, bare handle, or UC... channel ID, e.g. https://youtube.com/@handle or @mkbhd. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 20, max 200). Flat 1 credit per call."},"cursor":{"type":"string","description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":320,"tokensAfter":320},{"name":"youtube_hashtag_search","fixed":{"name":"youtube_hashtag_search","description":"Videos from youtube.com/hashtag/{name} — nested channel{}, viewCountIsApproximate. Not keyword search. Costs ~20 credits (1/result). Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Hashtag with or without the # (min 2 characters). One token — spaces are 400 HASHTAG_HAS_SPACES."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 20, max 200). Returns a single window; use limit to size it. No cursor. Billed per result."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":234,"tokensAfter":234},{"name":"youtube_search","fixed":{"name":"youtube_search","description":"YouTube search with cursor pagination — typed hits, ids, canonical URLs, filters (2 credits/page). Costs 2 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["q"],"properties":{"q":{"type":"string","description":"Search query or keywords (min 2 characters)."},"type":{"type":"string","description":"all | videos | shorts | channels | playlists."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"limit":{"type":"integer","minimum":1,"description":"Max items to return (default 20, max 200). Flat 2 credits per call."},"cursor":{"type":"string","description":"Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response."},"region":{"type":"string","description":"ISO country code for localized results (default US)."},"sortBy":{"type":"string","description":"relevance | date | views | rating (alias: popular→views)."},"duration":{"type":"string","description":"any | under_4 | 4_20 | over_20. Applies to long-form videos (not Shorts)."},"uploadDate":{"type":"string","description":"any | today | this_week | this_month | this_year."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":382,"tokensAfter":382},{"name":"youtube_shorts_summarize","fixed":{"name":"youtube_shorts_summarize","description":"AI summary of a YouTube Short — rejects long-form videos (≤3 min only). Costs 3 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Public YouTube Shorts URL, e.g. https://youtube.com/shorts/ID (≤3 min). Long-form videos return HTTP 422 — use the matching /v1/youtube/… endpoint instead. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"language":{"type":"string","description":"Preferred caption language as an ISO code, e.g. \"en\". Defaults to auto-detect."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":281,"tokensAfter":281},{"name":"youtube_summarize","fixed":{"name":"youtube_summarize","description":"AI summary from YouTube's published captions — same source as /transcript. Flat 3 credits; caption-miss 404 is free. Costs 3 credits. Empty results and failures are never charged. Pass cache=true for a free 24h cache hit (default always fresh).","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","description":"Public YouTube video URL, e.g. https://youtube.com/watch?v=ID. Not a TikTok/Instagram/Facebook URL. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble."},"cache":{"type":"boolean","description":"Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh."},"language":{"type":"string","description":"Preferred caption language as an ISO code, e.g. \"en\". Defaults to auto-detect."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":276,"tokensAfter":276}],"toolsChanged":61,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}