Input schema
{
"type": "object",
"properties": {
"brand_id": {
"type": "string",
"description": "The UUID of the brand (optional, defaults to current brand)"
},
"start_date": {
"type": "string",
"description": "Start date (YYYY-MM-DD). Omitted dates are resolved server-side from MCP context date_range_preset + reference_end_date, or from lookback_days when provided."
},
"end_date": {
"type": "string",
"description": "End date (YYYY-MM-DD). Omitted dates are resolved server-side from MCP context date_range_preset + reference_end_date, or from lookback_days when provided; otherwise defaults to the server's last complete day (yesterday)."
},
"lookback_days": {
"type": "integer",
"minimum": 1,
"maximum": 365,
"description": "Inclusive lookback window in days (language-agnostic). Ends at reference_end_date from MCP context when available (last available data day / lastRunDate), otherwise at the server's last complete day (yesterday). When set, overrides start_date/end_date. Prefer this alone for relative periods such as 'last 30 days' \u2014 omit start_date and end_date."
},
"topic_id": {
"type": "string",
"description": "Filter by topic ID (UUID). PREFERRED over search when filtering by topic - use this when you have topic_id from getTopics or user message."
},
"prompt_id": {
"type": "string",
"description": "Filter by prompt ID(s). Can be a single UUID or comma-separated list of UUIDs. Use this to get citations for specific prompts (e.g., prompts in a cluster)."
},
"persona_id": {
"type": "string",
"description": "Filter by Prompt Studio persona UUID (restricts to that persona's assigned active regular prompts)."
},
"funnel": {
"type": "string",
"enum": [
"awareness",
"consideration",
"conversion"
],
"description": "Filter by funnel stage"
},
"platform": {
"type": "string",
"description": "Filter by AI platform (e.g., 'chatgpt', 'gemini', 'perplexity', 'grok', 'copilot', 'openai', 'google-ai-mode', 'googleaioverview'). Common values: chatgpt, gemini, perplexity, grok, copilot, googleaioverview"
},
"platforms": {
"type": "string",
"description": "Filter by multiple AI platforms in one query (comma-separated, e.g. 'chatgpt,gemini,google-ai-mode'). Prefer over repeated single-platform calls."
},
"per_platform_url_cap": {
"type": "integer",
"description": "With multi-platform platforms filter, keep only the top N citation URLs per platform before merging across platforms. Used by OffSite earned-media analysis to preserve legacy per-platform top-N semantics in one query."
},
"model": {
"type": "string",
"description": "Filter by AI model name (e.g., 'gpt-5', 'gpt-5-t-mini', 'gemini-3.5-flash', 'grok-3', 'grok-4-auto', 'perplexity'). Model names vary by platform"
},
"media_type": {
"type": "string",
"enum": [
"Reference & Informational",
"Public & Institutional",
"Competitor",
"Earned Media",
"Commercial Media",
"Owned Media",
"Shared Media"
],
"description": "Filter by media type. Valid values: 'Reference & Informational' (reference sites, informational content), 'Public & Institutional' (public institutions, government sites), 'Competitor' (competitor websites), 'Earned Media' (unpaid media coverage like press mentions, reviews, articles), 'Commercial Media' (commercial/advertising media), 'Owned Media' (content you own/control like your website, blog), 'Shared Media' (shared/social platforms)"
},
"is_mentioning_brand": {
"type": "string",
"enum": [
"true",
"false",
"unknown"
],
"description": "Filter citations by whether the URL mentions the brand. 'true' = only URLs that mention the brand; 'false' = only URLs that do not mention the brand; 'unknown' = only URLs where brand mention status is unknown. Omit to return all citations."
},
"favorite_competitor_mentioned_not_brand": {
"type": "string",
"enum": [
"true",
"false"
],
"description": "Filter by competitor-only: 'true' = only URLs where a favorite competitor is mentioned in scraped content but the brand is not; 'false' = only URLs that do not match that. Response fields isMentioningAnyFavoriteCompetitor and isFavoriteCompetitorMentionedNotBrand may be null until backend data is available."
},
"exclude_domains": {
"type": "string",
"description": "Exclude citations from these domains. Comma-separated list of domain names (e.g. 'example.com, foo.org'). Case-insensitive."
},
"lens_competitor_name": {
"type": "string",
"description": "Competitor Lens: analyze this competitor instead of the monitored brand, keeping every other filter identical (same scope as the webapp's Competitor Lens selector). Accepts the competitor's name or any of its aliases, case-insensitive. Use getCompetitorMetrics to list the brand's competitors. Omit to analyze the brand itself."
},
"domain": {
"type": "string",
"description": "Filter URL rows to a specific domain (case-insensitive, supports apex/subdomain matching in backend)."
},
"view": {
"type": "string",
"enum": [
"urls",
"domains"
],
"description": "Result mode: 'urls' (default) for URL-level rows, or 'domains' for grouped domain rows."
},
"search": {
"type": "string",
"description": "Search query for URL or title text. Use ONLY when you don't have topic_id or prompt_id filters available. Prefer ID-based filters (topic_id, prompt_id) over search when possible."
},
"include_total": {
"type": "boolean",
"description": "When true (default in backend), include totalCount in pagination metadata."
},
"count_only": {
"type": "boolean",
"description": "When true, only returns pagination totals (no data rows). Useful to fetch counts quickly."
},
"page": {
"type": "number",
"description": "Page number for pagination"
},
"page_size": {
"type": "number",
"description": "Number of citations per page. Maximum allowed is 200 to prevent token limit issues. Use values up to 200 when user wants comprehensive data, 'all' results, or analysis of top/most items. Default is 50."
},
"sort_by": {
"type": "string",
"enum": [
"url",
"domain",
"mediaType",
"title",
"citationsCount",
"domainCitationCount",
"domainUrlCount",
"isMentioningBrand",
"isFavoriteCompetitorMentionedNotBrand",
"domainBrandMentions",
"domainCompetitorOnlyMentions",
"domainCompetitorOnlyPresence",
"shareOfCitation",
"shareOfCitationDomain",
"promptsImpactedByUrl",
"promptsImpactedByDomain",
"lastSeenAt",
"firstSeenAt"
],
"description": "Field to sort by. ALWAYS use appropriate sorting based on query intent: 'citationsCount' for most/least cited (with order='desc' for most, order='asc' for least), 'domainBrandMentions' for most/least URLs mentioning brand per domain (with order='desc' for most, order='asc' for least), 'shareOfCitation' for highest/lowest share (with order='desc' for highest, order='asc' for lowest), 'lastSeenAt' for recent/oldest (with order='desc' for recent, order='asc' for oldest), 'firstSeenAt' for earliest/latest first appearance (with order='asc' for earliest, order='desc' for latest), 'isFavoriteCompetitorMentionedNotBrand' for competitor-only flag, 'url' or 'domain' for alphabetical (with order='asc'). NEVER rely on defaults - always specify sort_by and order. Valid values: url, domain, mediaType, title, citationsCount, domainCitationCount, isMentioningBrand, isFavoriteCompetitorMentionedNotBrand, domainBrandMentions, shareOfCitation, shareOfCitationDomain, promptsImpactedByUrl, promptsImpactedByDomain, lastSeenAt, firstSeenAt"
},
"order": {
"type": "string",
"enum": [
"asc",
"desc"
],
"description": "Sort order: 'asc' for ascending or 'desc' for descending. ALWAYS specify: Use 'desc' for top/most/highest/recent, 'asc' for least/lowest/oldest/alphabetical. Must ALWAYS be provided when sort_by is used - never rely on defaults."
},
"include_prompt_ids": {
"type": "boolean",
"description": "When true and prompt_id is set, response includes promptIds (array of prompt UUIDs) per citation row for client-side batching (e.g. split citations by cluster)."
}
},
"required": []
}