Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the Pendo MCP server

Vendor MCP
Open markdown

The Pendo MCP connector routes your AI agent's tool calls to Pendo's own MCP server through Scalekit. Each user signs in to Pendo once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 52 tools.

Tools
52
What they doRead · write · destructive
45 · 7 · 045 read7 write0 destructive
Users sign in with
OAuth app
Scalekit's or your own

What you can do

  • Analyze product usage: measure page, feature, and track event usage over time, rank them, and calculate the Product Engagement Score
  • Track retention and funnels: build retention curves, count new users, and measure conversion through step-by-step funnels
  • Measure guide performance: rank in-app guides by usage and read poll responses and per-visitor guide views
  • Explore visitors and accounts: list visitors and accounts by segment, search accounts by name, and view metadata fields
  • Analyze AI agent conversations: review key metrics, detected issues, and use cases for AI agents deployed in an app

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Create the Pendo MCP connection

    In AgentKit > Connections, create a Pendo MCP connection. The name you give it is the connection_name your code passes. See Configure connections.

    Scalekit credentials are available for Pendo MCP server, so you don't need to register an OAuth app.

  4. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'pendomcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Pendo MCP:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'pendomcp_listallapplications',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • pendomcp_accountmetadataschemaReturn the set of metadata fields available for accounts.Read-only

    AccountMetadataSchema

    Return the set of metadata fields available for accounts.

    Inputs

    subIdstringrequired
    Subscription ID that owns the data. Required for all queries.
    userQuerystring
    The original user query or question that triggered this tool call.
  • pendomcp_acquisitiontrendCount new visitors or accounts per period - users whose first-ever interaction with the app (scope='app'), a specific page or feature (scope='page' or 'feature'), or a track event (scope='trackEvent') falls within the analysis window.Read-only

    acquisitionTrend

    Count new visitors or accounts per period - users whose first-ever interaction with the app (scope='app'), a specific page or feature (scope='page' or 'feature'), or a track event (scope='trackEvent') falls within the analysis window. 'New' means firstTime within the window; this measures acquisition, not retention. The window is the most recent periodCount periods of size periodType (e.g. the last 6 months). Cohorts are returned oldest to newest. USE FOR: Growth and acquisition questions - e.g. 'how many new accounts did we gain last month?', 'what's our new visitor trend?'. EXAMPLES: - How many new accounts did we gain last month? - What's our new visitor trend over the last 6 months? - How many new users signed up this quarter? - Show me account acquisition for this feature over the last 8 weeks RETURNS: - scope, entityId, unit, periodType: echoed query parameters - acquisition: list of {cohortLabel, newCount} per period, sorted oldest to newest - summary: {totalNew, peakCohort, peakCount}

    Inputs

    appIdstringrequired
    Application ID to scope the request.
    subIdstringrequired
    Subscription ID that owns the data. Required for all queries.
    entityIdstring
    Pendo entity id. Required when scope is 'page', 'feature', or 'trackEvent'; ignored for 'app'.
    includeAnonymousboolean
    Whether to include anonymous visitors. Defaults to false.default false
    periodCountnumber
    Number of periods in the analysis window. Defaults to 6. The window may not exceed ~1 year: max 366 for 'day', 52 for 'week', 12 for 'month'.default 6
    periodTypestring
    Period granularity. Defaults to 'month'.one of dayweekmonth
    scopestring
    'app' for app-level acquisition, or 'page', 'feature', or 'trackEvent' for entity-level. Defaults to 'app'.one of apppagefeaturetrackEvent
    segmentPipelinestring
    Optional inline segment scope that yields visitorId rows. Accepted string shapes: 1. A saved segment ID string, embedded as {id: <segmentId>}. 2. A JSON string containing a full inline pipeline produced by the buildPendoSegment tool, you must not attempt to make this field up, only pass the result of the buildPendoSegment tool. You can pass the entire `pipeline` VERBATIM from the buildPendoSegment tool.
    unitstring
    Count individual visitors or accounts. Defaults to 'visitor'.one of visitoraccount
    userQuerystring
    Optional short summary (under 20 words) of the Pendo task this call addresses, written in your own words, for usage analytics. Example: "Compare weekly active visitors for the Billing app".
  • pendomcp_agentanalyticsconversationanalysisLists and ranks individual AI agent conversations with per-conversation metrics.Read-only

    agentAnalyticsConversationAnalysis

    Lists and ranks individual AI agent conversations with per-conversation metrics. Returns one row per conversation with: conversationId, visitorId, accountId, startTime, numRagePrompts, numErrors, and firstPromptContent. Supports filtering to a specific set of conversations and sorting by rage prompt count, error count, or date. USE FOR: Drilling down from aggregate metrics to individual conversation-level investigation - surfacing which specific conversations are driving a metric such as a high rage-prompt rate. When conversationIds are provided, the list is narrowed to a specific cluster (e.g. conversations associated with a detected issue or a use case). EXAMPLES: - Show me the conversations with the most rage prompts for my chat agent - Which conversations had the most errors this week? - List the most recent conversations for agent X - Show me these specific conversations: [id1, id2, id3] NOT FOR: Aggregate volume metrics for an agent. Diagnosing an issue cluster (explanations, tools invoked, response patterns). Discovering or clustering use cases. RETURNS: - [conversations]: one row per conversation with conversationId, visitorId, accountId, startTime, numRagePrompts, numErrors, firstPromptContent. The maximum time range for this tool is 90 days.

    Inputs

    agentIdstringrequired
    The AI agent ID. Used to scope the lookup to the correct agent.
    appIdstringrequired
    Application ID to scope the request.
    dateRangeobjectrequired
    Time window. For a rolling window use type='relative' with lastNDays. For a fixed calendar range use type='absolute' with startDate and endDate in YYYY-MM-DD.
    subIdstringrequired
    Subscription ID that owns the data. Required for all queries.
    conversationIdsarray
    Optional list of conversation IDs to filter to. When provided, only these conversations are returned - use to scope to a specific cluster of related conversations.
    limitnumber
    Maximum number of conversations to return. Range: 1-500. Default: 50.default 50
    segmentPipelinestring
    Optional inline segment scope that yields visitorId rows. Accepted string shapes: 1. A saved segment ID string, embedded as {id: <segmentId>}. 2. A JSON string containing a full inline pipeline produced by the buildPendoSegment tool, you must not attempt to make this field up, only pass the result of the buildPendoSegment tool. You can pass the entire `pipeline` VERBATIM from the buildPendoSegment tool.
    sortBystring
    Field to sort conversations by (descending). ragePromptCount: most rage prompts first. errorCount: most errors first. first: most recent conversations first (by conversation start time).one of ragePromptCounterrorCountfirstdefault ragePromptCount
    userQuerystring
    Optional short summary (under 20 words) of the Pendo task this call addresses, written in your own words, for usage analytics. Example: "Compare weekly active visitors for the Billing app".
  • pendomcp_agentanalyticsissueanalysisRequires startDate and endDate (YYYY-MM-DD); there is no default range.Read-only

    agentAnalyticsIssueAnalysis

    Requires startDate and endDate (YYYY-MM-DD); there is no default range. Returns issue diagnoses, flagged response tool/model usage, and user prompt content for the events of a specific detected issue cluster in AI Agent Analytics. Executes a single aggregation with two parallel spawn branches: (1) agenticConversationEvents filtered by conversationIds - deduplicated visitorIds/accountIds and sampled explanations; (2) agenticEvents - tools/models from flagged response eventIds, and prompt content from issue conversationIds. USE FOR: Diagnosing a specific detected issue cluster when agentId, conversationIds, and eventIds are already known. Use when the user wants to understand why conversations were flagged, see patterns in user prompts that triggered the issue, or identify which tools and models were involved in the flagged responses. EXAMPLES: - What patterns exist among instances of the 'incorrect answers' issue? - Which tools were called in instances of the 'timeout error' issue? - Show me what users said in conversations flagged as the 'authentication failure' issue - Why does the 'formatting problem' issue keep occurring in my agent? NOT FOR: Discovering or listing issue clusters (this tool diagnoses a cluster whose conversationIds and eventIds are already provided). Aggregate volume metrics for an agent. Topic analysis or use-case clustering of conversations (this tool is scoped to a single detected issue, not to open-ended topic modeling). RETURNS: - Four labeled CSV sections: - [issue_instances]: visitorIds, accountIds - one summary row with deduplicated lists. - [explanations]: explanation - one row per sampled issue explanation (capped for MCP size). - [flagged_response_events]: issueToolsUsed, issueModelsUsed - one summary row with deduplicated lists. - [user_prompts]: content - one row per sampled user prompt message (capped for MCP size). The maximum time range for this tool is 90 days.

    Inputs

    agentIdstringrequired
    The AI agent ID. Used to scope the lookup to the correct agent.
    appIdstringrequired
    Application ID to scope the request.
    conversationIdsarrayrequired
    List of conversation IDs belonging to the issue cluster to diagnose.
    endDatestringrequired
    Query end date in YYYY-MM-DD format (e.g., '2025-01-31'). Inclusive.
    eventIdsarrayrequired
    List of event IDs belonging to the issue cluster to diagnose - the agent response event IDs flagged as instances of this issue.
    startDatestringrequired
    Query start date in YYYY-MM-DD format (e.g., '2025-01-01'). Inclusive.
    subIdstringrequired
    Subscription ID that owns the data. Required for all queries.
    segmentPipelinestring
    Optional inline segment scope that yields visitorId rows. Accepted string shapes: 1. A saved segment ID string, embedded as {id: <segmentId>}. 2. A JSON string containing a full inline pipeline produced by the buildPendoSegment tool, you must not attempt to make this field up, only pass the result of the buildPendoSegment tool. You can pass the entire `pipeline` VERBATIM from the buildPendoSegment tool.
    userQuerystring
    Optional short summary (under 20 words) of the Pendo task this call addresses, written in your own words, for usage analytics. Example: "Compare weekly active visitors for the Billing app".
  • pendomcp_agentanalyticskeymetricsReturns key aggregate metrics for AI agent conversations with period-over-period comparison.Read-only

    agentAnalyticsKeyMetrics

    Returns key aggregate metrics for AI agent conversations with period-over-period comparison. Includes: conversations, visitors, accounts, prompts, rage prompt rates (per-prompt and per-conversation), visitorIds, accountIds, and visitor retention. All metrics include previous-period equivalents for trend analysis. USE FOR: Getting a high-level summary of AI agent usage and engagement. Use when the user asks about overall agent performance, conversation volume, visitor engagement, rage prompt rates, or retention for a specific agent. EXAMPLES: - How many conversations has my ABC agent had in the last 30 days? - What is the rage prompt rate for Acme agent this month? - Show me key metrics and trends for my chat agent over the past 2 weeks. - How many unique visitors have used my chat agent recently? NOT FOR: Use listUseCases for topic/cluster analysis. Use listAiAgentIssues for issue detection. Use listAiAgents to get agent IDs and names first when the user has not specified an agent. RETURNS: - Current period: numConversations, numPrompts, numVisitors, numAccounts, numRagePrompts, ragePromptsRate, ragePromptsConversationRate, retention (retentionRate, retained, visitors), visitorIds, and accountIds. - Previous period (same duration, immediately prior): prevNumConversations, prevNumPrompts, prevNumVisitors, prevNumAccounts, prevNumRagePrompts, prevRagePromptsRate, prevRagePromptsConversationRate, prevRetention. - Also includes conversationsWithRagePrompts and prevConversationsWithRagePrompts. The maximum time range for this tool is 90 days.

    Inputs

    agentIdstringrequired
    Required. The AI agent ID to get metrics for (from listAiAgents).
    endDatestringrequired
    Query end date in YYYY-MM-DD format (e.g., '2025-01-31'). Inclusive.
    startDatestringrequired
    Query start date in YYYY-MM-DD format (e.g., '2025-01-01'). Inclusive.
    subIdstringrequired
    Subscription ID that owns the data. Required for all queries.
    appIdstring
    Optional application ID to filter by. If omitted, includes all applications the user can access.
    segmentPipelinestring
    Optional inline segment scope that yields visitorId rows. Accepted string shapes: 1. A saved segment ID string, embedded as {id: <segmentId>}. 2. A JSON string containing a full inline pipeline produced by the buildPendoSegment tool, you must not attempt to make this field up, only pass the result of the buildPendoSegment tool. You can pass the entire `pipeline` VERBATIM from the buildPendoSegment tool.
    userQuerystring
    Optional short summary (under 20 words) of the Pendo task this call addresses, written in your own words, for usage analytics. Example: "Compare weekly active visitors for the Billing app".
  • pendomcp_agentanalyticstrackedissueanalysisDeep-dives into a single tracked issue in AI Agent Analytics for a specific AI agent, surfacing the visitors and accounts, sampled issue explanations from detected issue clusters, the tools and models the agent invoked, and a sample of the user prompts associated with the tracked issue.Read-only

    agentAnalyticsTrackedIssueAnalysis

    Deep-dives into a single tracked issue in AI Agent Analytics for a specific AI agent, surfacing the visitors and accounts, sampled issue explanations from detected issue clusters, the tools and models the agent invoked, and a sample of the user prompts associated with the tracked issue. USE FOR: Deep-diving into a specific tracked issue - call directly if agentId is known and conversationIds, eventIds, and trackedIssueId are passed. Use when the user wants to understand what prompts users sent for a tracked problem, which tools and models the agent invoked, or which visitors and accounts are associated with a tracked issue. EXAMPLES: - What are users actually saying when they hit the 'incorrect answer' tracked issue? - Which tools does my agent use when the 'timeout error' tracked issue occurs? - Who are the visitors affected by this tracked issue? - Show me sample prompts from this tracked issue. NOT FOR: Aggregate volume metrics, or diagnosing detected (auto-clustered) issues rather than a specific tracked issue. RETURNS: - Four labeled CSV sections: - [tracked_issue_summary]: visitorIds, accountIds - one summary row with deduplicated lists. - [explanations]: explanation - one row per sampled issue explanation from detected issue clusters (capped for MCP size). - [tools_used]: toolsUsed, modelsUsed - one summary row with deduplicated lists. - [prompt_samples]: content - one row per sampled user prompt message (capped for MCP size). The maximum time range for this tool is 90 days.

    Inputs

    agentIdstringrequired
    The AI agent ID. Used to scope the lookup to the correct agent.
    appIdstringrequired
    Application ID to scope the request.
    conversationIdsarrayrequired
    List of conversation IDs for the tracked issue.
    dateRangeobjectrequired
    Time window. For a rolling window use type='relative' with lastNDays. For a fixed calendar range use type='absolute' with startDate and endDate in YYYY-MM-DD.
    eventIdsarrayrequired
    List of event IDs for the tracked issue (prompt-type events).
    namestringrequired
    The tracked issue name.
    subIdstringrequired
    Subscription ID that owns the data. Required for all queries.
    trackedIssueIdstringrequired
    The tracked issue ID to analyze.
    segmentPipelinestring
    Optional inline segment scope that yields visitorId rows. Accepted string shapes: 1. A saved segment ID string, embedded as {id: <segmentId>}. 2. A JSON string containing a full inline pipeline produced by the buildPendoSegment tool, you must not attempt to make this field up, only pass the result of the buildPendoSegment tool. You can pass the entire `pipeline` VERBATIM from the buildPendoSegment tool.
    userQuerystring
    Optional short summary (under 20 words) of the Pendo task this call addresses, written in your own words, for usage analytics. Example: "Compare weekly active visitors for the Billing app".
  • pendomcp_agentanalyticstrackedusecaseanalysisDeep-dives into a single tracked use case in AI Agent Analytics for a specific AI agent, surfacing the visitors and accounts, the tools and models the agent invoked, sampled explanations, and a sample of the user prompts associated with the tracked use case.Read-only

    agentAnalyticsTrackedUseCaseAnalysis

    Deep-dives into a single tracked use case in AI Agent Analytics for a specific AI agent, surfacing the visitors and accounts, the tools and models the agent invoked, sampled explanations, and a sample of the user prompts associated with the tracked use case. USE FOR: Deep-diving into a specific tracked use case - call directly if agentId is known and conversationIds, eventIds, and trackedUseCaseId are passed. Use when the user wants to understand what prompts users sent for a tracked topic, which tools and models the agent invoked, or which visitors and accounts are associated with a tracked use case. EXAMPLES: - What are users actually asking in the 'dashboard help' tracked use case? - Which tools does my agent use when handling this tracked use case? - Who are the visitors in this tracked use case? - Show me sample prompts from this tracked use case. NOT FOR: Aggregate volume metrics across use cases, or issue diagnosis - this tool deep-dives a single tracked use case. RETURNS: - Four labeled CSV sections: - [tracked_use_case_summary]: visitorIds, accountIds - one summary row with deduplicated lists. - [explanations]: explanation - one row per sampled explanation (capped for MCP size). - [tools_used]: toolsUsed, modelsUsed - one summary row with deduplicated lists. - [prompt_samples]: content - one row per sampled user prompt message (capped for MCP size). The maximum time range for this tool is 90 days.

    Inputs

    agentIdstringrequired
    The AI agent ID. Used to scope the lookup to the correct agent.
    appIdstringrequired
    Application ID to scope the request.
    conversationIdsarrayrequired
    List of conversation IDs for the tracked use case.
    dateRangeobjectrequired
    Time window. For a rolling window use type='relative' with lastNDays. For a fixed calendar range use type='absolute' with startDate and endDate in YYYY-MM-DD.
    eventIdsarrayrequired
    List of event IDs for the tracked use case (prompt-type events).
    subIdstringrequired
    Subscription ID that owns the data. Required for all queries.
    trackedUseCaseIdstringrequired
    The tracked use case ID to filter subrows.
    segmentPipelinestring
    Optional inline segment scope that yields visitorId rows. Accepted string shapes: 1. A saved segment ID string, embedded as {id: <segmentId>}. 2. A JSON string containing a full inline pipeline produced by the buildPendoSegment tool, you must not attempt to make this field up, only pass the result of the buildPendoSegment tool. You can pass the entire `pipeline` VERBATIM from the buildPendoSegment tool.
    userQuerystring
    Optional short summary (under 20 words) of the Pendo task this call addresses, written in your own words, for usage analytics. Example: "Compare weekly active visitors for the Billing app".
  • pendomcp_aggregateentityusageRank pages, features, or track events against each other by aggregate usage over a date range.Read-only

    aggregateEntityUsage

    Rank pages, features, or track events against each other by aggregate usage over a date range. This is a cross-entity ranking tool, not a lookup or single-entity analytics tool: it cannot filter by entity name or ID, and its limited result set may omit a requested named entity even when that entity exists. Where entityUsage returns per-visitor rows for a single known entity, this tool returns one row per entity showing how an entire cohort (optionally scoped by a segment) uses every page, feature, or track event. Each row has entityId, entityName, appId, totalEvents, uniqueVisitors, and uniqueAccounts. totalEvents is the activity count for that entity: page VIEWS for pages, CLICKS for features, and event counts for track events - describe it with the term that matches the entity type. Pages and features also add totalErrorClickCount / totalRageClickCount / totalDeadClickCount; pages also add totalUTurnCount and avgTimePerVisitor. Track events have no frustration data. For features, pageId restricts the ranking to features associated with one known page. By default only entities with activity in the window are returned (sort ascending for least-used among used). Set includeUnused=true to also return entities with zero usage (zero-filled rows) - answering 'which entities get no use at all', or, when a segmentPipeline is supplied, 'which entities get no use from that segment'. COMPARISON MODE: supply compareToDateRange to rank entities by how their usage CHANGED between two periods - dateRange is the current/recent period, compareToDateRange is the earlier baseline. The headline metrics (totalEvents, uniqueVisitors, uniqueAccounts) are returned as current_<m>, prior_<m>, change_<m> (current - prior) and pctChange_<m>; the remaining metrics (frustration counts, avgTimePerVisitor) are returned as change_<m> only to keep rows compact. Sort by a change_ field (ascending = biggest drop-off, descending = biggest growth). This answers 'which pages dropped off the most' in one call - the ranking is done in the aggregation, so no per-entity cross-referencing is needed. includeUnused is ignored when comparing. USE FOR: Ranking or comparing entities of one type by usage - e.g. top pages by views, most-clicked features, most-clicked features associated with a page, least-used track events. With includeUnused=true, finding entirely unused entities (dead pages/features), optionally scoped to a segment. With compareToDateRange, ranking entities by period-over-period change - biggest drop-offs or biggest gainers. EXAMPLES: - Top 5 features by clicks last month - Which page had the most views in the last 30 days? - Which features have the most rage clicks this quarter? - Which features associated with page X were clicked most in the last 30 days? - Least-used track events over the last week - Which pages got no views at all in the last 30 days? - Which features were never used by visitors in segment X last month? - Which pages in product area X have zero activity from visitors in segment Y? - Which pages dropped off in usage the most this month versus last month? - Which features grew the most in the last 30 days compared to the prior 30 days? NOT FOR: Questions about the views, clicks, visitors, accounts, or other usage of one entity identified by name, such as 'How many people viewed Page X?'. A named entity missing from this ranked output is not evidence that it does not exist. WORKFLOW: For usage analytics about one named page, feature, or track event, call listCountables to resolve the name to an entity ID, then use entityUsage with that ID. Use aggregateEntityUsage only when the user asks to rank or compare multiple entities. RETURNS: - meta.dateRange: resolved startDate and endDate (YYYY-MM-DD); meta.compareToDateRange when comparing - rows: one per entity with entityId, entityName, appId, totalEvents (page views / feature clicks / track-event counts), uniqueVisitors, uniqueAccounts (pages/features also: totalErrorClickCount, totalRageClickCount, totalDeadClickCount; pages also: totalUTurnCount, avgTimePerVisitor). With includeUnused=true, unused entities appear with all-zero metrics. In comparison mode the headline metrics (totalEvents, uniqueVisitors, uniqueAccounts) are split into current_<m>, prior_<m>, change_<m> and pctChange_<m>, while the other metrics (frustration counts, avgTimePerVisitor) carry change_<m> only. Prefer change_ for mover/drop-off rankings (pctChange is noisy on small baselines and null when prior is 0).

    Inputs

    dateRangeobjectrequired
    Time window. For a rolling window use type='relative' with lastNDays. For a fixed calendar range use type='absolute' with startDate and endDate in YYYY-MM-DD.
    entityTypestringrequired
    The kind of entity: 'page', 'feature', or 'trackEvent'. Required for an unscoped ranking, where there are no ids to carry the type. Ignored when productArea uses inline entities, because each entry names its own type.one of pagefeaturetrackEvent
    subIdstringrequired
    Subscription ID that owns the data. Required for all queries.
    appIdstring
    Optional application ID to filter by. If omitted, includes all applications the user can access.
    compareToDateRangeobject
    Optional baseline period for a period-over-period comparison. When supplied, dateRange is treated as the current/recent period and this as the earlier baseline; results are ranked by how each entity's usage changed (change = current - prior). Same shape as dateRange. A relative baseline (type='relative', lastNDays) is the N days IMMEDIATELY BEFORE dateRange - not the last N days from today - so type='relative' lastNDays=30 on both ranges means 'last 30 days vs the prior 30 days'. Use absolute dates for a fixed baseline such as the same month last year. Omit for a single-period ranking.
    includeAnonymousboolean
    Whether to include unidentified visitors in the aggregates. Defaults to true.default true
    includeUnusedboolean
    When true, additionally include entities with zero usage in the window. Use to find entirely unused entities - e.g. 'which pages got no views'. When a segmentPipeline is supplied, the segment scopes the usage measured, so a zero row means 'unused by that segment' regardless of other visitors. Defaults to false (only entities with activity). Ignored in comparison mode (compareToDateRange already returns every entity active in either period, including drop-offs to zero and arrivals from zero). With a single-type inline productArea it zero-fills the entities in that scope, which is the reliable way to ask which of a named set had no use at all - absence from ordinary rows can also mean the entity fell outside limit. Rejected with minEvents, and rejected when productArea spans more than one entityType.default false
    limitnumber
    Maximum number of entity rows to return (1-200, default 10).default 10
    minEventsnumber
    Only count visitors whose own event total across the entities in scope reaches this number. The total is summed over the WHOLE scoped set, not per entity: with two inline ids a visitor with 1 event on A and 1 on B has a total of 2 and qualifies at minEvents=2, even though they clear it on neither entity alone. It is summed across entity types too when the bundle spans them, so one page VIEW plus one feature CLICK likewise totals 2 - that is what 'used this tier at least twice' asks for, but it is adding events of different kinds together, so say so when reporting a mixed-type threshold. The summary counts each qualifying visitor once; the rows then show how those visitors' events break down per entity. This counts events, not visits - several events can happen within one visit, so it does not measure returning or repeat visitors. It is always a threshold on visitors, never on accounts. Omit to count every active visitor. Not supported with includeUnused.
    pageIdstring
    Optional page ID. Restricts the ranking to features associated with this page, so the scope has to be features only: valid with entityType='feature', or with an inline productArea whose only entry is a feature entry. Rejected when productArea spans more than one entityType.
    productAreaarray
    Optional scope narrowing the query to a group of entities. Accepts, in one array: 1. Saved product area ids, e.g. ["pa-123"] or ["pa-1", "pa-2"] - use whenever the group already exists in Pendo. Members are unioned, so an entity in several is counted once. Ids are never names: resolve an area name with listProductAreas first. 2. The single token ["*"] - every saved product area. This means "in ANY product area" and therefore EXCLUDES entities belonging to none; it is NOT the same as omitting this argument, which spans everything whether it is in an area or not. 3. An inline list of entities grouped by type, e.g. [{"entityType":"feature","ids":["A","B"]},{"entityType":"page","ids":["C"]}]. Use this for a group that is not saved in Pendo - for example the pages and features making up a pricing tier - and pass the WHOLE group in ONE call. A group may span types, which is why the type travels with the ids. Give each entityType at most once with a non-empty ids list. Ids are never names: resolve names with the relevant entity listing tool first. An id that does not resolve is rejected rather than silently contributing zero. Saved area ids and inline entries cannot be mixed in the same array. Omit the argument entirely to leave the query unscoped.
    segmentPipelinestring
    Optional inline segment scope that yields visitorId rows. Accepted string shapes: 1. A saved segment ID string, embedded as {id: <segmentId>}. 2. A JSON string containing a full inline pipeline produced by the buildPendoSegment tool, you must not attempt to make this field up, only pass the result of the buildPendoSegment tool. You can pass the entire `pipeline` VERBATIM from the buildPendoSegment tool.
    sortBystring
    Field to sort results by. All entity types support 'totalEvents' (page views / feature clicks / track-event counts), 'uniqueVisitors', 'uniqueAccounts'. When productArea spans entity types only those three (or their comparison-mode prefixed forms) are accepted, since the rest are not reported for every type. Pages and features also support 'totalErrorClickCount', 'totalRageClickCount', 'totalDeadClickCount'. Pages also support 'totalUTurnCount' and 'avgTimePerVisitor'. Defaults to 'totalEvents'. In comparison mode (compareToDateRange supplied) sort by a prefixed column instead. The headline metrics (totalEvents, uniqueVisitors, uniqueAccounts) accept 'current_<field>', 'prior_<field>', 'change_<field>', or 'pctChange_<field>' (e.g. 'change_totalEvents', 'current_uniqueVisitors'); the other metrics (frustration counts, avgTimePerVisitor) accept 'change_<field>' only (e.g. 'change_totalRageClickCount'). Combine with sortOrder='asc' for biggest drop-offs or 'desc' for biggest gains. PREFER 'change_<field>' (absolute change) for 'biggest mover / drop-off / gainer' questions: it is self-normalising. Use 'pctChange_<field>' only when the user explicitly asks about percentage/rate of change, and be aware it is noisy on low-traffic entities (a 1->5 page reads as +400%) and is null when the prior period had zero activity (new entities). Default to 'change_totalEvents' when comparing.
    sortOrderstring
    'desc' (default, highest first - top/most used) or 'asc' (lowest first - least used).one of ascdescdefault desc
    userQuerystring
    Optional short summary (under 20 words) of the Pendo task this call addresses, written in your own words, for usage analytics. Example: "Compare weekly active visitors for the Billing app".