{"count":32,"tools":[{"id":"idealista_suggestions","label":"Idealista suggestions","group":"Real estate","description":"Autocomplete Idealista location names to get locationId values needed for property searches. Use this first when the user mentions a city, neighborhood, or area in Spain, Portugal, or Italy.","credits":135,"pricing":"fixed","params":[{"name":"prefix","type":"string","required":true,"description":"Location name to search (e.g. \"madrid\", \"barcelona\", \"lisbon\")"},{"name":"location","type":"\"es\" | \"pt\" | \"it\"","required":true,"description":"Country code: Spain (es), Portugal (pt), Italy (it)"},{"name":"propertyType","type":"\"homes\" | \"offices\" | \"premises\" | \"garages\" | \"bedrooms\" | \"newDevelopments\" | \"land\"","required":false,"description":"Property type context (default: homes)"},{"name":"operation","type":"\"sale\" | \"rent\"","required":false,"description":"Operation context (default: sale)"}]},{"id":"idealista_search","label":"Idealista search","group":"Real estate","description":"Search Idealista real estate listings for homes, flats, offices, land, rooms, garages, and more in Spain, Portugal, or Italy. Returns results as a single data table. Call this ONCE with the right maxResults — it paginates internally and returns one combined table; never call it repeatedly to page through results manually. Use idealistaGetSuggestions first to get the locationId if you only have a city name.","credits":135,"pricing":"fixed","params":[{"name":"locationId","type":"string","required":true,"description":"Location ID from idealistaGetSuggestions (e.g. \"0-EU-ES-28-07-001-079\")"},{"name":"locationName","type":"string","required":true,"description":"Human-readable location name, e.g. Madrid. Never include parentheses () — they silently break the search. Use a clean name from idealistaGetSuggestions with no \"(City)\" / \"(Province)\" clarifiers."},{"name":"location","type":"\"es\" | \"pt\" | \"it\"","required":true,"description":"Country code: Spain (es), Portugal (pt), Italy (it)"},{"name":"operation","type":"\"sale\" | \"rent\"","required":true,"description":"Property operation type"},{"name":"propertyType","type":"\"homes\" | \"newhomes\" | \"rooms\" | \"garages\" | \"storagerooms\" | \"buildings\" | \"lands\" | \"offices\" | \"commercial\"","required":false,"description":"Type of listing to search (default: homes)"},{"name":"maxResults","type":"integer","required":false,"description":"Maximum number of listings to return (default: 40, max: 480). The tool fetches multiple pages automatically to reach this count. Use this when the user asks for more than 40 results."},{"name":"startPage","type":"integer","required":false,"description":"API page to start from (default: 1). Useful for continuing a previous search."},{"name":"order","type":"\"relevance\" | \"lowestprice\" | \"highestprice\" | \"mostrecent\" | \"leastrecent\" | \"highestpricereduction\" | \"lowestpricem2\" | \"highestpricem2\" | \"biggest\" | \"smallest\"","required":false,"description":"Sort order (default: relevance)"},{"name":"locale","type":"\"es\" | \"it\" | \"pt\" | \"en\" | \"ca\" | \"de\" | \"fr\" | \"nl\" | \"nb\"","required":false,"description":"Response language (default: en)"},{"name":"minPrice","type":"number","required":false,"description":"Minimum price in local currency"},{"name":"maxPrice","type":"number","required":false,"description":"Maximum price in local currency"},{"name":"minSize","type":"number","required":false,"description":"Minimum size in m²"},{"name":"maxSize","type":"number","required":false,"description":"Maximum size in m²"},{"name":"bedrooms","type":"integer[]","required":false,"description":"Number of bedrooms to filter by (0, 1, 2, 3, or 4+). Array for multiple: [1, 2]"},{"name":"elevator","type":"boolean","required":false,"description":""},{"name":"garage","type":"boolean","required":false,"description":""},{"name":"swimmingPool","type":"boolean","required":false,"description":""},{"name":"terrace","type":"boolean","required":false,"description":""},{"name":"airConditioning","type":"boolean","required":false,"description":""},{"name":"exterior","type":"boolean","required":false,"description":""},{"name":"garden","type":"boolean","required":false,"description":""},{"name":"furnished","type":"\"furnished\" | \"furnishedKitchen\"","required":false,"description":"Furniture requirement for rentals"},{"name":"newDevelopment","type":"boolean","required":false,"description":"New development properties only"},{"name":"sinceDate","type":"\"T\" | \"Y\" | \"W\" | \"M\"","required":false,"description":"Date filter: T=last 24h (rent only), Y=last 48h (buy only), W=last week, M=last month"},{"name":"bankOffer","type":"boolean","required":false,"description":"Bank-owned properties only"}]},{"id":"idealista_details","label":"Idealista details","group":"Real estate","description":"Get complete details for a single Idealista property — full description, all photos, floor plans, energy certificate, features, and contact info. Use the propertyCode from idealistaSearch results.","credits":135,"pricing":"fixed","params":[{"name":"propertyId","type":"string","required":true,"description":"Property code from search results (e.g. \"106387165\")"},{"name":"location","type":"\"es\" | \"pt\" | \"it\"","required":true,"description":"Country code: Spain (es), Portugal (pt), Italy (it)"},{"name":"language","type":"\"en\" | \"es\" | \"it\" | \"pt\" | \"ca\" | \"de\" | \"fr\" | \"nl\" | \"nb\"","required":false,"description":"Response language (default: en)"}]},{"id":"idealista_locations","label":"Idealista locations","group":"Real estate","description":"Get districts and neighborhoods within a divisible Idealista location. Use after idealistaGetSuggestions when divisible=true to refine searches to specific areas.","credits":135,"pricing":"fixed","params":[{"name":"locationId","type":"string","required":true,"description":"Parent locationId (divisible=true from suggestions)"},{"name":"location","type":"\"es\" | \"pt\" | \"it\"","required":true,"description":"Country code: Spain (es), Portugal (pt), Italy (it)"},{"name":"propertyType","type":"\"homes\" | \"offices\" | \"premises\" | \"garages\" | \"bedrooms\" | \"newDevelopments\" | \"land\"","required":false,"description":"Property type context (default: homes)"},{"name":"operation","type":"\"sale\" | \"rent\"","required":false,"description":"Property operation type"}]},{"id":"idealista_agency_profile","label":"Idealista agency profile","group":"Real estate","description":"Get an Idealista real estate agency profile. The micrositeShortName is the slug from idealista.com/pro/{slug}/.","credits":135,"pricing":"fixed","params":[{"name":"micrositeShortName","type":"string","required":true,"description":"Agency slug from idealista.com/pro/{slug}/"},{"name":"location","type":"\"es\" | \"pt\" | \"it\"","required":true,"description":"Country code: Spain (es), Portugal (pt), Italy (it)"}]},{"id":"idealista_agency_locations","label":"Idealista agency locations","group":"Real estate","description":"Get the locations where a specific Idealista agency has listings, with counts per location.","credits":135,"pricing":"fixed","params":[{"name":"micrositeShortName","type":"string","required":true,"description":"Agency slug from idealista.com/pro/{slug}/"},{"name":"location","type":"\"es\" | \"pt\" | \"it\"","required":true,"description":"Country code: Spain (es), Portugal (pt), Italy (it)"},{"name":"locationId","type":"string","required":true,"description":"Root locationId to scope the search (use a broad location like a province)"},{"name":"operation","type":"\"sale\" | \"rent\"","required":true,"description":"Property operation type"},{"name":"locale","type":"\"es\" | \"it\" | \"pt\" | \"en\" | \"ca\" | \"de\" | \"fr\" | \"nl\" | \"nb\"","required":false,"description":"Response language (default: en)"}]},{"id":"web_search","label":"Web search","group":"Web","description":"Search the web. Returns a ranked list of result titles, URLs and short snippets. The snippets are search previews for judging which results look promising, not the text of the pages: this tool never returns page content, and the `content` field on each result is always empty. The `url_reader` action is what returns a page's actual text, given a URL from these results.","credits":1,"pricing":"fixed","params":[{"name":"query","type":"string","required":true,"description":"The search query to find URLs and information about (e.g., \"artificial intelligence\")"},{"name":"country","type":"string","required":false,"description":"OPTIONAL two-letter ISO country code (e.g. \"us\", \"rs\", \"de\") to localize results. Set ONLY for region-specific queries (\"near me\", local businesses, a query written in a local language, \"in my country\"). OMIT for global/general topics — forcing a country hurts global queries."},{"name":"language","type":"string","required":false,"description":"OPTIONAL two-letter ISO language code (e.g. \"en\", \"sr\", \"de\") for the results language. Set it to match the query language for local/non-English searches. OMIT for global/general topics."},{"name":"location","type":"string","required":false,"description":"OPTIONAL free-text origin at city level (e.g. \"Belgrade, Serbia\") to simulate a real user's location. Use only for hyper-local \"near me\" style queries."}]},{"id":"web_read_url","label":"Web read url","group":"Web","description":"Read and extract content from any URL as clean markdown text. Extracts main content from web pages.","credits":1,"pricing":"fixed","params":[{"name":"url","type":"string","required":true,"description":"The URL to read and extract content from (e.g., \"https://example.com\")"}]},{"id":"web_screenshot","label":"Web screenshot","group":"Web","description":"Take a screenshot of any website URL. Returns a hosted URL to the screenshot image. Captures the visible viewport by default, or the entire scrollable page with fullPage. Use this when you need to capture a visual of a webpage for content creation, documentation, or analysis.","credits":2,"pricing":"fixed","params":[{"name":"url","type":"string","required":true,"description":"The URL of the website to screenshot (e.g., \"https://example.com\")"},{"name":"viewport","type":"object","required":false,"description":"Optional viewport size. Defaults to 1920x1080 (standard widescreen)"},{"name":"device","type":"\"desktop\" | \"tablet\" | \"mobile\"","required":false,"description":"Device preset: desktop 1920x1080, tablet 820x1180, mobile 390x844 with touch emulation. An explicit viewport takes precedence."},{"name":"fullPage","type":"boolean","required":false,"description":"When true, captures the entire scrollable page height instead of just the visible viewport. Defaults to false."},{"name":"hideSelectors","type":"string[]","required":false,"description":"CSS selectors for elements hidden before capture, e.g. cookie banners or chat widgets."},{"name":"darkMode","type":"boolean","required":false,"description":"When true, renders the page with the dark colour scheme preference."},{"name":"waitForSelector","type":"string","required":false,"description":"CSS selector to wait for before capturing. Ignored if the element never appears."},{"name":"waitUntil","type":"\"visible-content\" | \"mutation-idle\" | \"resource-idle\" | \"media-idle\" | \"network-idle\"","required":false,"description":"How long to let the page settle before capturing."},{"name":"timeout","type":"number","required":false,"description":"Seconds to wait for the page before giving up. Defaults to 15, maximum 180."},{"name":"locale","type":"string","required":false,"description":"Browser locale for the page, e.g. \"de-DE\"."},{"name":"userAgent","type":"string","required":false,"description":"Override the browser User-Agent string."},{"name":"noCache","type":"boolean","required":false,"description":"When true, bypasses any cached copy and renders the page fresh."},{"name":"assertStatusCode","type":"number","required":false,"description":"When set, the capture fails unless the page returns this HTTP status, e.g. 200."}]},{"id":"crypto_get_prices","label":"Crypto get prices","group":"Crypto","description":"Get current prices for multiple cryptocurrencies at once. Returns price, market cap, 24h volume, and 24h price change for specified coins. Perfect for quick price checks and portfolio tracking.","credits":3,"pricing":"fixed","params":[{"name":"coinIds","type":"string[]","required":true,"description":"Array of coin IDs (e.g., [\"bitcoin\", \"ethereum\", \"solana\"]). Use lowercase IDs."},{"name":"currencies","type":"string[]","required":false,"description":"Target currencies (default: [\"usd\"]). Can include: usd, eur, gbp, btc, etc."},{"name":"includeMarketCap","type":"boolean","required":false,"description":"Include market cap data (default: true)"},{"name":"include24hrVol","type":"boolean","required":false,"description":"Include 24h trading volume (default: true)"},{"name":"include24hrChange","type":"boolean","required":false,"description":"Include 24h price change percentage (default: true)"}]},{"id":"crypto_get_market_data","label":"Crypto get market data","group":"Crypto","description":"Get comprehensive market data for cryptocurrencies with rankings, volume, price changes, and more. Returns paginated list of coins sorted by market cap or other criteria. Perfect for market overview and discovering top coins.","credits":5,"pricing":"fixed","params":[{"name":"vsCurrency","type":"string","required":false,"description":"Currency for price data (default: \"usd\"). Options: usd, eur, gbp, btc, etc."},{"name":"order","type":"string","required":false,"description":"Sort order (default: \"market_cap_desc\"). Options: market_cap_desc, volume_desc, id_asc, etc."},{"name":"perPage","type":"number","required":false,"description":"Results per page (default: 50, max: 250)"},{"name":"page","type":"number","required":false,"description":"Page number (default: 1)"}]},{"id":"reddit_search","label":"Reddit search","group":"Reddit","description":"Search Reddit for posts matching a query. Returns posts with title, score, comments count, and more. Use cases:\n- Find discussions about a topic\n- Research trending conversations\n- Find product/brand mentions Parameters:\n- query: Search term (required)\n- subreddit: Limit search to specific subreddit (optional)\n- sort: relevance, hot, top, new, comments (default: relevance)\n- time: hour, day, week, month, year, all (default: all)\n- limit: Number of results 1-100 (default: 25)\n- after: Pagination cursor from previous response","credits":5,"pricing":"fixed","params":[{"name":"query","type":"string","required":true,"description":"Search query (e.g., \"AI news\", \"best programming languages\")"},{"name":"subreddit","type":"string","required":false,"description":"Subreddit to search within (e.g., \"programming\")"},{"name":"sort","type":"\"relevance\" | \"hot\" | \"top\" | \"new\" | \"comments\"","required":false,"description":"Sort order"},{"name":"time","type":"\"hour\" | \"day\" | \"week\" | \"month\" | \"year\" | \"all\"","required":false,"description":"Time filter"},{"name":"limit","type":"number","required":false,"description":"Results per page (default: 25)"},{"name":"after","type":"string","required":false,"description":"Pagination cursor from previous response"}]},{"id":"reddit_post","label":"Reddit post","group":"Reddit","description":"Get a Reddit post with its comments. Returns post details and top comments. Use cases:\n- Analyze specific discussions\n- Get community sentiment on a topic\n- Extract insights from comment threads Parameters:\n- postId: Post ID (from search results) or full URL\n- commentLimit: Number of comments 1-100 (default: 30)\n- commentDepth: Max nesting depth 1-10 (default: 3)\n- commentSort: best, top, new, controversial, old, qa (default: best)","credits":5,"pricing":"fixed","params":[{"name":"postId","type":"string","required":true,"description":"Post ID (e.g., \"abc123\") or full Reddit URL"},{"name":"commentLimit","type":"number","required":false,"description":"Comments to retrieve (default: 30)"},{"name":"commentDepth","type":"number","required":false,"description":"Max comment nesting depth (default: 3)"},{"name":"commentSort","type":"\"best\" | \"top\" | \"new\" | \"controversial\" | \"old\" | \"qa\"","required":false,"description":"Comment sort order"}]},{"id":"reddit_subreddit","label":"Reddit subreddit","group":"Reddit","description":"Browse posts from a subreddit. Returns hot, top, new, rising, or controversial posts. Use cases:\n- Monitor subreddit activity\n- Find trending topics in a community\n- Research community sentiment Parameters:\n- subreddit: Subreddit name without r/ (required)\n- sort: hot, top, new, rising, controversial (default: hot)\n- time: hour, day, week, month, year, all (for top/controversial)\n- limit: Number of posts 1-100 (default: 25)\n- after: Pagination cursor from previous response","credits":5,"pricing":"fixed","params":[{"name":"subreddit","type":"string","required":true,"description":"Subreddit name (e.g., \"programming\", \"technology\")"},{"name":"sort","type":"\"hot\" | \"top\" | \"new\" | \"rising\" | \"controversial\"","required":false,"description":"Sort order"},{"name":"time","type":"\"hour\" | \"day\" | \"week\" | \"month\" | \"year\" | \"all\"","required":false,"description":"Time filter (for top/controversial)"},{"name":"limit","type":"number","required":false,"description":"Posts per page (default: 25)"},{"name":"after","type":"string","required":false,"description":"Pagination cursor from previous response"}]},{"id":"reddit_domain_posts","label":"Reddit domain posts","group":"Reddit","description":"Find all Reddit posts linking to a specific domain. Great for SEO research and brand monitoring. Use cases:\n- Find backlinks from Reddit to a website\n- Monitor brand/product mentions\n- Analyze competitor presence on Reddit\n- SEO research for domain reputation Parameters:\n- domain: Domain to search (e.g., \"example.com\", \"youtube.com\")\n- sort: hot, top, new, rising, controversial (default: top)\n- time: hour, day, week, month, year, all (default: all)\n- limit: Number of posts 1-100 (default: 25)\n- after: Pagination cursor from previous response","credits":5,"pricing":"fixed","params":[{"name":"domain","type":"string","required":true,"description":"Domain to search (e.g., \"example.com\", \"github.com\")"},{"name":"sort","type":"\"hot\" | \"top\" | \"new\" | \"rising\" | \"controversial\"","required":false,"description":"Sort order"},{"name":"time","type":"\"hour\" | \"day\" | \"week\" | \"month\" | \"year\" | \"all\"","required":false,"description":"Time filter"},{"name":"limit","type":"number","required":false,"description":"Posts per page (default: 25)"},{"name":"after","type":"string","required":false,"description":"Pagination cursor from previous response"}]},{"id":"reddit_user","label":"Reddit user","group":"Reddit","description":"Get a Reddit user's profile information including karma, account age, and verification status. Use cases:\n- Verify user credibility\n- Research influencers/power users\n- Check account authenticity Parameters:\n- username: Reddit username without u/ (required)","credits":5,"pricing":"fixed","params":[{"name":"username","type":"string","required":true,"description":"Reddit username (e.g., \"spez\", \"GallowBoob\")"}]},{"id":"youtube_video_info","label":"Youtube video info","group":"YouTube","description":"Get detailed information about a YouTube video including title, description, view count, channel info, and keywords. Accepts video ID or any YouTube URL format.","credits":15,"pricing":"fixed","params":[{"name":"videoId","type":"string","required":true,"description":"YouTube video ID or URL (e.g., \"dQw4w9WgXcQ\" or \"https://www.youtube.com/watch?v=...\")"}]},{"id":"youtube_comments","label":"Youtube comments","group":"YouTube","description":"Retrieve comments from a YouTube video. API returns ~20 comments per page. Use continuationToken from response to fetch more pages.","credits":15,"pricing":"fixed","params":[{"name":"videoId","type":"string","required":true,"description":"YouTube video ID or URL"},{"name":"continuationToken","type":"string","required":false,"description":"Continuation token from previous response to get next page (optional)"},{"name":"limit","type":"number","required":true,"description":"Max comments to return from this page (API limit ~20/page)"}]},{"id":"youtube_transcript","label":"Youtube transcript","group":"YouTube","description":"Download and extract the full transcript/subtitles from a YouTube video with accurate timestamps. Returns complete text with timestamp links for precise quoting. Useful for analyzing video content without watching.","credits":15,"pricing":"fixed","params":[{"name":"videoId","type":"string","required":true,"description":"YouTube video ID or URL"}]},{"id":"youtube_search","label":"Youtube search","group":"YouTube","description":"Search for YouTube videos by query with optional filters for time range, language, and country. Returns video information including title, channel, view count, and thumbnails.","credits":15,"pricing":"fixed","params":[{"name":"query","type":"string","required":true,"description":"Search query (e.g., \"how to code in python\")"},{"name":"limit","type":"number","required":true,"description":"Maximum number of results to return (default: 10, max: 50)"},{"name":"lang","type":"string","required":false,"description":"Language code (e.g., \"en\", \"es\", \"fr\") - optional"},{"name":"orderBy","type":"\"last_hour\" | \"today\" | \"this_week\" | \"this_month\" | \"this_year\"","required":false,"description":"Filter by upload time - optional (e.g., \"this_month\" for recent uploads)"},{"name":"country","type":"string","required":false,"description":"Country code in lowercase (e.g., \"us\", \"uk\", \"de\") - optional"}]},{"id":"twitter_user","label":"Twitter user","group":"Twitter","description":"Get detailed information about a Twitter/X user including profile, follower counts, bio, and verification status. Returns essential user data only (~85% smaller than raw API response).","credits":15,"pricing":"fixed","params":[{"name":"username","type":"string","required":true,"description":"Twitter username (without @, e.g., \"elonmusk\")"}]},{"id":"twitter_user_tweets","label":"Twitter user tweets","group":"Twitter","description":"Retrieve tweets from a Twitter/X user timeline. User data sent ONCE (not per tweet) for massive token savings (~94% reduction). Returns ~20 tweets per request with cursor for pagination.","credits":15,"pricing":"fixed","params":[{"name":"userId","type":"string","required":true,"description":"Twitter user ID (get from twitterGetUser first)"},{"name":"limit","type":"number","required":true,"description":"Max tweets to return (default: 20, max: 40)"},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from previous response (optional)"}]},{"id":"twitter_tweet_comments","label":"Twitter tweet comments","group":"Twitter","description":"Retrieve comments/replies to a Twitter/X tweet. Returns lean comment data optimized for AI consumption (~87% token reduction). Returns ~20 comments per request.","credits":15,"pricing":"fixed","params":[{"name":"tweetId","type":"string","required":true,"description":"Tweet ID to get comments for"},{"name":"limit","type":"number","required":true,"description":"Max comments to return (default: 20, max: 40)"},{"name":"cursor","type":"string","required":false,"description":"Pagination cursor from previous response (optional)"}]},{"id":"twitter_search","label":"Twitter search","group":"Twitter","description":"Search Twitter/X for tweets matching a query. Returns top results with optimized user data (sent once per unique user) for ~93% token reduction. Use for finding tweets, trends, or topics.","credits":15,"pricing":"fixed","params":[{"name":"query","type":"string","required":true,"description":"Search query (e.g., \"AI news\", \"@elonmusk\", \"#bitcoin\")"},{"name":"limit","type":"number","required":true,"description":"Max results to return (default: 20, max: 40)"},{"name":"searchType","type":"\"Top\" | \"Latest\" | \"People\" | \"Photos\" | \"Videos\"","required":true,"description":"Type of search results (default: Top)"}]},{"id":"twitter_tweet","label":"Twitter tweet","group":"Twitter","description":"Read a single Twitter/X tweet by its ID: text, author, engagement counts and timestamp. Use when you have a tweet ID or URL and need the tweet's own content — the comments tool returns only the replies, never the tweet.","credits":15,"pricing":"fixed","params":[{"name":"tweetId","type":"string","required":true,"description":"Tweet ID — the trailing number in a tweet URL (x.com/user/status/<id>)."}]},{"id":"twitter_followers","label":"Twitter followers","group":"Twitter","description":"List a Twitter/X account's followers, one page at a time. Each follower includes their own follower count and verified flag. For counting VERIFIED followers use twitter_verified_followers instead — it is pre-filtered upstream and needs far fewer requests.","credits":15,"pricing":"fixed","params":[{"name":"twitterUserId","type":"string","required":true,"description":"Numeric Twitter user ID (not the @handle) — get it from twitter_user's userId field."},{"name":"cursor","type":"string","required":false,"description":"nextCursor from a previous call, to read the next page."}]},{"id":"twitter_verified_followers","label":"Twitter verified followers","group":"Twitter","description":"List a Twitter/X account's VERIFIED followers, one page at a time. The upstream list is already filtered to verified accounts, so counting them means paging this rather than scanning every follower. There is no total-count field in the API — to get a total, page until nextCursor is null and sum the counts, and tell the user how many pages that took.","credits":15,"pricing":"fixed","params":[{"name":"twitterUserId","type":"string","required":true,"description":"Numeric Twitter user ID (not the @handle) — get it from twitter_user's userId field."},{"name":"cursor","type":"string","required":false,"description":"nextCursor from a previous call, to read the next page."}]},{"id":"image_generate","label":"Image generate","group":"Media","description":"Generate an image from a text prompt and return a permanent public URL. Billed at the provider's real cost plus the standard markup, so the price depends on the model and the image — it is not a flat per-call rate.","credits":null,"pricing":"metered","params":[{"name":"prompt","type":"string","required":true,"description":"What to draw. Describe the subject, style and composition; for a transparent background (layers, sprites, logos) say so explicitly."},{"name":"aspectRatio","type":"\"1:1\" | \"16:9\" | \"9:16\" | \"4:3\" | \"3:4\"","required":false,"description":"Aspect ratio. Defaults to 1:1."},{"name":"model","type":"\"openai/gpt-image-1.5\" | \"openai/gpt-image-2\"","required":false,"description":"Image model. Defaults to openai/gpt-image-1.5. These are the only ids that generate images — the chat models listed under llm.models cannot."}]},{"id":"image_analyze","label":"Image analyze","group":"Media","description":"Analyze an image and answer a question about it — captioning, OCR, describing a screenshot, reading a chart, identifying what is in a photo. Takes a public image URL or a data: URI and returns text. Billed at the vision model's real cost plus the standard markup, so the price depends on the image and the answer length rather than being a flat per-call rate.","credits":null,"pricing":"metered","params":[{"name":"source","type":"string","required":true,"description":"The image: a public http(s) URL, or a `data:` URI with the bytes inline."},{"name":"question","type":"string","required":false,"description":"What to find out about the image, in natural language — e.g. 'caption this', 'read the error text', 'what are the dominant hex colours?', 'is there a person in this photo?'. Omit for a general description."}]},{"id":"apify_search_actors","label":"Apify search actors","group":"Apify","description":"Search the marketplace of ready-made web scrapers / automation tools (\"actors\") for a task, e.g. \"google maps places\", \"instagram profile scraper\", \"amazon product reviews\". Returns a ranked shortlist with reliability metrics (total runs, users, star rating, 30-day success rate) and pricing so you can PICK the best one. Use this first for any data-extraction / scraping request that the web or browser tools cannot satisfy directly.","credits":null,"pricing":"metered","params":[{"name":"query","type":"string","required":true,"description":"Natural-language description of the capability, e.g. \"google maps business scraper\"."},{"name":"category","type":"string","required":false,"description":"Optional store category filter (e.g. \"ECOMMERCE\", \"SOCIAL_MEDIA\", \"AI\", \"NEWS\", \"JOBS\")."},{"name":"limit","type":"integer","required":false,"description":"How many candidates to return (default 8)."}]},{"id":"apify_actor_details","label":"Apify actor details","group":"Apify","description":"Read a specific actor's INPUT SCHEMA, example input, and pricing before running it. Always call this after apifySearchActors and before apifyRunActor, so you build a valid input object. Pass the actorId from the search results (e.g. \"apify~google-maps-scraper\").","credits":null,"pricing":"metered","params":[{"name":"actorId","type":"string","required":true,"description":"Actor id from search results, e.g. \"apify~google-maps-scraper\" or \"username/actor-name\"."}]},{"id":"apify_run_actor","label":"Apify run actor","group":"Apify","description":"Run a marketplace actor (a ready-made web scraper / automation) and return its extracted data as an interactive table. Call apifyGetActorDetails FIRST to learn the input schema, then pass a valid input object here. Pay-per-use: cost depends on the actor and how much it extracts — always set maxItems to bound it. Only use after discovery; never guess an actorId.","credits":null,"pricing":"metered","params":[{"name":"actorId","type":"string","required":true,"description":"Actor id to run, e.g. \"apify~google-maps-scraper\" (from apifySearchActors)."},{"name":"input","type":"object","required":true,"description":"The actor input object, built from apifyGetActorDetails inputFields/exampleInput."},{"name":"maxItems","type":"integer","required":false,"description":"Max dataset items to extract & charge for (default 100). Lower = cheaper. Raise this for a large/complete extraction (hundreds–thousands of rows) when the user explicitly wants a lot of data — but also raise maxCostUsd to allow it, since this is pay-per-use."},{"name":"maxCostUsd","type":"number","required":false,"description":"Hard spend cap in USD for this run (default 0.5, max 25). Apify stops the run once cost would exceed this. Raise it (within what the user can afford) for large extractions, and tell the user the expected cost first."}]}],"agent":{"endpoint":"/api/v1/agent","requiresScope":"agent","description":"Give the full multi-agent orchestrator a goal; it routes, calls tools, and runs multi-step. Poll GET /api/v1/agent/{jobId}; answer suspended runs via POST /api/v1/agent/{jobId}/answer.","modes":["autonomous","interactive"],"list":{"endpoint":"GET /api/v1/agent/jobs","description":"Your agent jobs, newest first: { jobs: [{ jobId, conversationId, title, mode, model, status, creditsSpent, createdAt, updatedAt }], nextCursor }. Query params: limit (1-100, default 20) and cursor (pass the previous response's nextCursor). Scoped to the key OWNER, so jobs started by any of your keys appear. `status` is the last PERSISTED disposition — completed/failed are authoritative, running means not finalized yet; GET /api/v1/agent/{jobId} resolves liveness."},"model":{"param":"model","description":"Optional model id from this catalogue's llm.models (the same ids /api/v1/chat/completions accepts — agent runs and chat completions draw from one registry). Omitted, the run uses the key owner's account default, which is set in the web app and can therefore change between two otherwise identical requests; pass this to pin it. A key with an allowedModels scope may only pass models inside that scope. The model a run started on is echoed on the start response and on every poll."},"multiTurn":{"param":"conversationId","description":"Pass a previous jobId as conversationId (with a fresh idempotencyKey) to run the next turn in the same conversation, so the agent has the earlier context. Omit for a one-off. One run per conversation at a time."},"historyTurnLimit":{"param":"historyTurnLimit","description":"Optional positive integer. Each turn sends the whole conversation to the model, so prefill cost grows as a conversation gets longer. Set this to send only the most recent N turns. Omitted means full history, which is what makes multi-turn recall work — lower it only when the task does not reach further back than N turns."},"creditCeiling":{"param":"agentRunBudgetCredits (on the key)","description":"The ceiling is per CONVERSATION, summed across every turn — not per turn. A start request is refused with 402 once the conversation has spent it; the response carries creditsSpent and ceilingCredits. Responses report runBudgetScope: \"conversation\"."}},"llm":{"endpoint":"/api/v1/chat/completions","openaiCompatible":true,"requiresScope":"llm","modelCount":74,"models":[{"id":"openai/gpt-5-nano","name":"GPT-5 Nano","provider":"OpenAI","contextSize":400000,"creditsPer1mInput":167,"creditsPer1mOutput":1333,"vision":true},{"id":"openai/gpt-5-mini","name":"GPT-5 Mini","provider":"OpenAI","contextSize":400000,"creditsPer1mInput":833,"creditsPer1mOutput":6667,"vision":true},{"id":"openai/gpt-5.6-luna","name":"GPT-5.6 Luna","provider":"OpenAI","contextSize":1050000,"creditsPer1mInput":667,"creditsPer1mOutput":4000,"vision":true},{"id":"openai/gpt-4.1-mini","name":"GPT-4.1 Mini","provider":"OpenAI","contextSize":1047576,"creditsPer1mInput":1333,"creditsPer1mOutput":5334,"vision":true},{"id":"openai/gpt-4.1-nano","name":"GPT-4.1 Nano","provider":"OpenAI","contextSize":1047576,"creditsPer1mInput":333,"creditsPer1mOutput":1333,"vision":true},{"id":"google/gemini-2.5-flash","name":"Gemini 2.5 Flash","provider":"Google","contextSize":1000000,"creditsPer1mInput":1000,"creditsPer1mOutput":8334,"vision":true},{"id":"google/gemini-3-flash","name":"Gemini 3 Flash","provider":"Google","contextSize":1000000,"creditsPer1mInput":1667,"creditsPer1mOutput":10001,"vision":true},{"id":"google/gemini-3.5-flash","name":"Gemini 3.5 Flash","provider":"Google","contextSize":1000000,"creditsPer1mInput":5000,"creditsPer1mOutput":30002,"vision":true},{"id":"google/gemini-3.6-flash","name":"Gemini 3.6 Flash","provider":"Google","contextSize":1000000,"creditsPer1mInput":2500,"creditsPer1mOutput":12501,"vision":true},{"id":"google/gemini-3.7-flash","name":"Gemini 3.7 Flash","provider":"Google","contextSize":1000000,"creditsPer1mInput":2500,"creditsPer1mOutput":12501,"vision":true},{"id":"google/gemini-3.5-flash-lite","name":"Gemini 3.5 Flash Lite","provider":"Google","contextSize":1000000,"creditsPer1mInput":1000,"creditsPer1mOutput":8334,"vision":true},{"id":"alibaba/qwen3.7-flash","name":"Qwen 3.7 Flash","provider":"Alibaba","contextSize":991000,"creditsPer1mInput":100,"creditsPer1mOutput":433,"vision":true},{"id":"alibaba/qwen3.8-flash","name":"Qwen 3.8 Flash","provider":"Alibaba","contextSize":991000,"creditsPer1mInput":533,"creditsPer1mOutput":1567,"vision":true},{"id":"alibaba/qwen3.5-flash","name":"Qwen 3.5 Flash","provider":"Alibaba","contextSize":1000000,"creditsPer1mInput":333,"creditsPer1mOutput":1333,"vision":true},{"id":"alibaba/qwen3.5-plus","name":"Qwen 3.5 Plus","provider":"Alibaba","contextSize":1000000,"creditsPer1mInput":1333,"creditsPer1mOutput":8001,"vision":true},{"id":"minimax/minimax-m2","name":"MiniMax M2","provider":"Minimax","contextSize":205000,"creditsPer1mInput":1000,"creditsPer1mOutput":4000,"vision":false},{"id":"openai/gpt-5","name":"GPT-5","provider":"OpenAI","contextSize":400000,"creditsPer1mInput":4167,"creditsPer1mOutput":33336,"vision":true},{"id":"openai/gpt-5.1-thinking","name":"GPT-5.1 Thinking","provider":"OpenAI","contextSize":400000,"creditsPer1mInput":4167,"creditsPer1mOutput":33336,"vision":true},{"id":"openai/gpt-5.6-sol","name":"GPT-5.6 Sol","provider":"OpenAI","contextSize":1050000,"creditsPer1mInput":6667,"creditsPer1mOutput":33336,"vision":false},{"id":"openai/gpt-5.6-terra","name":"GPT-5.6 Terra","provider":"OpenAI","contextSize":1050000,"creditsPer1mInput":6667,"creditsPer1mOutput":40003,"vision":false},{"id":"anthropic/claude-sonnet-4.5","name":"Claude Sonnet 4.5","provider":"Anthropic","contextSize":1000000,"creditsPer1mInput":10001,"creditsPer1mOutput":50004,"vision":true},{"id":"google/gemini-2.5-pro","name":"Gemini 2.5 Pro","provider":"Google","contextSize":1048576,"creditsPer1mInput":4167,"creditsPer1mOutput":33336,"vision":true},{"id":"anthropic/claude-opus-4.5","name":"Claude Opus 4.5","provider":"Anthropic","contextSize":200000,"creditsPer1mInput":16668,"creditsPer1mOutput":83340,"vision":true},{"id":"openai/gpt-5.2","name":"GPT-5.2","provider":"OpenAI","contextSize":400000,"creditsPer1mInput":5834,"creditsPer1mOutput":46670,"vision":true},{"id":"openai/gpt-5.2-pro","name":"GPT-5.2 Pro","provider":"OpenAI","contextSize":400000,"creditsPer1mInput":70006,"creditsPer1mOutput":560045,"vision":true},{"id":"openai/gpt-5.3-codex","name":"GPT-5.3 Codex","provider":"OpenAI","contextSize":400000,"creditsPer1mInput":5834,"creditsPer1mOutput":46670,"vision":true},{"id":"openai/gpt-5-pro","name":"GPT-5 Pro","provider":"OpenAI","contextSize":400000,"creditsPer1mInput":50004,"creditsPer1mOutput":400032,"vision":true},{"id":"openai/gpt-5.5","name":"GPT-5.5","provider":"OpenAI","contextSize":1000000,"creditsPer1mInput":16668,"creditsPer1mOutput":100008,"vision":true},{"id":"openai/gpt-5.5-pro","name":"GPT-5.5 Pro","provider":"OpenAI","contextSize":1000000,"creditsPer1mInput":100008,"creditsPer1mOutput":600048,"vision":true},{"id":"anthropic/claude-sonnet-4","name":"Claude Sonnet 4","provider":"Anthropic","contextSize":1000000,"creditsPer1mInput":10001,"creditsPer1mOutput":50004,"vision":true},{"id":"anthropic/claude-sonnet-4.6","name":"Claude Sonnet 4.6","provider":"Anthropic","contextSize":1000000,"creditsPer1mInput":10001,"creditsPer1mOutput":50004,"vision":true},{"id":"anthropic/claude-sonnet-5","name":"Claude Sonnet 5","provider":"Anthropic","contextSize":1000000,"creditsPer1mInput":6667,"creditsPer1mOutput":33336,"vision":true},{"id":"anthropic/claude-opus-4.6","name":"Claude Opus 4.6","provider":"Anthropic","contextSize":1000000,"creditsPer1mInput":16668,"creditsPer1mOutput":83340,"vision":true},{"id":"google/gemini-3.1-pro-preview","name":"Gemini 3.1 Pro Preview","provider":"Google","contextSize":1000000,"creditsPer1mInput":6667,"creditsPer1mOutput":40003,"vision":true},{"id":"zai/glm-5","name":"GLM-5","provider":"Zhipu AI","contextSize":202800,"creditsPer1mInput":3334,"creditsPer1mOutput":10668,"vision":false},{"id":"zai/glm-5.1","name":"GLM-5.1","provider":"Zhipu AI","contextSize":202800,"creditsPer1mInput":4667,"creditsPer1mOutput":14668,"vision":false},{"id":"zai/glm-5.2","name":"GLM-5.2","provider":"Zhipu AI","contextSize":1000000,"creditsPer1mInput":2667,"creditsPer1mOutput":8501,"vision":false},{"id":"zai/glm-5.3","name":"GLM-5.3","provider":"Zhipu AI","contextSize":1000000,"creditsPer1mInput":4667,"creditsPer1mOutput":14668,"vision":false},{"id":"zai/glm-5.3-flash","name":"GLM-5.3 Flash","provider":"Zhipu AI","contextSize":1000000,"creditsPer1mInput":250,"creditsPer1mOutput":833,"vision":true},{"id":"alibaba/qwen3.7-max","name":"Qwen 3.7 Max","provider":"Alibaba","contextSize":991000,"creditsPer1mInput":8334,"creditsPer1mOutput":25002,"vision":false},{"id":"alibaba/qwen3.8-max","name":"Qwen 3.8 Max","provider":"Alibaba","contextSize":1000000,"creditsPer1mInput":6667,"creditsPer1mOutput":20002,"vision":true},{"id":"alibaba/qwen3.8-27b","name":"Qwen3.8 27B","provider":"Alibaba","contextSize":1000000,"creditsPer1mInput":1833,"creditsPer1mOutput":11001,"vision":true},{"id":"anthropic/claude-haiku-4.5","name":"Claude Haiku 4.5","provider":"Anthropic","contextSize":200000,"creditsPer1mInput":3334,"creditsPer1mOutput":16668,"vision":true},{"id":"deepseek/deepseek-v3","name":"DeepSeek V3","provider":"DeepSeek","contextSize":163840,"creditsPer1mInput":900,"creditsPer1mOutput":3734,"vision":false},{"id":"moonshotai/kimi-k2-thinking","name":"Kimi K2 Thinking","provider":"Moonshot","contextSize":216144,"creditsPer1mInput":1567,"creditsPer1mOutput":6667,"vision":false},{"id":"moonshotai/kimi-k2.5","name":"Kimi K2.5","provider":"Moonshot","contextSize":262114,"creditsPer1mInput":2000,"creditsPer1mOutput":10001,"vision":true},{"id":"moonshotai/kimi-k2.6","name":"Kimi K2.6","provider":"Moonshot","contextSize":262000,"creditsPer1mInput":3167,"creditsPer1mOutput":13334,"vision":true},{"id":"moonshotai/kimi-k2.7-code","name":"Kimi K2.7 Code","provider":"Moonshot","contextSize":256000,"creditsPer1mInput":3167,"creditsPer1mOutput":13334,"vision":true},{"id":"moonshotai/kimi-k3","name":"Kimi K3","provider":"Moonshot","contextSize":1000000,"creditsPer1mInput":10001,"creditsPer1mOutput":50004,"vision":true},{"id":"deepseek/deepseek-v3.2","name":"DeepSeek V3.2","provider":"DeepSeek","contextSize":128000,"creditsPer1mInput":933,"creditsPer1mOutput":1400,"vision":false},{"id":"deepseek/deepseek-v3.2-thinking","name":"DeepSeek V3.2 Thinking","provider":"DeepSeek","contextSize":128000,"creditsPer1mInput":2067,"creditsPer1mOutput":6167,"vision":false},{"id":"deepseek/deepseek-v4-flash-0731","name":"DeepSeek V4 Flash 0731","provider":"DeepSeek","contextSize":1000000,"creditsPer1mInput":267,"creditsPer1mOutput":500,"vision":false},{"id":"deepseek/deepseek-v4-flash-vision-exp","name":"DeepSeek V4 Flash Vision Exp","provider":"DeepSeek","contextSize":1000000,"creditsPer1mInput":733,"creditsPer1mOutput":2200,"vision":true},{"id":"deepseek/deepseek-v4-pro","name":"DeepSeek V4 Pro","provider":"DeepSeek","contextSize":1048600,"creditsPer1mInput":5800,"creditsPer1mOutput":11601,"vision":false},{"id":"meta/llama-3.3-70b","name":"Llama 3.3 70B","provider":"Meta","contextSize":128000,"creditsPer1mInput":2400,"creditsPer1mOutput":2400,"vision":false},{"id":"meta/muse-spark-1.2","name":"Muse Spark 1.2","provider":"Meta","contextSize":1048576,"creditsPer1mInput":4167,"creditsPer1mOutput":14168,"vision":true},{"id":"meta/muse-spark-1.2-contributor","name":"Muse Spark 1.2 (Contributor)","provider":"Meta","contextSize":1048576,"creditsPer1mInput":333,"creditsPer1mOutput":667,"vision":true},{"id":"inclusionai/ling-3.0-flash","name":"Ling 3.0 Flash","provider":"InclusionAI","contextSize":256000,"creditsPer1mInput":200,"creditsPer1mOutput":600,"vision":false},{"id":"zai/glm-4.6","name":"GLM-4.6","provider":"Zhipu AI","contextSize":200000,"creditsPer1mInput":2000,"creditsPer1mOutput":7334,"vision":false},{"id":"zai/glm-4.7","name":"GLM-4.7","provider":"Zhipu AI","contextSize":200000,"creditsPer1mInput":2000,"creditsPer1mOutput":7334,"vision":false},{"id":"openai/gpt-oss-120b","name":"GPT-OSS 120B","provider":"OpenAI","contextSize":131072,"creditsPer1mInput":333,"creditsPer1mOutput":1667,"vision":false},{"id":"openai/gpt-oss-20b","name":"GPT-OSS 20B","provider":"OpenAI","contextSize":131072,"creditsPer1mInput":167,"creditsPer1mOutput":667,"vision":false},{"id":"google/gemini-3.1-flash-image","name":"Nano Banana 2 (Gemini 3.1 Flash Image)","provider":"Google","contextSize":131072,"creditsPer1mInput":1667,"creditsPer1mOutput":10001,"vision":true},{"id":"google/gemini-3.1-flash-lite-image","name":"Nano Banana 2 Lite (Gemini 3.1 Flash Lite Image)","provider":"Google","contextSize":65536,"creditsPer1mInput":833,"creditsPer1mOutput":5000,"vision":true},{"id":"google/gemini-3-pro-image","name":"Nano Banana Pro","provider":"Google","contextSize":65536,"creditsPer1mInput":6667,"creditsPer1mOutput":40003,"vision":true},{"id":"zai/glm-4.5v","name":"GLM 4.5V","provider":"Zhipu AI","contextSize":66000,"creditsPer1mInput":2000,"creditsPer1mOutput":6000,"vision":true},{"id":"bytedance/seedance-v1.5-pro","name":"Seedance 1.5 Pro","provider":"ByteDance","contextSize":0,"creditsPer1mInput":0,"creditsPer1mOutput":0,"vision":false},{"id":"google/veo-3.1-lite-generate-001","name":"Veo 3.1 Lite","provider":"Google","contextSize":0,"creditsPer1mInput":0,"creditsPer1mOutput":0,"vision":false},{"id":"alibaba/wan-v3.0-video","name":"Wan 3.0 Video","provider":"Alibaba","contextSize":0,"creditsPer1mInput":0,"creditsPer1mOutput":0,"vision":true},{"id":"minimax/minimax-h3","name":"MiniMax H3","provider":"Minimax","contextSize":0,"creditsPer1mInput":0,"creditsPer1mOutput":0,"vision":true},{"id":"google/veo-3.1-generate-001","name":"Veo 3.1","provider":"Google","contextSize":0,"creditsPer1mInput":0,"creditsPer1mOutput":0,"vision":false},{"id":"klingai/kling-v3.0-t2v","name":"Kling 3.0","provider":"Kling AI","contextSize":0,"creditsPer1mInput":0,"creditsPer1mOutput":0,"vision":false},{"id":"klingai/kling-v3.0-i2v","name":"Kling 3.0 (Image to Video)","provider":"Kling AI","contextSize":0,"creditsPer1mInput":0,"creditsPer1mOutput":0,"vision":true},{"id":"bytedance/seedance-2.0","name":"Seedance 2.0","provider":"ByteDance","contextSize":0,"creditsPer1mInput":0,"creditsPer1mOutput":0,"vision":true}]}}