add_knowledge_source
ChatGPTCreate one reusable account-owned Knowledge Source from user-provided plain text. The server always stores this as TEXT and this route cannot accept files, base64, MIME types, or local paths. Use the returned source ID in create_content_brief or generate_draft_content.
ai_brand_insights
ChatGPTBrand mention analysis for AI search engines (ChatGPT, Perplexity, Gemini, Google AIO, etc.). Reports which brands are MENTIONED in AI-generated answers — market share, sentiment scoring, and competitive positioning across time periods. NOT for website/URL citations (use ai_citation_insights) or Google SERP rankings (use keyword_insights). REQUIRED: account_id is mandatory. Call tracked_configs with config_type=accounts to discover your account_id. DEFAULT MODE returns per-brand market share rankings. Boolean switches activate alternate views: - brand_sentiment_trend: democratic sentiment score over time (each prompt gets one equal vote) - sentiment_by_brand: per-brand positive/negative/neutral counts and score - sentiment_statements: individual quote/statement drilldown (capped at statement_limit, default 1000) - sentiment_by_source: per-source-domain sentiment breakdown - intent_performance / persona_performance: brand coverage % by intent or persona (pair with owned_only=true) - persona_intent_performance: coverage x sentiment heatmap by persona+intent (pair with owned_only + web_property_id) - topic_coverage: brand coverage % per topic (pair with owned_only + web_property_id) - topic_breakdown: market share grouped by topic — report share_of_topic (within-topic), NOT market_share_percent (global) COLUMN BINDING: default mode rows carry both market_share_percent AND brand_sentiment_score. Report market_share_percent for "market share" / "who's winning" questions. Report brand_sentiment_score for "sentiment" questions (or switch to a sentiment mode for deeper analysis). EMPTY RESULTS: if a filter returns no data, validate filter values via tracked_configs (config_type=topics, brands, etc.) — the name may not match configuration exactly. Use EXACT parameter names: search_engine (NOT search_engine_name), topic (NOT topic_name), persona (NOT persona_name), intent (NOT intent_name), language (NOT language_name). Array parameters accept JSON arrays. Omit a filter for "all values" on that axis.
ai_citation_insights
ChatGPTWebsite citation market share across AI search engines (ChatGPT, Perplexity, Gemini, Google AIO, etc.). Reports which WEBSITES/DOMAINS are being CITED (linked as sources) in AI-generated answers — domain-level share, top cited pages, and per-prompt URL drilldown. NOT for brand mentions (use ai_brand_insights) or Google SERP rankings (use keyword_insights). REQUIRED: account_id is mandatory. Call tracked_configs with config_type=accounts to discover your account_id. DEFAULT MODE returns domain-level citation market share per time period. Boolean switches activate alternate views: - url_drilldown: per-URL breakdown for specific domain(s). REQUIRES citation_domain_label from a prior marketshare call at the SAME granularity — never guess a label. Returns capped top-N URLs; compare count against the marketshare total to assess completeness. - top_cited_pages: top cited pages across all domains (owned_only=true for your pages) - intent_performance / persona_performance: citation coverage % by intent or persona - persona_intent_performance: coverage heatmap by persona+intent - topic_coverage: citation coverage % per topic - prompt_breakdown / topic_breakdown / search_engine_breakdown: add grouping dimensions URL DRILLDOWN WORKFLOW: 1. Call without url_drilldown to get marketshare results with citation_domain_label values 2. Call with url_drilldown=true + citation_domain_label=["exact label from step 1"] Never guess citation_domain_label — it must come from a prior marketshare result. EMPTY RESULTS: validate filter values via tracked_configs (config_type=topics, etc.). Use EXACT parameter names: citation_granularity (NOT group_by), search_engine (NOT search_engine_name), topic (NOT topic_name), persona (NOT persona_name), intent (NOT intent_name), language (NOT language_name), prompt (NOT query). Array parameters accept JSON arrays. Omit a filter for "all values" on that axis.
ai_query_fan_out_insights
ChatGPTMCP endpoint for AI prompt fan-out (fan-out query) analysis. When an AI engine runs a web search to answer a tracked prompt, it decomposes the prompt into multiple targeted fan-out queries (the "fan-out"). This tool exposes those fan-out queries, flags which fan-out queries are BRANDED — a brand counts only when it appears as a whole word/phrase in the fan-out query text (brand 'Arc' matches 'arc crm pricing', not 'architecture'), measures fan-out query specificity, and reports how fan-out depth shapes brand mentions and citation diversity. Modes include brand_impact (per-brand fan-out query correlation) and provider_comparison (cross-provider fan-out analysis for shared queries). REQUIRED: account_id is mandatory. Call tracked_configs with config_type=accounts to discover your account_id. mode=records (DEFAULT) — one row per engine RESPONSE with fan-out queries, branded split, brands, citations, counts, and avg_fan_out_query_token_count. ALWAYS narrow with filters. mode=fan_out_queries — one row per INDIVIDUAL fan-out query (exploded) with text, position, fan_out_query_is_branded, fan_out_query_token_count. ALWAYS filter. mode=metrics — ONE row of summary stats: avg/min/max/median/p90/p95 fan-out, histogram, branded stats, avg_fan_out_query_specificity. mode=breakdown + dimension=<X> — one row per group ranked by avg fan-out. mode=trend + dimension=<X> — group aggregates per collection date. mode=brand_impact — per-brand fan-out query correlation: how often each brand appears in fan-out queries and how that correlates with citations. mode=provider_comparison — cross-provider fan-out for queries seen in 2+ providers. mode=discover + dimension=<X> — distinct values of dimension X. mode=brand_fan_out_query_share - one row per brand: of ALL individual fan-out queries run in the window, how many mention the brand (whole-word) and what share that is. Zero-share brands are included. Use for "what fraction of decomposed queries are about brand X"; for the response-level question ("in what % of responses mentioning X did it appear in the fan-out") use brand_impact instead. mode=outliers - responses whose fan-out exceeds the p90 of whatever slice your filters select. Each row carries p90_threshold and account_avg_searches so the comparison is self-contained. Use for "unusually deep searching" questions; no threshold needed. COLUMNS PER MODE (plan follow-up calls if a field you need is absent): - records: date, prompt, topic, prompt_type, intent, persona, ai_search_engine, data_provider, amount_of_searches, fan_out_queries, branded_fan_out_queries, unbranded_fan_out_queries, has_branded_fan_out_query, brands, citations, brand_count, citation_count, distinct_searches, distinct_citation_domains, fan_out_bucket, avg_fan_out_query_token_count, web_search - fan_out_queries: date, prompt, topic, prompt_type, intent, persona, ai_search_engine, data_provider, amount_of_searches, fan_out_query, fan_out_query_index, fan_out_query_is_branded, fan_out_query_token_count, fan_out_bucket, brands, brand_count, citation_count, distinct_citation_domains - metrics: fan_out_responses, distinct_prompts, avg/min/max/median/p90/p95_searches, bucket_under_2, bucket_2_4, bucket_5_7, bucket_8_10, bucket_11_plus, responses_with_branded_fan_out_query, avg_branded_fan_out_queries, avg_brand_count, avg_citation_count, avg_distinct_searches, avg_distinct_citation_domains, avg_fan_out_query_specificity - outliers: records columns (minus branded arrays/web_search) + p90_threshold, account_avg_searches - breakdown: dimension_value, prompt_type (only when dimension=prompt), fan_out_responses, distinct_prompts, avg_searches, max_searches, median_searches, responses_with_branded_fan_out_query, avg_branded_fan_out_queries, avg_brand_count, avg_citation_count, avg_distinct_searches, avg_distinct_citation_domains, avg_fan_out_query_specificity - trend: breakdown columns (no prompt_type/median) keyed by date + dimension_value - brand_impact: brand_name, brand_rank, responses_mentioning_brand, distinct_prompts_mentioning_brand, responses_with_brand_in_fan_out_query, fan_o…
create_content_brief
ChatGPTCreates a durable Writing Assistant draft and a bounded content brief. Consumes one draft credit. This is a write operation and cannot be undone from this tool surface. PRECONDITION. Never guess the Conductor account or web property. If the user hasn't given them, use tracked_configs to find options and have the user pick. If it returns many accounts, ask the user to narrow it down (name or domain) before looking up web properties. Never call this tool in the same assistant turn as the user's request. First present the following and end your turn, then wait for a user reply that confirms them: Conductor account and web property; Search locale; Content source, which is a new topic set, one live page URL, or unpublished HTML; Topics, as one unprioritized list, never labeled primary, secondary, or supporting; Draft title; Content Profile by name, or state plainly that none is selected, noting that a selected profile applies saved brand voice, writing style, target audience, and brand/usage rules to generated content and that with none selected generated content will not use saved brand guidance and may sound generic; Knowledge Sources by name, or state plainly that none are selected, noting that these are company-provided source guidance that helps generated content reflect the user's own expertise; AI search engines, if requested, noting which engines will be used for AI-powered research; and that this creates a draft and consumes one draft credit. A request that merely implies content work is not confirmation. A request to score, research, or analyze is not confirmation. Only a reply responding to the summary above is confirmation. If that reply changes any input, present the revised set and wait again. Parameters. For a live URL set the page parameter; there is no url parameter. Omitting both page and bodyCopy intentionally creates a research-only draft with empty source content and no baseline score. Live and unpublished sources are preserved and baseline-scored. Accepts only an explicitly selected existing Content Profile ID and never creates a profile from inline guidance. Setting aiSearchEngines switches the draft to AI-powered research using the named engines; omitting it uses legacy SEO research only. After a confirmed call, poll get_draft_progress with the returned draftId. This tool never generates or revises prose, performs a final score, or recommends internal links. Present the get_draft_progress outputs and stop for a separate human decision before any later write.
create_content_profile
ChatGPTCreate a reusable account-owned Content Profile for voice, audience, and excluded terms. Only EXCLUDE language rules are supported. Use the returned profile ID in a workflow only when the user asked to create or reuse this profile.
generate_draft_content
ChatGPTGenerate a full article, outline, or AI revision from an existing durable draft. Use draft only for fresh or fully regenerated content. Use revise for every edit to current content, especially a named-section change, shortening, audience retargeting, or a request to leave the rest unchanged; carry the complete scope and preservation constraints in revisionInstructions. Optional Content Profile and knowledge-source overrides are persisted before generation, and required insight analysis is handled internally without a separate public analysis call. Poll get_draft_progress with the same draftId. After success, call get_draft for title, metaDescription, bodyCopy, updated, and contentVersion, and present the actual saved result or requested excerpt; do not report only that the workflow completed or repeat its instructions.
get_content_brief_insights
ChatGPTRead content insights for a durable draft, including AI search research. The default compact view is a bounded, non-exhaustive generation summary. Request detail=full when omitted fields are required or when verifying every persisted insight change after update_content_brief_insights. Valid insight types are enumerated in the insights parameter. CONTENT_ANALYSIS_INSIGHT includes both content-analysis and body-content guidance. CONTENT_EXTRACTION_SUMMARY_INSIGHT returns AI search research per topic (account-brand visibility, the brands AI engines and Google surface, and AI answer citations and search queries) as aiSearchResearch in the compact view. COMPARISON_PAGES returns the draft's comparison pages with each page's rank, url, enabled flag, and collection status; read it before update_comparison_pages. Unrecognized types are rejected, while valid types without a value on the draft are omitted from the response.
get_content_profile
ChatGPTRead one account-owned Content Profile, including its voice, audience, and language rules.
get_content_score
ChatGPTGet the content score for a stored Writing Assistant draft, including intent alignment and topical coverage. Provide only the account and draft identifiers; the current title, meta description, and body copy are fetched automatically before scoring. The stored draft must contain at least one nonblank content field; an empty draft returns 422 and is not scored. Present basis before the score so the user can see the exact objective, audience, journey stage, questions, subtopics, and terms being graded. Present the overall score out of 100 and the Intent Alignment and Topical Coverage scores out of 50. For 0/1/2 factors, use rating rather than an unexplained number; display met and term match booleans as checks or crosses.
get_draft
ChatGPTRead a durable draft. Project only the fields needed; requesting bodyCopy or other content fields loads the stored content. For a save you only need the concurrency tokens: project fields [updated, contentVersion] rather than reading the whole draft. A full read includes knowledgeSourceIds; a projected read includes them only when fields explicitly contains knowledgeSourceIds. Every read carries contentProfileId and contentProfileName; the embedded profile is returned only when fields explicitly contains contentProfile, so request it only when the user needs the profile's voice, audience, or language rules. competitorUrls is projection-only on the same terms: a full read no longer returns the competitor list, and a projected read returns it only when fields explicitly contains competitorUrls.
get_draft_progress
ChatGPTPoll for completion of an in-flight create_content_brief, generate_draft_content, or update_comparison_pages insights refresh, using the draftId returned by that call. New submissions are rejected while another workflow on the draft is nonterminal, so repeated polling cannot switch between active executions. Poll until state is SUCCEEDED, FAILED, or CANCELLED; outputs is present only when SUCCEEDED. A draft with no workflow history returns not found. On success this materializes outputs.brief, outputs.competitorUrls, outputs.scoreSummary plus compatibility outputs.baselineScore when baseline scoring succeeds, and the server-built outputs.appUrl. A scoring failure is surfaced in warnings with no score summaries; the draft itself still exists. outputs.competitorUrls carries the competitor pages a successful create_content_brief run was researched against, so the competitor set can be presented with the brief without a second get_draft call projecting competitorUrls. The key is absent when the draft has no competitors; that means none were used, not that the read was incomplete. When presenting outputs.scoreSummary, show the exact grading targets from outputs.scoreSummary.basis before any scores, so the user can see what was graded. Use dimension.rating rather than unexplained 0/1/2 values, and render supportingAssessment.met as a check or cross rather than a raw boolean. Surface outputs.appUrl so the user can open the draft. After a generate_draft_content run, call get_draft for title, metaDescription, bodyCopy, updated, and contentVersion, and present the actual saved result or the requested excerpt. Do not report only that the run completed.
get_knowledge_source
ChatGPTRead one account-owned Knowledge Source. Metadata is returned by default; include text in fields only for explicit user review because source text can be large. Content workflows need only the source ID and load its text server-side.
keyword_insights
ChatGPTGoogle SERP keyword analysis — traditional search rankings, visibility, and search volume. NOT for AI search brand mentions (use ai_brand_insights) or AI search website citations (use ai_citation_insights). REQUIRED: account_id is mandatory. Call tracked_configs with config_type=accounts to discover your account_id. Default analysis_mode is keyword_performance (visibility rank buckets over time). Other modes: result_types, seasonality (monthly MSV), keyword_grid (ranked keyword list with rank changes), keyword_groups, locations, rank_comparisons, and keyword_details deep dives (keyword_details_summary, keyword_details_rank_over_time, keyword_details_seasonality, keyword_details_search_results) for a single tracked keyword phrase. See x-context.choosing_analysis_mode for question-pattern to mode routing (e.g. "which keywords improved most" → keyword_grid). Discovery and IDs — call tracked_configs with account_id and config_type to get IDs: 1. config_type=web_properties for site IDs, search_engines for engine IDs, locales for locale codes. 2. Use returned IDs in web_property_id, web_property_group_ids, rank_source_ids, device_ids, locodes. Do not guess IDs from display names. Filter semantics: omitted optional array filters (rank_source_ids, device_ids, locodes, keyword_group_ids, etc.) mean no restriction on that axis (all values in account scope). Empty web_property_id + empty web_property_group_ids = all client web properties. keyword_details_* modes override this: exactly one engine, device, and location must be supplied. rank_type: TRUE (default) includes AI Overview / featured snippet positions; STANDARD counts only traditional blue-link ranks. AIO_REFERENCE_RESULT in search results indicates the page was referenced by an AI Overview, not a standard organic result. Stacked bar charts from keyword_performance: follow KeywordInsightsResponse visualization notes (segment order and colors matching the Conductor Keywords UI; best ranks at the top of each bar).
list_content_profiles
ChatGPTList bounded, compact Content Profile summaries to resolve an established voice by name before reading or managing a selected profile.
list_drafts
ChatGPTList a bounded, most-recent-first page of compact draft summaries. Request heavyweight competitor or Content Profile expansions only when needed.
list_knowledge_sources
ChatGPTList a bounded page of compact account-owned Knowledge Source metadata without loading source text. Use get_knowledge_source for one selected source and request text only when the user needs to review it.
pages_detail
ChatGPTEverything Conductor knows about ONE page (one URL), as the page-detail screen of the Conductor Pages report: its current on-page / technical state and when each value last changed, its weekly traffic and visibility (Search Console, organic and AI-referral analytics, AI citations, bot visits), the keywords it shows up for and the AI prompts that cite it. For site- or page-group-level trends use pages_trends; to find WHICH pages match criteria use pages_discovery; for "which pages rank for keyword X" use keyword_insights. EXAMPLES. "How is https://www.example.com/pricing doing?": {account_id, url} (summary, the default mode). "Sessions per week": measures_over_time. "Which keywords does this page rank for?": keywords. "What changed on this page?": observation_changelog. "Which prompts cite this page?": citations_by_prompt. REQUIRED: account_id and url. Call tracked_configs_v2 first for the account and its web property group IDs; never guess them. The url must come from the user (or be the account's home page, a path the user gave on one of its domains, or a near match this tool returned): a URL you infer is a guess: ask which URL they mean; a page only described ("our pricing page") is not a URL, never invent one. A full URL (even a home page) means ONE page: use this tool, not pages_trends' website filter, which sums the whole site. ONE URL PER CALL: for two or three named pages call once per page and compare; a SET of pages ("every /blog/ page") cannot be totalled here and pages_trends has no URL-pattern filter: say so, never substitute a website or page group, offer specific pages. Keyword questions that start from the page (rank, tracked keywords) are keywords here; totals and trends for the page are summary / measures_over_time. DEFAULT METRIC. Sessions, visits, page views, orders and every other analytics figure are metrics, not columns. The page's default metric is always the fixed order google_analytics, adobe_analytics, custom_analytics (the first source the property has; pages_discovery ranks by the default of the OLDEST active profile instead, so with two sources the tools can differ: say which source you used). It is the rows default_metric / ai_default_metric (summary) and the first entry of extra_metrics (measures_over_time). Another metric by name through metrics, after metrics ['?'] (the catalog): never say it is not reported before that; default:<source> / default:all pick sources. Weeks of a range are summed as the grid does, sources are never added. Look-alike names are different metrics (visits is not All Visits, page_views is not Page Views): read each by its exact name. Never call default_metric "total sessions" and never report clicks, citations or bot_visits as it. CITATIONS are counted per week: the same prompt shows up in every week it cites the page, so adding weeks counts it again. "How many prompts / citations" over more than one week is citations_by_prompt (totals prompts all), worded "N prompts cited the page"; never add up weekly values; the latest week's value may be given as "N in the latest week". NOTES AND NULLS. Read each row's note and relay it. NULL = no data recorded, never 0 (citations are 0 for a week without citations); the *_presence columns say why. resolution_status not_found: one row with near matches in the note: call again with the closest URL and say which; never answer from it as if the page had no data. Only complete weeks / months are returned; default range = the last 4 complete weeks. YEAR OVER YEAR: no compare parameter; call the same mode twice (the year-ago window is the same weeks 52 weeks earlier) and compare the same metric. The parameter descriptions carry the rest: analysis_mode (the seven modes and what each returns), url, metrics, channel.
pages_discovery
ChatGPTFind the PAGES of one account that meet stated criteria, as the Conductor Pages report grid does: filters, thresholds, week-over-week changes, rankings; page-level rows. For "how many pages are 404 / redirect / indexable" (one attribute) or site totals and trends use pages_trends; for everything about ONE known URL use pages_detail. EXAMPLES. "Top 10 pages by sessions last week": list {account_id, web_property_id, limit 10} (ranked by the default metric, no sort_by). "Pages that lost the most visits": list {compare previous_period, sort_by_metric default, sort_metric_on change, sort_direction asc}. "Which pages changed their title last week?": changes {changed_fields [title]}. "How many 404 pages get more than 50 sessions?": count {status_code ["404"], metric_filters ["default gt 50"]}. "Best pages of page group Blog": group_summary {page_group}. REQUIRED: account_id. Call tracked_configs first (accounts, web_properties, pages_groups) for the account, the web property group IDs and the exact page group names; never guess them. ANSWERS. list always answers: at most limit pages (default and maximum 100), ranked, with total_matching and status: ok = every match is returned; top_n = the top limit by sort_used, so say "top N of M pages by <sort_used>" and never call it complete. No paging: the user steers WHICH pages with filters, sort_by / sort_direction and then_by. When many pages tie (1,000 with 0 clicks) a first-row note says so: re-run once with the then_by it gives and say which tie-breaker you used. Never refuse because many pages match. ANALYTICS ARE METRICS, not columns (sessions, visits, page views, orders, revenue, events, conversions, custom metrics, AI traffic): read them in the extra_metrics cell, JSON {"<name>":{"value","previous","change"}}; the default metric is always in it, first. Ask for the default metric with metrics ["default"] (the metric the Pages grid sorts by), "default:<source>" (google_analytics, adobe_analytics, custom_analytics) or "default:all" (every source side by side); AI traffic with channel ai or ai:<engine>. Any other metric by its name, after metrics ["?"] (the catalog): never say a metric is unavailable before that. Report metrics by NAME and say which metric and source you used: visits is not All Visits, page_views is not Page Views. GRID RULES. The default ranking is the default metric of the OLDEST active analytics profile's source, summed over the weeks of the range, empty values last; changes mode and pages_detail use the fixed order google_analytics, adobe_analytics, custom_analytics instead, so with two sources the tools can differ: say which source. A change is rounded to 1 decimal; a page new in the period has no previous value or change. clicks (Search Console) are never sessions: empty = no Search Console data, 0 = data and no clicks. The first-row notes tell what to say (metric used, order, why a value is empty): relay them. EMPTY CASES. No analytics profile: no default metric and no cell; list orders pages by URL depth ascending, changes by URL path descending, as the grid does (sort_by clicks to rank by clicks). A default metric that exists but has no value on any page: page id order, and the note says so: never present that order as ranked by sessions. The parameter descriptions carry the rest: analysis_mode (modes and which to pick), sort_by, metrics, compare, the filters.
pages_trends
ChatGPTAggregated Pages metrics over time for one account, mirroring the Conductor Pages report Overview tab. Returns one row per period (per breakdown value, per dimension value), never one row per page, so the response stays small however many pages the account has. Use it for "how is my site doing over time" questions about organic search traffic, AI referral traffic, bot crawling, crawl health (indexability, status codes, schema.org) and on-page changes. This tool answers with NUMBERS, never with pages: one value per period, or one value per value of ONE crawl attribute for the whole site or a breakdown (how many pages are indexable / return a 404 or a 5xx / are redirects / use schema.org, how many pages got clicks, how many pages changed per field), trends over time and comparisons with the previous period. Questions that want the PAGES themselves (which pages, a list, top pages, pages that lost traffic, what changed on each page) or a count of the pages matching a COMBINATION of conditions (URL contains X, clicks above N, status AND page group) belong to pages_discovery; one specific URL belongs to pages_detail. Never use this tool to list URLs. For AI citations it holds exactly one thing: the Pages report's "AI Prompts with Citations" widget (analysis_mode=citation_performance) — how many tracked AI prompts have a latest answer that cites a page in this account's Pages page index, by week or month. REQUIRED: account_id. Call tracked_configs_v2 first (config_type: accounts, web_properties, pages_groups) to find the account, web property group IDs and exact page group names; never guess IDs or names. Pick analysis_mode by the question (see x-context.choosing_analysis_mode): organic_performance (default) Search Console clicks / impressions / CTR / average position / pages with clicks as columns, and every web-analytics figure (sessions, page views, events, conversions, orders, AI traffic ...) as a metric in extra_metrics. ai_performance_by_engine the AI default metric per AI engine, in extra_metrics. citation_performance the Pages report's "AI Prompts with Citations" widget: tracked AI prompts whose latest answer cites a page in the page index. bot_activity bot visits and unique pages visited, from log-file analysis. technical_distribution page counts per crawl attribute value (indexable, schema.org, ...). pages_changed pages whose title / headings / meta / type / status / canonical changed week over week. net_page_change signed page-count delta week over week — how much the tracked page universe grew or shrank, not what changed on any one page. No page_group/website breakdown and no page-attribute filters (see its own row in measure_catalog). measure_catalog no data: every measure's unit, formula, lower-is-better and which pages count. Call it when unsure how to read a number. Web analytics are METRICS, never columns: sessions, page views, events, conversions, revenue, unique visitors and AI referral traffic come back in the extra_metrics JSON cell {"<metric>":{"value":v}}, always starting with the default metric (the Overview chart default: the Google Analytics default, else Adobe, else custom, e.g. sessions or All Visits). metrics adds named ones (case-insensitive, "Page Views" for page views; look-alikes are different metrics: visits is not All Visits, page_views is not Page Views), ["default:all"] every source side by side, ["?"] lists the configured metrics. Report a metric by its NAME. channel ai (or ai:<engine>) reads the AI traffic: the AI total next to the organic number is a SECOND request with channel ai. With compare=previous_period each cell adds previous (empty when the earlier period has no data) and change (value minus previous, empty unless both exist; for grain all_time a missing side counts as 0). Which pages and sources a total counts (read this before answering "does the total include pages with no data / zero clicks?"): - Search Console measures (clicks, impressions, ctr, average_position) are summed over the pages that HAVE Search Console rows in the period, like the UI's Search Console trend…
suggest_internal_links
ChatGPTGenerate read-only internal-link candidates from an existing draft's current saved body and web property. The body is loaded server-side; do not send it through the model. Review a selected candidate before applying it with update_draft_internal_links, mapping this response's updated and contentVersion to expectedUpdated and expectedContentVersion and copying each reviewed anchorText, context, and url. This call never inserts links or otherwise changes the draft.
suggest_title_and_meta_descriptions
ChatGPTGenerate read-only SEO title-tag and meta-description candidates from an existing draft's current saved body. The body is loaded server-side; do not send it through the model. Review a selected candidate before applying it with update_draft_content, mapping this response's updated and contentVersion to expectedUpdated and expectedContentVersion. This call never changes the draft.
tracked_configs
ChatGPTDiscovery endpoint for account tracking configuration. Returns what topics, prompts, prompt groups, search engines, locales, brands, web properties, sentiment categories, personas, and intents are configured for an account. v2 changes: prompts and topics_with_prompts now include collection_frequency (DAILY, WEEKLY, or MONTHLY). CALL THIS FIRST before querying ai_brand_insights, ai_citation_insights, or keyword_insights whenever you need to discover valid filter values — exact topic names, brand names, locale codes, web property IDs, search engine IDs, etc. REQUIRED: account_id and config_type are both mandatory. DEFAULTS: tracked_configs returns both ACTIVE and INACTIVE items by default. The data tools (ai_brand_insights, ai_citation_insights) default to ACTIVE-only via their topic_status and prompt_status filters. CAPPED RESULTS: the default limit is 100, but this is NOT a hard cap for topics, prompts, or accounts — pass a higher limit (e.g. limit=500) to retrieve more. Do NOT conclude a name or value is unconfigured solely because it does not appear in a default-limit browse. Either raise the limit or use a more specific filter to narrow the search. IMPORTANT: Use EXACT parameter names as documented: - config_type (NOT type, NOT entity_type) - topic_status (NOT status) - prompt_status (NOT query_status)
update_comparison_pages
ChatGPTEnable or disable a durable draft's comparison pages, the SERP pages its SEO insights are computed against. First read the candidates by reading the draft's content brief insights with insights=[COMPARISON_PAGES], present the pages the user wants to change, and confirm the change with the user before calling. Send only the change: URLs to disable and previously disabled URLs to enable, copied exactly from comparisonPages.pages[].url; every other page keeps its state. At least minEnabled (7) collected pages must stay enabled, and a page whose status is FAILED cannot be enabled; a rejected change returns the reason with the valid candidate URLs or the currently enabled set. A change that alters nothing returns status NO_CHANGE and starts nothing. Otherwise the call saves the page set and, by default, starts an insights refresh against it: poll get_draft_progress with the returned draftId until terminal, then re-read the draft's content brief insights with insights=[COMPARISON_PAGES]. The refresh is rejected while another workflow on the draft is active.
update_content_brief_insights
ChatGPTUpsert one to fifty explicit changes to editable insights on a durable draft. List-value insights support adding, hiding, revealing, and deleting values; scalar-target insights support replacement through changeValue. For example, an objective replacement uses insightType OBJECTIVE_INSIGHT, changeType UPDATED, and the replacement text in changeValue. Primary and secondary keyword insights are read-only. Changes targeting BODY_CONTENT_COMMON or CONTENT_ANALYSIS_INSIGHT are applied to both insight types. Re-read get_content_brief_insights with detail=full after success to verify every persisted change.
update_content_profile
ChatGPTReplace one account-owned Content Profile. Supply the complete desired name, voice, audience, description, and language-rule set because omitted optional fields are cleared by this PUT.
update_draft_content
ChatGPTSave one or more explicitly requested draft content fields: draftTitle, title, metaDescription, or canonical HTML bodyCopy. Use this after the user asks to apply copy written in the conversation; do not leave requested artifact changes only in chat. Do not save unapproved brainstorming or read-only suggestions. Pass both last-read revision values to reject stale edits, including during mixed-version deployments. The service rejects a request with no content field.
update_draft_internal_links
ChatGPTPersist explicitly selected internal-link candidates into a saved draft's HTML without sending bodyCopy. Prefer this after suggest_internal_links once the user picks exact candidates. Pass the suggestion response's updated and contentVersion as expectedUpdated and expectedContentVersion, and include each reviewed anchorText, context, and url. The server locates those spans in stored HTML and wraps them. HTTP 409 means the draft changed — call suggest_internal_links again before retrying.
add_knowledge_source
Claudeai_brand_insights
Claudeai_citation_insights
Claudeai_query_fan_out_insights
Claudecreate_content_brief
Claudecreate_content_profile
Claudegenerate_draft_content
Claudeget_content_brief_insights
Claudeget_content_profile
Claudeget_content_score
Claudeget_draft
Claudeget_draft_progress
Claudeget_knowledge_source
Claudekeyword_insights
Claudelist_content_profiles
Claudelist_drafts
Claudelist_knowledge_sources
Claudepages_detail
Claudepages_discovery
Claudepages_trends
Claudesuggest_internal_links
Claudesuggest_title_and_meta_descriptions
Claudetracked_configs
Claudeupdate_comparison_pages
Claudeupdate_content_brief_insights
Claudeupdate_content_profile
Claudeupdate_draft_content
Claudeupdate_draft_internal_links
Claude