check_connection
ChatGPTConfirms the ThriveStack connection is working and your sign-in was accepted. Returns the server time.
generate_content_outline
ChatGPTGenerates a content outline (structure only, not finished copy) for one owned-media content recommendation: headings, an answer-first opening summary, FAQ questions, and suggested schema markup types. The outline is generated on request and nothing is saved; calling it again produces a new one. Only owned-media content types are supported: Homepage, Domain, Product, Comparison, Article, Educational, Blog, Guide, How-to, Documentation, Listicle, Wiki. Earned-media types (Social post, News, PR, User review, Research) return an error, because earned recommendations call for outreach rather than a content outline.
get_accessible_brands
ChatGPTLists the brands (products) the signed-in ThriveStack account can access, with name and domain for each. These are the brands the account can switch between, and the domains the other tools accept. The result is the same whether you connect with OAuth or a personal access token.
get_brand_information
ChatGPTReturns the saved brand profile for a domain, as captured during AI Visibility setup and any later edits: description, value offering, industry, HQ country, business model, products and services, brand identity, customer segments, target markets, tracked competitors, tracked topics, language, monitored AI engines, buyer-intent mix, and setup progress (last_completed_step, user_edited). If the brand has no saved profile yet, the fields come back empty (competitors and ai_topics as []), which means setup has not been completed for the domain, not an error.
get_citation_probe_data
ChatGPTReturns the raw citation evidence from a brand's most recent completed AI-visibility probe run: every tracked buyer question, one record per question and AI engine. Each record carries the engine, model and provider_model, a mentioned flag (the brand is named in the answer), a cited flag (the brand's domain is among the response's sources, our_citations > 0), the brand-domain and total citation counts, and which competitor brands appeared instead. mentioned and cited are independent (mentioned only, cited only, both or neither), the same two measures get_domain_report scores. Use it for question-level gap analysis. It returns raw evidence and does not classify or rank gaps; topic-level scores are in get_domain_report. Results come in pages (default 20 records, max 25): total, returned and next_offset say where you are, and topics lists each topic's record count for the topic filter. Each record lists at most 8 sources, the brand's own first; citations_omitted counts the rest and total_citations is the full count. If the domain has no completed probe run, it returns has_run=false with a message instead of an error.
get_competitor_source_mix
ChatGPTFor the domain's brand and each competitor, the share of AI-answer source retrievals that come from the brand's own site (owned), from third-party pages mentioning it (earned) and from everything else (other), measured across the domain's tracked prompts. Values are whole-number percentages that sum to 100 per brand (all three 0 means no retrievals). Use it to see whether a competitor wins through its own content or through earned media like reviews, Reddit and editorial coverage. If competitor_domains is omitted, the domain's saved tracked-competitor list is used. Omitting both dates means all time. Returns a clear no-data result (has_data=false) if there are no cited sources in the window.
get_competitor_visibility
ChatGPTWeekly AI-search visibility % (and average rank, where available) for a domain's own brand alongside its tracked competitor brands, side by side — matching the product's AI Visibility > Competitors page. If competitor_domains isn't provided, the domain's saved tracked-competitor list is used automatically. Returns a clear no-data result if the domain has no tracked competitors configured and none were passed explicitly, or if there's no visibility history yet for the requested window. Also returns a 'latest' snapshot ranking all brands by their most recent week's visibility, with each brand's share of voice for that week (its visibility as a fraction of the total across all returned brands). Sentiment is not included.
get_domain_prompts
ChatGPTLists the tracked buyer questions (prompts) generated for a brand's domain, grouped by topic. Use it to see or review what is being tracked; it contains no visibility results (get_domain_report has those). The domain must have completed brand setup; otherwise the tool returns an explanatory error message.
get_domain_report
ChatGPTReturns the visibility report for a brand's most recent completed AI-visibility probe run: overall visibility and average position, competitor and mentioned brands, broken down by topic and by tracked question, with per-AI-model detail. Use it to answer how visible a brand is and who appears alongside it. It has no response text or citation URLs; get_citation_probe_data has those. Two different measures are reported. overall.visibility is the percent of responses whose answer text names the brand. overall.cited_responses (also shown as overall.citations) is the count of responses whose sources include a URL on the brand's domain, whether or not the answer names the brand. A response can be named without being cited, or cited without being named; overall.response_overlap splits responses into both, mentioned_only, cited_only and neither, and overall.definitions restates the measures. overall.citation_instances counts raw source entries on the brand's domain and can exceed cited_responses. If there is no completed run, it returns a clear no-run result instead of an error.
get_earned_content_recommendations
ChatGPTLists content recommendations for earned, third-party media (channel_type earned): ideas for getting cited on sites such as Reddit, G2 or other reference and editorial domains. Each item's evidence_type is citation_backed (tied to a real probe gap) or category_inferred (no direct citation evidence, inferred from the category), so check it before treating an item as citation-backed. Items also include gap_score, our_citations and total_citations. Results are sorted by priority (HIGH, MED, LOW), then gap_score and total_citations descending. An empty list can mean recommendations have not been generated for the domain yet. Content on the brand's own site is covered by get_owned_content_recommendations.
get_engine_visibility_trend
ChatGPTDaily AI-search visibility % for a domain's own brand, split by AI engine (ChatGPT, Perplexity, Gemini, ...), with average rank per engine where available. Each point is one day: 'values' maps engine id to visibility %, 'avg_ranks' maps engine id to average position (lower is better). Days appear only when a probe ran, so gaps between dates are normal. Use it to answer which engine the brand is strongest or weakest on and how that moved; brand-vs-competitor comparison is in get_competitor_visibility. Omitting both dates means all time. Returns a clear no-data result (has_data=false) if there is no history in the window, not an error.
get_owned_content_recommendations
ChatGPTLists content recommendations for the brand's own site (channel_type onsite): content to publish on your blog or site to close the AI-citation gaps found in probing. Each item includes severity_tier, gap_score, our_citations and total_citations, and competitors_winning as evidence. Many items can share a priority (HIGH, MED, LOW); results are sorted by priority, then gap_score and total_citations descending, so within a priority the items with higher gap_score and total_citations come first. An empty list can mean recommendations have not been generated for the domain yet, not that nothing is worth doing. Third-party placements are covered by get_earned_content_recommendations.
get_prompt_research
ChatGPTReturns one prompt research session's researched prompts and personas. Each prompt has prompt_text, topic, persona, branding (branded or non-branded), intent (informational, commercial or transactional), country, language, recommended and tracked. Prompts are grouped either by topic or by persona. Get the id from list_prompt_research.
get_search_console_status
ChatGPTGoogle Search Console connection and sync state for the brand on your token: whether it's connected, the selected property, the brand's configured domain and whether the property matches it, the connected Google account, last poll time, the sync schedule (last/next run, cadence, tier) and any in-flight sync run (queued | running | paused, with resumesAt when paused). Results are keyed by provider under 'providers'. When connected=false or needsPropertySelection=true, the Google indexing fields in get_url_funnel, list_urls and get_url_details are empty because setup isn't finished; connecting Search Console and picking a property is done in the ThriveStack app (AI Visibility > Search Engine). domainMatch=false means the chosen property doesn't cover the brand's domain.
get_source_mix_summary
ChatGPTWhere AI answers about a domain's prompts get their information, summarised over a date window — matching the panels above the product's AI Visibility > Domains and URLs tables. Returns: source_mix (retrievals per source_class — owned = the brand's own site, earned = third-party pages that mention the brand, other_cited = everything else — split by subtype, i.e. domain type such as Editorial, UGC, Corporate); type_shares (retrievals per domain type, or per URL type when grain=url); movers (the top domains or URLs ranked by retrievals, despite the name not a change-over-time list); and total_rows (how many distinct domains/URLs were cited). source_mix is only filled for grain=domain. source_class/source_subtype narrow movers and type_shares but not source_mix. Omitting both dates means all time. Returns a clear no-data result (has_data=false) if nothing was cited in the window — no completed probe run in it yet, or its domain/URL metrics are still being computed.
get_source_trend
ChatGPTHow often the most-used sources were retrieved by AI answers over time, for a domain's prompts — the product's 'Source retrievals over time' chart on AI Visibility > Domains and URLs. Returns 'labels' (one per day, week or month) and 'series' (one per source, 'values' aligned to labels). Only the 6 busiest domains or URLs by total retrievals in the window are returned, and the rest are not summed into an 'other' series, so the series do not add up to total retrievals; a complete ranked list is in get_source_mix_summary (movers) or get_url_report. Omitting both dates means all time. Returns a clear no-data result (has_data=false) if nothing was retrieved in the window.
get_technical_recommendations
ChatGPTTechnical AI-crawlability and on-page/entity-signal recommendations for a domain's most recent completed audit — matching the product's AI Visibility > Technical group (Crawl Insights, Content & SEO, Entity Signals tabs). Distinct from get_owned_content_recommendations/get_earned_content_recommendations, which are citation-gap content ideas, not technical checks. Returns two sections: crawl_readiness (site-wide checks like robots.txt, sitemap, HTTPS, page speed — each PASS/WARN/FAIL) and page_recommendations (per-page content/SEO and entity-signal checks, also PASS/WARN/FAIL, tagged content or entity via phase_id). Returns a clear empty/no-run result if the domain has no completed audit yet — not an error.
get_url_details
ChatGPTDetails for one URL of the brand on your token. Today this is the Google Search Console view: index state, coverage detail, whether crawling is allowed, last Google crawl, plus the raw URL Inspection result under 'raw' (verdict, robots/canonical/mobile details as Google returned them). It does NOT include the AI-crawler or content-audit fields — take those from the URL's row in list_urls. Use it to explain why a URL isn't indexed. Returns a clear not-inspected-yet result (inspected=false) if Search Console hasn't inspected the URL yet — not an error.
get_url_funnel
ChatGPTURL funnel for the brand on your token, as on the AI Visibility > URLs page: sitemap URLs → crawled by Google → indexed by Google, plus an aiReach band (sitemap URLs an AI crawler actually fetched vs. not). Each stage carries configured + status (ok | running | locked): 'locked' means that data source isn't set up (Search Console not connected, or AI-crawler tracking not configured), which is different from a count of zero. 'running' means the first Search Console sync is still in progress, so counts are partial. Which URLs sit in each stage is listed by list_urls.
get_url_report
ChatGPTPer-URL retrieval and citation metrics across every source URL surfaced by a domain's most recent completed AI-visibility probe run — which specific pages are getting retrieved and cited, and how often. Complements get_domain_report (topic/prompt-level rollup) and get_citation_probe_data (per-question raw citations): this is the URL-centric aggregate view across the whole run, matching the product's AI Visibility > URLs page. URL metrics are computed after a probe finishes; until then it returns a clear not-yet-computed result (has_run=true, urls_computed=false) rather than an error or a misleadingly empty list. There is no date range or sort option: results are always sorted by retrievals, highest first.
list_prompt_research
ChatGPTLists a brand's prompt research sessions: each is a run that discovers the questions buyers ask AI about the brand's category, from which the user picks prompts to track. Per session it returns id, name, a one-line summary, source mode (brand_domain, keywords or topics), status (draft, analyzing, ready_for_review, generating, completed, failed), prompt_count, tracked_count (how many of the researched prompts are tracked), brand_name, and created_at / generated_at. Use it to answer what prompt research exists or was done recently; pass a returned id to get_prompt_research for the researched prompts. This is different from get_domain_prompts, which returns only the prompts already being tracked. An empty list means no research has been run for the brand, not an error.
list_urls
ChatGPTPaged table of the brand's sitemap URLs (brand from your token), one row per URL combining three sources: Google indexing (index state, coverage detail, last Google crawl), AI-crawler reach (hit count and which bots fetched it) and the content audit (status, SEO score, entity score). Filters are ANDed; values inside one array filter are ORed. The response's 'columns' map says which sources are configured (indexed = Search Console, crawled = AI-crawler tracking, content = content audit) — when a column is false its fields are absent because the source isn't set up, not because the value is zero. These are the brand's own pages; which URLs AI answers cite as sources (any site) is covered by get_url_report.
save_content_recommendations
ChatGPTSaves content recommendations (owned and/or earned) to the brand's recommendations list as 'suggested' items for the team to act on. This is the only tool that writes data, and it is deliberately narrow: it creates new 'suggested' items or refreshes ones still 'suggested'. It cannot approve, dismiss, assign or delete anything; items already in todo, approved or dismissed are left untouched and reported as 'unchanged'. Saving the same item twice updates it rather than duplicating it. Each item needs channel_type (onsite or earned), prompt_id, title and rationale. Citation-backed items (the default) must reference a real gap from the domain's latest probe run: the prompt_id from get_citation_probe_data for owned items, or the earned id returned by the recommendation generator. Evidence fields (priority, scores, citation counts, competitors, cited page) come from the service's own analysis, not the request; only wording, role and content_type are used. Items can be rejected, for example for an id that is not a real gap; the response says which and why. Maximum 30 items per call.