diff --git a/gatsby-config.js b/gatsby-config.js
index 166faf087..efad469bf 100644
--- a/gatsby-config.js
+++ b/gatsby-config.js
@@ -192,6 +192,7 @@ module.exports = {
.queries,
// for testing add dryRun as true,
// dryRun: true,
+ continueOnFailure: !process.env.ALGOLIA_ADMIN_KEY,
},
},
{
diff --git a/gatsby-node.js b/gatsby-node.js
index 3cb3567e4..98a9cf3a9 100644
--- a/gatsby-node.js
+++ b/gatsby-node.js
@@ -3,14 +3,123 @@ const {
DOC_NAV_PAGE_ID,
NOT_FOUND_PAGE_ID,
VERSION_DROPDOWN,
+ SITE_URL,
+ LLMS_SECTIONS,
} = require('./src/configs/doc-configs');
const { getDocLinkFromEdge } = require('./src/utils/gatsby-utils.js');
-exports.onPostBuild = () => {
+/* ── Build-time Markdown generation ───────────────────────────────────────
+ * For every asciidoc node, convert the already-generated HTML to clean
+ * Markdown using cheerio (DOM pre-processing) + turndown (HTML→MD).
+ * The result is stored as `fields.markdownBody` on each node and exposed
+ * in GraphQL so CopyPageDropdown can use it instead of scraping the DOM.
+ */
+exports.onCreateNode = ({ node, actions }) => {
+ if (node.internal.type !== 'Asciidoc') return;
+
+ const { createNodeField } = actions;
+ const TurndownService = require('turndown');
+ const cheerio = require('cheerio');
+
+ const html = node.html || '';
+ const title = node.document?.title || node.pageAttributes?.title || '';
+
+ /* Load HTML into cheerio for pre-processing */
+ const $ = cheerio.load(html, { decodeEntities: false });
+
+ /* Remove anchor icon links that Asciidoctor injects next to headings */
+ $('a.anchor').remove();
+
+ /* Remove the embedded TOC — it adds noise to Markdown */
+ $('#toc').remove();
+
+ /* Convert admonition tables to readable text blocks */
+ $('.admonitionblock').each((_, el) => {
+ const type = $(el).attr('class').match(/\b(note|tip|warning|caution|important)\b/i)?.[1]?.toUpperCase() || 'NOTE';
+ const content = $(el).find('td.content').text().trim();
+ $(el).replaceWith(`
${type}: ${content}
`);
+ });
+
+ /* Get the cleaned HTML */
+ const cleanedHtml = $('body').html() || '';
+
+ /* Configure turndown */
+ const td = new TurndownService({
+ headingStyle: 'atx',
+ bulletListMarker: '-',
+ codeBlockStyle: 'fenced',
+ fence: '```',
+ });
+
+ /* GFM table plugin — renders tables as proper Markdown pipe tables */
+ const { tables } = require('turndown-plugin-gfm');
+ td.use(tables);
+
+ const markdownBody = td.turndown(cleanedHtml);
+
+ createNodeField({
+ node,
+ name: 'markdownBody',
+ value: markdownBody,
+ });
+};
+
+exports.onPostBuild = async ({ graphql, reporter }) => {
fsExtra.copyFileSync(
`${__dirname}/robots.txt`,
`${__dirname}/public/robots.txt`,
);
+
+ try {
+ const result = await graphql(`
+ query {
+ allAsciidoc {
+ edges {
+ node {
+ document { title }
+ pageAttributes { pageid }
+ }
+ }
+ }
+ }
+ `);
+
+ if (result.errors) {
+ reporter.warn(`llms.txt generation: GraphQL errors — ${JSON.stringify(result.errors)}`);
+ return;
+ }
+
+ const pageMap = {};
+ result.data.allAsciidoc.edges.forEach(({ node }) => {
+ const pageid = node.pageAttributes?.pageid;
+ const title = node.document?.title;
+ if (pageid && title) pageMap[pageid] = title;
+ });
+
+ const lines = [
+ '# ThoughtSpot Developer Documentation',
+ '',
+ '> Developer documentation for ThoughtSpot Embedded — tools, APIs, and SDKs for embedding ThoughtSpot analytics into your applications.',
+ '',
+ ];
+
+ for (const section of LLMS_SECTIONS) {
+ lines.push(`## ${section.label}`);
+ for (const pageId of section.pageIds) {
+ const title = pageMap[pageId];
+ if (title) lines.push(`- [${title}](${SITE_URL}/${pageId})`);
+ }
+ lines.push('');
+ }
+
+ fsExtra.writeFileSync(
+ `${__dirname}/public/llms.txt`,
+ lines.join('\n'),
+ );
+ reporter.info(`llms.txt generated with ${Object.keys(pageMap).length} pages`);
+ } catch (err) {
+ reporter.warn(`llms.txt generation failed: ${err.message}`);
+ }
};
exports.createPages = async function ({ actions, graphql }) {
const { data } = await graphql(`
@@ -39,12 +148,23 @@ exports.createPages = async function ({ actions, graphql }) {
`);
const namePageIdMap = {};
+ // Collect per-category nav HTMLs keyed by category name (pageid minus 'nav-' prefix)
+ const navMap = {};
+ const NAV_PARTIAL_PREFIX = 'nav-';
+
data.allAsciidoc.edges.forEach((e) => {
const {
sourceInstanceName: sourceName,
relativePath: relPath,
} = e.node.parent;
const pageId = e.node.pageAttributes.pageid;
+
+ // Collect nav-* files into the navMap (not content pages)
+ if (pageId && pageId.startsWith(NAV_PARTIAL_PREFIX)) {
+ navMap[pageId.slice(NAV_PARTIAL_PREFIX.length)] = e.node.html;
+ return;
+ }
+
if (sourceName === 'tutorials') {
const relPathSplit = relPath.split('/');
const pageIdSplit = pageId.split('__');
@@ -66,13 +186,16 @@ exports.createPages = async function ({ actions, graphql }) {
data.allAsciidoc.edges.forEach((edge) => {
const { pageid: pageId } = edge.node.pageAttributes;
+ // Skip nav partial files — they are sidebar data, not content pages
+ if (pageId && pageId.startsWith(NAV_PARTIAL_PREFIX)) return;
+
const docPath = getDocLinkFromEdge(edge);
actions.createPage({
path: docPath,
component: require.resolve(
'./src/components/DevDocTemplate/index.tsx',
),
- context: { pageId, navId: DOC_NAV_PAGE_ID, namePageIdMap },
+ context: { pageId, navId: DOC_NAV_PAGE_ID, navMap, namePageIdMap },
});
if (pageId === 'introduction') {
@@ -81,7 +204,7 @@ exports.createPages = async function ({ actions, graphql }) {
component: require.resolve(
'./src/components/DevDocTemplate/index.tsx',
),
- context: { pageId, navId: DOC_NAV_PAGE_ID, namePageIdMap },
+ context: { pageId, navId: DOC_NAV_PAGE_ID, navMap, namePageIdMap },
});
}
});
diff --git a/modules/ROOT/pages/ai-integration-options.adoc b/modules/ROOT/pages/ai-integration-options.adoc
index 5e67530b7..ec760fd73 100644
--- a/modules/ROOT/pages/ai-integration-options.adoc
+++ b/modules/ROOT/pages/ai-integration-options.adoc
@@ -1,4 +1,4 @@
-= ThoughtSpot AI analytics integration
+= AI analytics integration
:toc: true
:toclevels: 3
diff --git a/modules/ROOT/pages/api-changelog.adoc b/modules/ROOT/pages/api-changelog.adoc
index 9c299b488..1a1338efd 100644
--- a/modules/ROOT/pages/api-changelog.adoc
+++ b/modules/ROOT/pages/api-changelog.adoc
@@ -19,6 +19,7 @@ The SDK includes the following new features and enhancements in Liveboard embedd
Continuous Liveboard layout in PDF downloads [beta betaBackground]^Beta^::
+
When set to `true`, the `isContinuousLiveboardPDFEnabled` enables the Liveboard tab to render on a single page that matches the exact UI layout you see in ThoughtSpot. This update addresses the issue where visualizations for PDF downloads were split across multiple A4 pages regardless of how they appear on screen. This feature is in beta and can be enabled by setting `isContinuousLiveboardPDFEnabled` to `true`.
New events and action IDs;;
@@ -99,6 +100,7 @@ The following events are deprecated and replaced with new event IDs.
* `Action.PersonalisedViewsDropdown`. Use `Action.PersonalizedViewsDropdown`.
* `Action.OrganiseFavourites`. Use `Action.OrganizeFavorites`.
+
|====
@@ -241,7 +243,7 @@ Is emitted when a saved chat is deleted.
* `EmbedEvent.SpotterConversationSelected` +
Is emitted when a saved chat is selected in the chat history sidebar.
-|[tag greenBackground]#NEW FEATURE# | `enableLinkOverridesV2` +
+|[tag greenBackground]#NEW FEATURE# | `enableLinkOverridesV2` +
Use this configuration setting to override ThoughtSpot URLs on hover or when opening in a new tab. This is recommended over the earlier `linkOverride` flag for a better user experience.
@@ -713,7 +715,7 @@ For more information about Spotter customization, see xref:embed-spotter.adoc#Sp
|[tag greenBackground]#NEW FEATURE# a|
-Configurations attributes::
+Configuration attributes::
* `hideIrrelevantChipsInLiveboardTabs` +
Hides filter chips on a Liveboard when set to `true`.
diff --git a/modules/ROOT/pages/common/nav-embedding.adoc b/modules/ROOT/pages/common/nav-embedding.adoc
index dba7f6535..5632e6cbd 100644
--- a/modules/ROOT/pages/common/nav-embedding.adoc
+++ b/modules/ROOT/pages/common/nav-embedding.adoc
@@ -116,7 +116,7 @@ Authentication and data security
* link:{{navprefix}}/troubleshoot-errors[Troubleshoot errors]
[.sidebar-title]
-Authentication and data security
+Embedding tutorials
* link:{{navprefix}}/tutorials/tutorials-overview[Embedding tutorials]
* link:{{navprefix}}/tutorials/tse-fundamentals/intro[Embedding Fundamentals]
diff --git a/modules/ROOT/pages/common/nav-mcp-server.adoc b/modules/ROOT/pages/common/nav-mcp-server.adoc
new file mode 100644
index 000000000..d40f131d7
--- /dev/null
+++ b/modules/ROOT/pages/common/nav-mcp-server.adoc
@@ -0,0 +1,32 @@
+
+:page-pageid: nav-mcp-server
+:page-description: MCP Server navigation
+
+[navSection]
+
+[.sidebar-title]
+ThoughtSpot MCP server
+
+* link:{{navprefix}}/mcp-integration[Overview]
+** link:{{navprefix}}/mcp-server-spotter3[MCP Server with Spotter 3]
+** link:{{navprefix}}/mcp-server-legacy[Legacy MCP Server architecture and tools]
+* link:{{navprefix}}/connect-mcp-server-to-clients[Connecting MCP Server to MCP clients]
+* link:{{navprefix}}/custom-chatbot-integration-mcp[Integrating MCP Server in a custom app]
+
+[.sidebar-title]
+MCP tools reference
+
+* link:{{navprefix}}/mcp-tool-reference[Overview]
+* link:{{navprefix}}/mcp-tool-reference-spotter3[MCP tool reference (Spotter 3)]
+* link:{{navprefix}}/mcp-tool-reference-spotter3[MCP tool reference (legacy version)]
+
+[.sidebar-title]
+Related SDK components
+
+* [.typedoc-Function]#link:{{navprefix}}/Function_startAutoMCPFrameRenderer[startAutoMCPFrameRenderer]#
+* [.typedoc-Interface]#link:{{navprefix}}/Interface_AutoMCPFrameRendererViewConfig[AutoMCPFrameRendererViewConfig]#
+
+[.sidebar-title]
+MCP Server release notes
+
+* link:{{navprefix}}/mcp-server-changelog[MCP Server changelog]
diff --git a/modules/ROOT/pages/common/nav-rest-api.adoc b/modules/ROOT/pages/common/nav-rest-api.adoc
new file mode 100644
index 000000000..a9fec3165
--- /dev/null
+++ b/modules/ROOT/pages/common/nav-rest-api.adoc
@@ -0,0 +1,96 @@
+
+:page-pageid: nav-rest-api
+:page-description: REST API navigation
+
+[navSection]
+
+[.sidebar-title]
+REST APIs
+
+* link:{{navprefix}}/rest-apis[Overview]
+* link:{{navprefix}}/rest-apiv2-getstarted[Get started]
+* link:{{navprefix}}/api-authv2[REST API v2.0 authentication]
+* link:{{navprefix}}/rest-v2-changelog[REST API v2 changelog]
+* link:{{navprefix}}/restV2-playground?apiResourceId=http%2Fgetting-started%2Fintroduction[REST API v2 Playground]
+* link:{{navprefix}}/rest-apiv2-reference[REST API v2.0 Reference]
+** link:{{navprefix}}/api-user-management[Users and group privileges]
+** link:{{navprefix}}/rbac[Role-based access control]
+** link:{{navprefix}}/rest-apiv2-search[Search API endpoints]
+*** link:{{navprefix}}/rest-apiv2-users-search[Search users]
+*** link:{{navprefix}}/rest-apiv2-groups-search[Search groups]
+*** link:{{navprefix}}/rest-apiv2-metadata-search[Search metadata]
+** link:{{navprefix}}/fetch-data-and-report-apis[Data and Report APIs]
+** link:{{navprefix}}/spotter-api[Spotter APIs]
+*** link:{{navprefix}}/spotter-agent-apis[AI APIs (Spotter Agent and Spotter 3)]
+*** link:{{navprefix}}/spotter-apis-classic[AI APIs (Spotter Classic) ^BETA^]
+*** link:{{navprefix}}/spotter-coaching-apis[Spotter coaching APIs ^BETA^]
+** link:{{navprefix}}/audit-logs[Audit logs]
+** link:{{navprefix}}/tml[TML]
+** link:{{navprefix}}/collections[Collections ^BETA^]
+** link:{{navprefix}}/connections[Connections]
+** link:{{navprefix}}/connection-config[Connection configuration]
+** link:{{navprefix}}/runtime-sort[Runtime sorting]
+
+
+[.sidebar-title]
+REST API SDK
+
+* link:{{navprefix}}/rest-api-sdk[Overview]
+* link:{{navprefix}}/rest-api-sdk-typescript[TypeScript SDK]
+* link:{{navprefix}}/rest-api-sdk-java[Java SDK]
+* link:{{navprefix}}/rest-apiv2-js[REST API v2.0 in JavaScript]
+
+[.sidebar-title]
+Webhooks
+
+* link:{{navprefix}}/webhooks[Overview]
+* link:{{navprefix}}/webhooks-comm-channel[Configure and monitor webhook communication channels]
+* link:{{navprefix}}/webhooks-s3-integration[Deliver Liveboard reports to AWS S3 Storage]
+* link:{{navprefix}}/webhooks-lb-schedule[Deliver Liveboard reports to external application]
+* link:{{navprefix}}/webhooks-lb-payload[Webhook response payload]
+* link:{{navprefix}}/webhooks-kpi[Webhook for KPI alerts]
+
+[.sidebar-title]
+REST API Tutorials
+
+* link:{{navprefix}}/tutorials/rest-api/intro[REST API Tutorials]
+* link:{{navprefix}}/tutorials/rest-api/lesson-01[01 - REST API overview]
+* link:{{navprefix}}/tutorials/rest-api/lesson-02[02 - Simple Python implementation]
+* link:{{navprefix}}/tutorials/rest-api/lesson-03[03 - Complex REST API workflows]
+
+[.sidebar-title]
+REST API v1 (DEPRECATED)
+
+* link:{{navprefix}}/rest-api-getstarted[Get started]
+* link:{{navprefix}}/api-auth-session[REST API v1 authentication]
+* link:{{navprefix}}/catalog-and-audit[Catalog and audit content]
+* link:{{navprefix}}/rest-api-pagination[Paginate API response]
+* link:{{navprefix}}/rest-api-reference[REST API v1 Reference]
+** link:{{navprefix}}/orgs-api[Orgs API]
+** link:{{navprefix}}/user-api[User API]
+** link:{{navprefix}}/group-api[Group API]
+** link:{{navprefix}}/role-api[Role API]
+** link:{{navprefix}}/session-api[Session API]
+** link:{{navprefix}}/connections-api[Data connection API]
+** link:{{navprefix}}/metadata-api[Metadata API]
+** link:{{navprefix}}/admin-api[Admin API]
+** link:{{navprefix}}/tml-api[TML API]
+** link:{{navprefix}}/dependent-objects-api[Dependent objects API]
+** link:{{navprefix}}/search-data-api[Search data API]
+** link:{{navprefix}}/liveboard-data-api[Liveboard data API]
+** link:{{navprefix}}/liveboard-export-api[Liveboard export API]
+** link:{{navprefix}}/security-api[Security API]
+** link:{{navprefix}}/logs-api[Audit logs API]
+** link:{{navprefix}}/materialization-api[Materialization API]
+** link:{{navprefix}}/database-api[Database API]
+** link:{{navprefix}}/rest-v1-changelog[REST API v1 changelog]
+** link:{{navprefix}}/v1v2-comparison[REST v1 and v2.0 comparison]
+
+
+//** link:{{navprefix}}/graphql-guide[GraphQL API ^Beta^]
+
+
+
+
+
+
diff --git a/modules/ROOT/pages/common/nav-spottercode.adoc b/modules/ROOT/pages/common/nav-spottercode.adoc
new file mode 100644
index 000000000..b60c85c31
--- /dev/null
+++ b/modules/ROOT/pages/common/nav-spottercode.adoc
@@ -0,0 +1,12 @@
+
+:page-pageid: nav-spottercode
+:page-description: SpotterCode navigation
+
+[navSection]
+
+[.sidebar-title]
+SpotterCode agent
+
+* link:{{navprefix}}/SpotterCode[SpotterCode for IDEs]
+* link:{{navprefix}}/integrate-SpotterCode[Integrating SpotterCode]
+* link:{{navprefix}}/spottercode-prompting-guide[SpotterCode prompting guide]
diff --git a/modules/ROOT/pages/common/nav-tutorials.adoc b/modules/ROOT/pages/common/nav-tutorials.adoc
new file mode 100644
index 000000000..b7933f53d
--- /dev/null
+++ b/modules/ROOT/pages/common/nav-tutorials.adoc
@@ -0,0 +1,29 @@
+
+:page-pageid: nav-tutorials
+:page-description: Tutorials navigation
+
+[navSection]
+
+* link:{{navprefix}}/tutorials/tutorials-overview[Tutorials]
+** link:{{navprefix}}/tutorials/tse-fundamentals/intro[Embedding Fundamentals]
+*** link:{{navprefix}}/tutorials/tse-fundamentals/lesson-01[01 - Overview]
+*** link:{{navprefix}}/tutorials/tse-fundamentals/lesson-02[02 - Set up for course]
+*** link:{{navprefix}}/tutorials/tse-fundamentals/lesson-03[03 - Security setup]
+*** link:{{navprefix}}/tutorials/tse-fundamentals/lesson-04[04 - Start coding]
+*** link:{{navprefix}}/tutorials/tse-fundamentals/lesson-05[05 - Embed Search]
+*** link:{{navprefix}}/tutorials/tse-fundamentals/lesson-06[06 - Embed Natural Language Search]
+*** link:{{navprefix}}/tutorials/tse-fundamentals/lesson-07[07 - Embed Liveboard]
+*** link:{{navprefix}}/tutorials/tse-fundamentals/lesson-08[08 - Embed Visualization]
+*** link:{{navprefix}}/tutorials/tse-fundamentals/lesson-09[09 - Embed full application]
+*** link:{{navprefix}}/tutorials/tse-fundamentals/lesson-10[10 - Style embedded app]
+*** link:{{navprefix}}/tutorials/tse-fundamentals/lesson-11[11 - Course summary]
+** link:{{navprefix}}/tutorials/style-customization/tutorial[Style customization]
+** link:{{navprefix}}/tutorials/react-components/intro[React components]
+*** link:{{navprefix}}/tutorials/react-components/lesson-01[01 - Initialize Visual Embed SDK]
+*** link:{{navprefix}}/tutorials/react-components/lesson-02[02 - ThoughtSpot component pages]
+*** link:{{navprefix}}/tutorials/react-components/lesson-03[03 - Menus and navigation elements]
+*** link:{{navprefix}}/tutorials/react-components/lesson-04[04 - Event handling]
+
+*** link:{{navprefix}}/tutorials/rest-api/lesson-04[04 - Event handling]
+** Spotter
+*** link:{{navprefix}}/tutorials/spotter/integrate-into-chatbot[Integrate Spotter into your Chatbot]
diff --git a/modules/ROOT/pages/common/nav.adoc b/modules/ROOT/pages/common/nav.adoc
index 272b244f7..9b6a374fa 100644
--- a/modules/ROOT/pages/common/nav.adoc
+++ b/modules/ROOT/pages/common/nav.adoc
@@ -4,250 +4,81 @@
[navSection]
-* link:{{navprefix}}/ask-docs[AskDocs ^Beta^]
-
-* link:{{navprefix}}/whats-new[What's New]
-** link:{{navprefix}}/whats-new[New features]
-
-*** link:{{navprefix}}/fixed-issues[Fixed issues]
-*** link:{{navprefix}}/known-issues[Known Issues]
-
-** link:{{navprefix}}/embed-sdk-changelog[SDK changelog]
-*** link:{{navprefix}}/embed-sdk-changelog[Visual Embed changelog]
-*** link:{{navprefix}}/mobile-sdk-changelog[Mobile Embed SDK changelog]
-** link:{{navprefix}}/rest-v2-changelog[REST API changelog]
-*** link:{{navprefix}}/rest-v2-changelog[REST API v2 changelog]
-*** link:{{navprefix}}/rest-v1-changelog[REST API v1 changelog]
+[.sidebar-title]
+Release notes and changelogs
+
+* link:{{navprefix}}/whats-new[What's new]
+* Changelog
+** link:{{navprefix}}/embed-sdk-changelog[Visual Embed SDK changelog]
+** link:{{navprefix}}/mobile-sdk-changelog[Mobile Embed SDK changelog]
+** link:{{navprefix}}/rest-v2-changelog[REST API v2 changelog]
** link:{{navprefix}}/mcp-server-changelog[MCP Server changelog]
-** link:{{navprefix}}/deprecated-features[Deprecation announcements]
-
-* Live Playgrounds
-** +++Visual Embed Playground+++
-** link:{{navprefix}}/restV2-playground?apiResourceId=http%2Fgetting-started%2Fintroduction[REST API v2 Playground]
-** link:{{navprefix}}/graphql-play-ground[GraphQL Playground]
-** +++REST API v1 Playground+++
-** link:{{navprefix}}/theme-builder[Theme Builder]
-** link:{{navprefix}}/spotdev-portal[How to use]
-*** link:{{navprefix}}/dev-playground[Visual Embed Playground]
-*** link:{{navprefix}}/graphql-playground[GraphQL Playground]
-*** link:{{navprefix}}/rest-playground[REST API Playground]
-
-* link:{{navprefix}}/tutorials/tutorials-overview[Tutorials]
-** link:{{navprefix}}/tutorials/tse-fundamentals/intro[Embedding Fundamentals]
-*** link:{{navprefix}}/tutorials/tse-fundamentals/lesson-01[01 - Overview]
-*** link:{{navprefix}}/tutorials/tse-fundamentals/lesson-02[02 - Set up for course]
-*** link:{{navprefix}}/tutorials/tse-fundamentals/lesson-03[03 - Security setup]
-*** link:{{navprefix}}/tutorials/tse-fundamentals/lesson-04[04 - Start coding]
-*** link:{{navprefix}}/tutorials/tse-fundamentals/lesson-05[05 - Embed Search]
-*** link:{{navprefix}}/tutorials/tse-fundamentals/lesson-06[06 - Embed Natural Language Search]
-*** link:{{navprefix}}/tutorials/tse-fundamentals/lesson-07[07 - Embed Liveboard]
-*** link:{{navprefix}}/tutorials/tse-fundamentals/lesson-08[08 - Embed Visualization]
-*** link:{{navprefix}}/tutorials/tse-fundamentals/lesson-09[09 - Embed full application]
-*** link:{{navprefix}}/tutorials/tse-fundamentals/lesson-10[10 - Style embedded app]
-*** link:{{navprefix}}/tutorials/tse-fundamentals/lesson-11[11 - Course summary]
-** link:{{navprefix}}/tutorials/style-customization/tutorial[Style customization]
-** link:{{navprefix}}/tutorials/react-components/intro[React components]
-*** link:{{navprefix}}/tutorials/react-components/lesson-01[01 - Initialize Visual Embed SDK]
-*** link:{{navprefix}}/tutorials/react-components/lesson-02[02 - ThoughtSpot component pages]
-*** link:{{navprefix}}/tutorials/react-components/lesson-03[03 - Menus and navigation elements]
-*** link:{{navprefix}}/tutorials/react-components/lesson-04[04 - Event handling]
-** link:{{navprefix}}/tutorials/rest-api/intro[REST API]
-*** link:{{navprefix}}/tutorials/rest-api/lesson-01[01 - REST API overview]
-*** link:{{navprefix}}/tutorials/rest-api/lesson-02[02 - Simple Python implementation]
-*** link:{{navprefix}}/tutorials/rest-api/lesson-03[03 - Complex REST API workflows]
-*** link:{{navprefix}}/tutorials/rest-api/lesson-04[04 - Event handling]
-** Spotter
-*** link:{{navprefix}}/tutorials/spotter/integrate-into-chatbot[Integrate Spotter into your Chatbot]
-
-* link:{{navprefix}}/getting-started[Embed ThoughtSpot]
-** link:{{navprefix}}/getting-started[Quickstart Guide]
-** link:{{navprefix}}/tsembed[Embed ThoughtSpot in Web app]
-*** Embed analytics
-**** link:{{navprefix}}/embed-liveboard[Embed a Liveboard]
-**** link:{{navprefix}}/embed-a-viz[Embed a visualization]
-*** link:{{navprefix}}/embed-ai-search-analytics[Embed AI Search and Analytics]
-**** link:{{navprefix}}/embed-spotter[Embed Spotter experience]
-**** link:{{navprefix}}/embed-spotter-agent[Embed Spotter Agent]
-*** link:{{navprefix}}/full-embed[Embed full application]
-**** link:{{navprefix}}/full-app-customize[Customize your embed]
-**** link:{{navprefix}}/customize-nav-controls[Customize navigation panels]
-**** link:{{navprefix}}/set-default-page[Customize default page and navigation path]
-**** link:{{navprefix}}/customize-homepage-experience[Customize home page experience]
+* link:{{navprefix}}/deprecated-features[Deprecation announcements]
-*** Embed token-based Search
-**** link:{{navprefix}}/search-embed[Embed Search]
-**** link:{{navprefix}}/embed-searchbar[Embed search bar]
-*** link:{{navprefix}}/react-app-embed[Embed with React components]
-** link:{{navprefix}}/mobile-embed[Embed ThoughtSpot in a mobile app]
-*** link:{{navprefix}}/embed-ts-mobile-react-native[React Native SDK]
-*** link:{{navprefix}}/embed-ts-flutter[Flutter embed SDK]
-*** link:{{navprefix}}/embed-ts-swift[Swift Embed SDK]
-*** link:{{navprefix}}/embed-ts-android[Android Embed SDK]
+[.sidebar-title]
+Live Playgrounds
-** Customize and integrate
-*** link:{{navprefix}}/style-customization[Customize UI layout and styles]
-**** link:{{navprefix}}/customize-style[Customize basic styles]
-**** link:{{navprefix}}/custom-css[CSS customization framework]
-***** link:{{navprefix}}/css-variables-reference[CSS variables reference]
-***** link:{{navprefix}}/customize-icons[Customize icons]
-***** link:{{navprefix}}/customize-text[Customize text strings]
-***** link:{{navprefix}}/theme-builder-doc[Theme builder]
+* +++Visual Embed Playground+++
+** link:{{navprefix}}/dev-playground[How to use]
-*** link:{{navprefix}}/filters-overview[Filters overview]
-**** link:{{navprefix}}/runtime-overrides[Runtime overrides]
-**** link:{{navprefix}}/runtime-filters[Runtime filters]
-**** link:{{navprefix}}/runtime-params[Runtime Parameters]
+* link:{{navprefix}}/restV2-playground?apiResourceId=http%2Fgetting-started%2Fintroduction[REST API v2 Playground]
+** link:{{navprefix}}/rest-playground[How to use]
+//** link:{{navprefix}}/graphql-play-ground[GraphQL Playground]
+//** +++REST API v1 Playground+++
+* link:{{navprefix}}/theme-builder[Theme Builder]
+** link:{{navprefix}}/theme-builder-doc[How to use]
-*** link:{{navprefix}}/action-config[Customize menus]
-**** link:{{navprefix}}/actions[Action IDs in the SDK]
-*** link:{{navprefix}}/events-app-integration[Events and app interactions]
-**** link:{{navprefix}}/embed-events[Using embed events]
-**** link:{{navprefix}}/host-events[Using host events]
-**** link:{{navprefix}}/context-aware-event-routing[Context-based execution of host events]
-**** link:{{navprefix}}/hostEventsV2-migration[Migrating from Host Event v1 to Host Events v2 framework]
-**** link:{{navprefix}}/handling-embed-errors[Handling embed errors]
-**** link:{{navprefix}}/api-search-intercept[API intercept and data fetch requests]
-*** link:{{navprefix}}/custom-action-intro[Custom actions]
-**** link:{{navprefix}}/customize-actions[Custom actions through the UI]
-***** link:{{navprefix}}/custom-action-url[URL actions]
-***** link:{{navprefix}}/custom-action-callback[Callback actions]
-***** link:{{navprefix}}/edit-custom-action[Set the position of a custom action]
-***** link:{{navprefix}}/add-action-viz[Add a local action to a visualization]
-***** link:{{navprefix}}/add-action-worksheet[Add a local action to a model]
-**** link:{{navprefix}}/code-based-custom-action[Code based custom actions]
-**** link:{{navprefix}}/custom-action-payload[Callback response payload]
-*** link:{{navprefix}}/customize-links[Customize links]
-*** link:{{navprefix}}/set-locale[Customize locale]
-*** link:{{navprefix}}/custom-domain-config[Custom domain configuration]
-*** link:{{navprefix}}/customize-emails[Customize onboarding settings]
-*** link:{{navprefix}}/customize-email-apis[Customize email template]
-*** link:{{navprefix}}/in-app-navigation[Create dynamic menus and navigation]
-** link:{{navprefix}}/security-settings[Security settings]
-** link:{{navprefix}}/embed-auth[Authentication]
-*** link:{{navprefix}}/trusted-auth[Trusted authentication]
-**** link:{{navprefix}}/trusted-auth-secret-key[Secret key management]
-**** link:{{navprefix}}/trusted-auth-sdk[Front-end trusted authentication integration]
-**** link:{{navprefix}}/trusted-auth-token-request-service[Token request service]
-**** link:{{navprefix}}/trusted-auth-troubleshoot[Troubleshoot trusted authentication]
-*** link:{{navprefix}}/saml-sso[SAML SSO authentication]
-*** link:{{navprefix}}/oidc-auth[OpenID Connect authentication]
-*** link:{{navprefix}}/just-in-time-provisioning[Just-in-time provisioning]
-** link:{{navprefix}}/embed-object-access[Authorization]
-*** link:{{navprefix}}/access-control-sharing[Access control and sharing]
-*** link:{{navprefix}}/privileges-and-roles[Privileges and Roles]
-*** link:{{navprefix}}/data-security[Data security]
-**** link:{{navprefix}}/rls-rules[RLS Rules]
-**** link:{{navprefix}}/abac-via-rls-variables[ABAC via RLS with variables]
-**** link:{{navprefix}}/jwt-abac-migration-guide[ABAC JWT migration guide]
-***** link:{{navprefix}}/jwt-filter-parameters-rules-migration-guide[JWT ABAC with filter rules -> ABAC via RLS]
-***** link:{{navprefix}}/jwt-abac-beta-migration-guide[JWT ABAC beta implementation -> ABAC via RLS]
-**** link:{{navprefix}}/abac-user-parameters[ABAC via JWT with filter rules and parameters]
-*** link:{{navprefix}}/selective-user-access[User access]
-** link:{{navprefix}}/best-practices[Performance optimization]
-*** link:{{navprefix}}/best-practices[Best practices]
-*** link:{{navprefix}}/prerender[Prerender components]
-*** link:{{navprefix}}/lazy-load-fullHeight[Full height and lazy loading options]
-*** link:{{navprefix}}/prefetch[Prefetch static resources]
-** link:{{navprefix}}/VisualEmbedSdk[Visual Embed SDK Reference]
-include::generated/typedoc/CustomSideNav.adoc[]
-*** Custom styles
-**** [.typedoc-Interface]#link:{{navprefix}}/Interface_CustomStyles[CustomStyles]#
-**** [.typedoc-Interface]#link:{{navprefix}}/Interface_CustomisationsInterface[CustomisationsInterface]#
-**** [.typedoc-Interface]#link:{{navprefix}}/Interface_customCssInterface[customCssInterface]#
-**** [.typedoc-Interface]#link:{{navprefix}}/Interface_CustomCssVariables[customCssVariables]#
-*** Runtime filters
-**** [.typedoc-Interface]#link:{{navprefix}}/Interface_RuntimeFilter[RuntimeFilter]#
-**** [.typedoc-Enumeration]#link:{{navprefix}}/Enumeration_RuntimeFilterOp[RuntimeFilterOp]#
-*** Others
-**** [.typedoc-Enumeration]#link:{{navprefix}}/Enumeration_Action[Action]#
-**** [.typedoc-Enumeration]#link:{{navprefix}}/Enumeration_ContextMenuTriggerOptions[ContextMenuTriggerOptions]#
-**** [.typedoc-Enumeration]#link:{{navprefix}}/Enumeration_DataSourceVisualMode[DataSourceVisualMode]#
-**** [.typedoc-Enumeration]#link:{{navprefix}}/Enumeration_Page[Page]#
-**** [.typedoc-Enumeration]#link:{{navprefix}}/Enumeration_PrefetchFeatures[PrefetchFeatures]#
-**** [.typedoc-Function]#link:{{navprefix}}/Function_executeTML[executeTML]#
-**** [.typedoc-Function]#link:{{navprefix}}/Function_exportTML[exportTML]#
-** Other embedding methods
-*** link:{{navprefix}}/embed-without-sdk[Embed without SDK]
-*** link:{{navprefix}}/custom-viz-rest-api[Create a custom visualization]
-** link:{{navprefix}}/troubleshoot-errors[Troubleshoot errors]
+//*** link:{{navprefix}}/graphql-playground[GraphQL Playground]
-* link:{{navprefix}}/rest-apis[REST API]
-** link:{{navprefix}}/rest-apis[Overview]
-** link:{{navprefix}}/api-user-management[Users and group privileges]
-** link:{{navprefix}}/rbac[Role-based access control]
-** link:{{navprefix}}/spotter-api[Spotter APIs ^BETA^]
-** link:{{navprefix}}/audit-logs[Audit logs]
-** link:{{navprefix}}/tml[TML]
-** link:{{navprefix}}/collections[Collections ^BETA^]
-** link:{{navprefix}}/connections[Connections]
-*** link:{{navprefix}}/connection-config[Connection configuration]
-** link:{{navprefix}}/rest-apiv2-getstarted[REST API v2.0]
-*** link:{{navprefix}}/rest-apiv2-getstarted[Get started]
-*** link:{{navprefix}}/api-authv2[REST API v2.0 authentication]
-*** link:{{navprefix}}/rest-apiv2-js[REST API v2.0 in JavaScript]
-*** link:{{navprefix}}/rest-apiv2-search[REST API v2.0 Search endpoints]
-**** link:{{navprefix}}/rest-apiv2-users-search[Search users]
-**** link:{{navprefix}}/rest-apiv2-groups-search[Search groups]
-**** link:{{navprefix}}/rest-apiv2-metadata-search[Search metadata]
-*** link:{{navprefix}}/fetch-data-and-report-apis[Data and Report APIs]
-*** link:{{navprefix}}/rest-api-sdk[REST API v2.0 SDKs]
-**** link:{{navprefix}}/rest-api-sdk-typescript[TypeScript SDK]
-**** link:{{navprefix}}/rest-api-sdk-java[Java SDK]
-** link:{{navprefix}}/rest-apiv2-reference[REST API v2.0 Reference]
-** link:{{navprefix}}/rest-api-getstarted[REST API v1]
-*** link:{{navprefix}}/rest-api-getstarted[Get started]
-*** link:{{navprefix}}/api-auth-session[REST API v1 authentication]
-*** link:{{navprefix}}/catalog-and-audit[Catalog and audit content]
-*** link:{{navprefix}}/rest-api-pagination[Paginate API response]
-** link:{{navprefix}}/rest-api-reference[REST API v1 Reference]
-*** link:{{navprefix}}/orgs-api[Orgs API]
-*** link:{{navprefix}}/user-api[User API]
-*** link:{{navprefix}}/group-api[Group API]
-*** link:{{navprefix}}/role-api[Role API]
-*** link:{{navprefix}}/session-api[Session API]
-*** link:{{navprefix}}/connections-api[Data connection API]
-*** link:{{navprefix}}/metadata-api[Metadata API]
-*** link:{{navprefix}}/admin-api[Admin API]
-*** link:{{navprefix}}/tml-api[TML API]
-*** link:{{navprefix}}/dependent-objects-api[Dependent objects API]
-*** link:{{navprefix}}/search-data-api[Search data API]
-*** link:{{navprefix}}/liveboard-data-api[Liveboard data API]
-*** link:{{navprefix}}/liveboard-export-api[Liveboard export API]
-*** link:{{navprefix}}/security-api[Security API]
-*** link:{{navprefix}}/logs-api[Audit logs API]
-*** link:{{navprefix}}/materialization-api[Materialization API]
-*** link:{{navprefix}}/database-api[Database API]
-** link:{{navprefix}}/runtime-sort[Runtime sorting]
-** link:{{navprefix}}/v1v2-comparison[REST v1 and v2.0 comparison]
-** link:{{navprefix}}/graphql-guide[GraphQL API ^Beta^]
-** link:{{navprefix}}/webhooks[Webhooks]
-*** link:{{navprefix}}/webhooks-comm-channel[Configure and monitor webhook communication channels]
-*** link:{{navprefix}}/webhooks-s3-integration[Deliver Liveboard reports to AWS S3 Storage]
-*** link:{{navprefix}}/webhooks-lb-schedule[Deliver Liveboard reports to external application]
-*** link:{{navprefix}}/webhooks-lb-payload[Webhook response payload]
-*** link:{{navprefix}}/webhooks-kpi[Webhook for KPI alerts]
+[.sidebar-title]
+Get started
+* link:{{navprefix}}/getting-started[Embed ThoughtSpot]
* link:{{navprefix}}/SpotterCode[SpotterCode for IDEs]
-** link:{{navprefix}}/integrate-SpotterCode[Integrating SpotterCode]
-** link:{{navprefix}}/spottercode-prompting-guide[SpotterCode prompting guide]
-
-* MCP Servers and tools
-** link:{{navprefix}}/ai-analytics-integration[ThoughtSpot AI analytics integration]
-** link:{{navprefix}}/mcp-integration[ThoughtSpot MCP server]
-*** link:{{navprefix}}/mcp-server-spotter3[MCP Server with Spotter 3]
-*** link:{{navprefix}}/mcp-server-legacy[Legacy MCP Server architecture and tools]
-** link:{{navprefix}}/connect-mcp-server-to-clients[Connecting MCP Server to MCP clients]
-** link:{{navprefix}}/custom-chatbot-integration-mcp[Integrating MCP Server in a custom app]
-** link:{{navprefix}}/mcp-tool-reference[MCP tool reference]
-*** link:{{navprefix}}/mcp-tool-reference-spotter3[MCP tool reference (Spotter 3)]
-*** link:{{navprefix}}/mcp-tool-reference-spotter3[MCP tool reference (legacy version)]
-** Related SDK components
-*** [.typedoc-Function]#link:{{navprefix}}/Function_startAutoMCPFrameRenderer[startAutoMCPFrameRenderer]#
-*** [.typedoc-Interface]#link:{{navprefix}}/Interface_AutoMCPFrameRendererViewConfig[AutoMCPFrameRendererViewConfig]#
-
-
+* link:{{navprefix}}/rest-apis[REST APIs]
+* link:{{navprefix}}/ai-analytics-integration[AI analytics integration]
+* link:{{navprefix}}/mcp-integration[MCP Server integration]
+//** link:{{navprefix}}/tutorials/tutorials-overview[Tutorials]
+* link:{{navprefix}}/VisualEmbedSdk[SDK and API reference]
+** link:{{navprefix}}/VisualEmbedSdk[Visual Embed SDK]
+** link:{{navprefix}}/rest-apiv2-reference[REST API]
+** link:{{navprefix}}/mcp-tool-reference[MCP tools]
+
+
+[.sidebar-title]
+Build and deploy
+
+* link:{{navprefix}}/development-and-deployment[Development and deployment]
+** link:{{navprefix}}/thoughtspot-objects[ThoughtSpot objects]
+** link:{{navprefix}}/variables[Variables]
+** link:{{navprefix}}/parameterize-metadata[Parameterize metadata]
+
+* link:{{navprefix}}/deploy-with-tml-apis[Deploy with TML APIs]
+** link:{{navprefix}}/git-provider-integration[Git provider integration]
+** link:{{navprefix}}/modify-tml[TML modification]
+* link:{{navprefix}}/publish-data-overview[Publish content to Orgs]
+** link:{{navprefix}}/publish-to-orgs[Publish objects to Orgs]
+* link:{{navprefix}}/git-integration[Deploy with GitHub APIs (legacy)]
+** link:{{navprefix}}/git-configuration[Configure GitHub integration]
+** link:{{navprefix}}/git-api[GitHub REST APIs]
+** link:{{navprefix}}/guid-mapping[GUID mapping]
+
+[.sidebar-title]
+Multi-tenancy
+
+* link:{{navprefix}}/multi-tenancy[Overview]
+* link:{{navprefix}}/orgs[Multi-tenancy with Orgs]
+** link:{{navprefix}}/orgs-api-op[Org administration]
+** link:{{navprefix}}/multitenancy-within-an-org[Multi-tenancy within an Org]
+** link:{{navprefix}}/single-tenant-data-models[Single-tenant data models with Orgs]
+* link:{{navprefix}}/tse-cluster[Cluster maintenance and upgrade]
+
+[.sidebar-title]
+Integration guides
+
+** link:{{navprefix}}/external-tool-script-integration[Third-party tools and custom scripts]
* link:{{navprefix}}/development-and-deployment[Deployment and integration]
** link:{{navprefix}}/development-and-deployment[Development and deployment]
@@ -277,20 +108,17 @@ include::generated/typedoc/CustomSideNav.adoc[]
** link:{{navprefix}}/pendo-integration[Pendo integration with embed]
** link:{{navprefix}}/sf-integration[Integration with Salesforce]
** link:{{navprefix}}/vercel-integration[Vercel integration]
-* Additional references
-** link:{{navprefix}}/embed-ts[About ThoughtSpot embedding]
-** link:{{navprefix}}/get-started-tse[Embed licenses]
-** link:{{navprefix}}/license-feature-matrix[Feature matrix]
-** link:{{navprefix}}/faqs[FAQs]
-** link:{{navprefix}}/code-samples[Code samples]
-** link:https://codesandbox.io/s/big-tse-react-demo-i4g9xi[React CodeSandbox, window=_blank]
-** link:https://codesandbox.io/s/graphqlcookieembed-wf4fk9?file=/src/App.js:418-426[GraphQL CodeSandbox, window=_blank]
-* Resources
-** link:https://developers.thoughtspot.com[ThoughtSpot Developers, window=_blank]
-** link:https://community.thoughtspot.com/customers/s/[Community, window=_blank]
-** link:https://developers.thoughtspot.com/guides[Tutorials, window=_blank]
-** link:https://developers.thoughtspot.com/codespot[CodeSpot, window=_blank]
-** link:https://training.thoughtspot.com/page/developer[Training resources, window=_blank]
-** link:https://docs.thoughtspot.com[Product Documentation, window=_blank]
+[.sidebar-title]
+Additional resources
+
+* link:{{navprefix}}/faqs[FAQs]
+* link:https://codesandbox.io/s/big-tse-react-demo-i4g9xi[React CodeSandbox, window=_blank]
+//** link:https://codesandbox.io/s/graphqlcookieembed-wf4fk9?file=/src/App.js:418-426[GraphQL CodeSandbox, window=_blank]
+
+* link:https://community.thoughtspot.com/customers/s/[Community, window=_blank]
+* link:https://training.thoughtspot.com/page/developer[Training resources, window=_blank]
+* link:https://docs.thoughtspot.com[Product Documentation, window=_blank]
+* link:https://developers.thoughtspot.com[ThoughtSpot Developers, window=_blank]
+* Deprecated feature docs
** link:{{navprefix}}/abac-user-parameters-beta[ABAC via tokens (pre-10.4.0.cl) (Deprecated)]
diff --git a/modules/ROOT/pages/customize-homepage-full-embed.adoc b/modules/ROOT/pages/customize-homepage-full-embed.adoc
index 20f9de70e..954cb8da5 100644
--- a/modules/ROOT/pages/customize-homepage-full-embed.adoc
+++ b/modules/ROOT/pages/customize-homepage-full-embed.adoc
@@ -8,11 +8,10 @@
Developers can customize the home page experience in full application embedding to show either the classic layout or the new modular home page.
-[div announcementBlock]
---
[IMPORTANT]
+====
The classic (V1) experience and V2 experience modes will be deprecated in an upcoming release in 2026. Therefore, ThoughtSpot recommends upgrading the UI experience of your full application embedding to the V3 experience.
---
+====
== Home page layout
diff --git a/modules/ROOT/pages/data-report-v2-api.adoc b/modules/ROOT/pages/data-report-v2-api.adoc
index f9ad3bb86..17daad593 100644
--- a/modules/ROOT/pages/data-report-v2-api.adoc
+++ b/modules/ROOT/pages/data-report-v2-api.adoc
@@ -293,28 +293,39 @@ curl -X POST \
For *PDF* downloads, you can specify additional parameters to customize the page orientation and include or exclude the cover page, logo, footer text, and page numbers.
-===== Sample API payload for XLSX downloads
+You can now also download continuous pdfs which matches the full length of your Liveboard, without breaking them into multiple A4 pages.
+
+* `page_size = CONTINUOUS` [beta betaBackground]^Beta^ Unlike the A4 format, which introduces forced page breaks between visualizations, this continuous flow maintains your exact design and intended layout.
++
+When `page_size = CONTINUOUS`, the `include_filter_page` option works to show/hide the filter section in the PDF page (in a continuous PDF, there is no separate filter page, but the filters are included on the same page at the top).
+* `zoom_level` [beta betaBackground]^Beta^ offers various download size options to suit the viewer's screen dimensions, thereby enhancing legibility. This can be set only when `page_size = CONTINUOUS`. Valid values are integers in the range of 45 and 175.
+
+To enable this on your ThoughtSpot instance, contact ThoughtSpot Support.
+
+===== Sample API payload for PDF downloads
[source,cURL]
----
-curl -X POST \
- --url 'https://{ThoughtSpot-Host}/api/rest/2.0/report/liveboard' \
- -H 'Authorization: Bearer {access-token}'\
- -H 'Content-Type: application/json' \
+curl -X POST 'https://{ThoughtSpot-Host}/api/rest/2.0/report/liveboard' \
+--header 'Authorization: Bearer {access-token}' \
+--header 'Content-Type: application/json' \
--data-raw '{
-"metadata_identifier": "416052fd-ad22-4d48-be0a-e43b53109957",
-"file_format": "PDF",
-"visualization_identifiers": [
-"254c6e30-680c-41ea-aa4d-bb059f745462"
-],
-"pdf_options": {
-"include_cover_page": true,
-"include_custom_logo": true,
-"include_filter_page": true,
-"include_page_number": true,
-"page_orientation": "LANDSCAPE",
-"page_footer_text": "Sample footer text"
-}
+ "metadata_identifier": "416052fd-ad22-4d48-be0a-e43b53109957",
+ "file_format": "PDF",
+ "visualization_identifiers": [
+ "254c6e30-680c-41ea-aa4d-bb059f745462"
+ ],
+ "pdf_options": {
+ "page_size": "CONTINUOUS",
+ "zoom_level": 105,
+ "include_cover_page": true,
+ "include_custom_logo": true,
+ "include_filter_page": true,
+ "include_page_number": true,
+ "page_orientation": "PORTRAIT",
+ "truncate_table": false,
+ "page_footer_text": "Sample footer text"
+ }
}'
----
diff --git a/modules/ROOT/pages/deprecated-features.adoc b/modules/ROOT/pages/deprecated-features.adoc
index 4c977b11e..06089a22d 100644
--- a/modules/ROOT/pages/deprecated-features.adoc
+++ b/modules/ROOT/pages/deprecated-features.adoc
@@ -14,6 +14,8 @@ As ThoughtSpot applications evolve, some existing features will be deprecated an
[options='header']
|=====
|Feature|Impacted interface and release versions|Deprecation date |End of Support / removal from the product
+a|xref:deprecated-features.adoc#hostEventv1[HostEvent v1 framework]
+|ThoughtSpot Cloud 26.10.0.cl and later | October 2026 | March 2027
a|xref:deprecated-features.adoc#v1-v2-exp-fullApp-embed[V1 and V2 UI experience in full application embedding]|ThoughtSpot Cloud 26.8.0.cl and later | February 2026 | August 2026
a|xref:deprecated-features.adoc#PNGFlowDeprecation[Select PNG export options] a|ThoughtSpot Cloud 26.4.0.cl and later | April 2026 | August 2026
a|xref:deprecated-features.adoc#variableApis[Variable APIs] a|ThoughtSpot Cloud 26.4.0.cl and later | April 2026 | October 2026
@@ -85,6 +87,18 @@ a|xref:deprecated-features.adoc#_deprecated_parameter_in_rest_api_v2_0_authentic
||||
|=====
+[#hostEventv1]
+== HostEvent v1 framework in Visual Embed SDK
+The HostEvent v1 framework will be deprecated in the ThoughtSpot Cloud 26.10.0.cl release version. The default behavior of host events and application workflows with the HostEvent v1 framework will be replaced with the HostEvent v2 framework.
+
+Impact on your instance::
+Embedding applications with integrations and workflows that use HostEvent objects to trigger actions will benefit from enhanced event handling, routing behavior, and payload validation. If your embedded interface includes multi-layered interactions, event routing will be context-aware and deterministic.
+Embedding applications with integrations and workflows that use HostEvent objects to trigger actions will experience improved event handling, routing behavior, and payload validation. If your embedded interface includes multi-layered interactions, event routing will be context-aware and deterministic. For more information, see xref:events-context-aware-routing.adoc[Context-based execution of host events].
+
+Recommended actions::
+If you are using the HostEvent v1 framework in your embed, ThoughtSpot recommends migrating to the HostEvent v2 framework in your development environment and evaluating the event behavior and impact on custom workflows and integrations. +
+For migration and feature rollout guidelines, refer to the xref:hosteventsv2-migration.adoc[HostEvent v2 migration guide].
+
[#v1-v2-exp-fullApp-embed]
== V1 and V2 navigation and home page experience in full app embed
Starting with ThoughtSpot 26.8.0.cl, the V3 navigation and home page experience will be set as the default UI experience in full application embedding. The V1 and V2 navigation and home page experience will be deprecated and will no longer be supported.
diff --git a/modules/ROOT/pages/embed-event-error-best-practices.adoc b/modules/ROOT/pages/embed-event-error-best-practices.adoc
index d69bbf840..e9bdc49f0 100644
--- a/modules/ROOT/pages/embed-event-error-best-practices.adoc
+++ b/modules/ROOT/pages/embed-event-error-best-practices.adoc
@@ -2,12 +2,12 @@
:toc: true
:toclevels: 2
-:page-title: Embed events
+:page-title: Handling embed errors
:page-pageid: handling-embed-errors
:page-description: This document lists the best practices for handling error events.
The ThoughtSpot Visual Embed SDK provides a layered approach to error
-handling. `EmbedEvent.Error` is a real-time outbound event emitted from the embedded ThoughtSpot iframe to the host application, signaling that something has gone wrong, either inside the SDK itself, inside the embedded app (the iFrame), or as a result of an invalid HostEvent payload sent by the host.
+handling. `EmbedEvent.Error` is a real-time outbound event emitted from the embedded ThoughtSpot iframe to the host application, signaling that something has gone wrong, either inside the SDK itself, inside the embedded app (the iframe), or as a result of an invalid HostEvent payload sent by the host.
Unlike most embed events, which are cached and can be replayed on late subscribers, `EmbedEvent.Error` is not cached or replayed. Every emission is independent, and a handler must be registered before an error occurs to receive it.
@@ -70,7 +70,7 @@ When the host sends a HostEvent with an invalid payload or a context mismatch, t
If `shouldBypassPayloadValidation: true`, validation failures are silently logged as console warnings and never reach your `EmbedEvent.Error` handler.
====
-==== Runtime filter or cross-filter errors
+=== Runtime filter or cross-filter errors
Filter operations can fail inside the iframe with typed errors:
[cols="2,3", options="header"]
@@ -152,7 +152,7 @@ LiveboardEmbed.on(EmbedEvent.Error, (error) => {
// } }}
})
----
-|`SINGLE_VALUE_FILTER` a| Error in updating filter values. This error occurs when a single-value filter is applied on a Liveboard and the user tries to update this filter with multiple values.
+|`SINGLE_VALUE_FILTER` a| Error in updating filter values. This error occurs when a single-value filter is applied to a Liveboard and the user tries to update this filter with multiple values.
[source,JavaScript]
----
@@ -307,136 +307,110 @@ try {
=== Error handling guidelines
[cols="2,4", options="header"]
-|===
+|=====
| Error category | Detection and recovery
| SDK init config error
-a| Detection mechanism::
-`EmbedEvent.Error` + `logger.error`
-
-Payload/data::
- `{ error: string }`
+a|**Detection mechanism**: `EmbedEvent.Error` +
-Recovery action::
-Fix configuration. Recreate and render embed
+**Payload/data**: `{ error: string }`
+**Recovery action**: Fix configuration. Recreate and render embed.
| Auth failure (SDK layer)
a|
-Detection mechanism::
-`AuthStatus.FAILURE` on init emitter
-
-Payload/data::
-`AuthFailureType`
+**Detection mechanism**: `AuthStatus.FAILURE` on init emitter
-Recovery action::
-Check `getAuthToken` / credentials. Use `suppressErrorAlerts` for custom UI.
+**Payload/data**: `AuthFailureType`
+**Recovery action**: Check `getAuthToken` and credentials. Use `suppressErrorAlerts` for custom UI.
| Auth failure (iframe layer)
a|
-Detection mechanism::
-`EmbedEvent.AuthFailure`
+**Detection mechanism**: `EmbedEvent.AuthFailure` +
-Recovery action::
-Show login prompt. Recreate and render embed.
+**Recovery action**: Show login prompt. Recreate and render embed.
| Session expired
-a|Detection mechanism::
-`EmbedEvent.AuthExpire`
+a|**Detection mechanism**: `EmbedEvent.AuthExpire`
-Recovery action::
-Refresh token. Use `autoLogin: true` for a transparent refresh.
+**Recovery action**: Refresh token. Use `autoLogin: true` for a transparent refresh.
| Idle session timeout
-a|Detection mechanism::
-`EmbedEvent.IdleSessionTimeout` +
-`AuthStatus.FAILURE(IDLE_SESSION_TIMEOUT)`
-Recovery action::
-Use `autoLogin: true`. Prompt re-authentication.
+a|**Detection mechanism**: `EmbedEvent.IdleSessionTimeout` and `AuthStatus.FAILURE(IDLE_SESSION_TIMEOUT)`
+
+**Recovery action**: Use `autoLogin: true`. Prompt re-authentication.
+
+|Third-party cookies blocked
-| Third-party cookies blocked
-a|Detection mechanism::
-`EmbedEvent.NoCookieAccess` +
-`AuthStatus.FAILURE(NO_COOKIE_ACCESS)`
-Recovery action::
-Switch to `TrustedAuthTokenCookieless`; use `ignoreNoCookieAccess: true` to suppress alert.
+a|**Detection mechanism**: `EmbedEvent.NoCookieAccess` and `AuthStatus.FAILURE(NO_COOKIE_ACCESS)`
+
+**Recovery action**: Switch to `TrustedAuthTokenCookieless`. Use `ignoreNoCookieAccess: true` to suppress alert.
| User logout
-a|Detection mechanism::
-`EmbedEvent.AuthLogout` + `AuthStatus.LOGOUT`
-Recovery action::
-Redirect to login or clear state
+a|**Detection mechanism**: `EmbedEvent.AuthLogout` and `AuthStatus.LOGOUT`
+
+**Recovery action**: Redirect to login or clear state
| Duplicate token
-a|Detection mechanism::
-`AuthStatus.FAILURE(SDK)` + `alert()` (suppressible)
-Payload/data::
-`DUPLICATE_TOKEN_ERR` string
-Recovery action::
-Always return a fresh token from `getAuthToken`
+a|**Detection mechanism**: `AuthStatus.FAILURE(SDK)` and `alert()` (suppressible)
+
+**Payload/data**: `DUPLICATE_TOKEN_ERR` string
+
+**Recovery action**: Always return a fresh token from `getAuthToken`.
| Invalid token
-a|Detection mechanism::
-`AuthStatus.FAILURE(SDK)` +
-`logger.error`
-Payload/data::
-`INVALID_TOKEN_ERROR` string
-Recovery action::
-Verify token generation on the server
+a|**Detection mechanism**: `AuthStatus.FAILURE(SDK)` and `logger.error`
+
+**Payload/data**: `INVALID_TOKEN_ERROR` string
+
+**Recovery action**: Verify token generation on the server.
| Network offline
-a|Detection mechanism::
-`EmbedEvent.Error`
-Payload/data::
-`{ offlineWarning: string }`
-Recovery action::
-Show offline UI. Reconnect and reload
+a| **Detection mechanism**: `EmbedEvent.Error`
+
+**Payload/data**: `{ offlineWarning: string }`
+**Recovery action**: Show offline UI. Reconnect and reload.
| HostEvent validation error
-a|Detection mechanism::
-`EmbedEvent.Error`
-Payload/data::
- `{ type, code: "HOST_EVENT_VALIDATION", message }`
-Recovery action::
-Fix the `HostEvent` payload; enable `useHostEventsV2: true` in development
+a|**Detection mechanism**: `EmbedEvent.Error`
+
+**Payload/data**: `{ type, code: "HOST_EVENT_VALIDATION", message }`
+
+**Recovery action**: Fix the `HostEvent` payload; enable `useHostEventsV2: true` in development
| HostEvent timeout (30 seconds)
-a|Detection mechanism::
- `trigger()` resolves with `Error`
-Payload/data::
- `Error("Trigger timed-out...")`
-Recovery action::
-Check if iframe is still mounted. Call `reload()` if needed
+a|**Detection mechanism**: `trigger()` resolves with `Error`
+
+**Payload/data**: `Error("Trigger timed-out...")`
+
+**Recovery action**: Check if iframe is still mounted. Call `reload()` if needed
| HostEvent iframe rejection
-a|Detection mechanism::
-`trigger()` rejects
-Payload/data::
-Error from iframe
-Recovery action::
-Inspect the rejection payload; see HostEvent validation error above
+a|**Detection mechanism**: `trigger()` rejects
+
+**Payload/data**: Error from iframe
+**Recovery action**: Inspect the rejection payload; see HostEvent validation error above
| Filter errors at runtime
-a|Detection mechanism::
-`EmbedEvent.Error`
-Payload/data::
-`eventErrorType` message string
-Recovery action::
-Fix filter parameters. Validate against current Liveboard/answer filters
-|===
+a|**Detection mechanism**: `EmbedEvent.Error`
+
+**Payload/data**: `eventErrorType` message string
+**Recovery action**: Fix filter parameters. Validate against current Liveboard/answer filters.
+|=====
== Best practices
* Always register an event listener for `EmbedEvent.Error` on your embed instance to capture and handle errors emitted by the embedded ThoughtSpot application. Register `EmbedEvent.Error` before calling `render()`.
* Inspect and categorize error payloads. The error event provides a payload with fields such as errorType, message, and code. Do not assume that `payload.error` always exists in `EmbedEvent.Error`. Offline errors use `offlineWarning`; validation errors use `code`.
+* Do not destroy the embed on errors. First, inspect the errors to determine if you need to display host fallback pages. Not all events are fatal. ThoughtSpot handles some failures internally, so only take action if necessary based on the specific error and event type.
* Provide contextual and user-friendly error messages based on the errorType and error details. Avoid exposing raw error objects or stack traces to your application users.
* Enable `useHostEventsV2: true` in development/staging to surface `HostEvent` payload errors early.
* Log errors for diagnostics.
@@ -449,7 +423,7 @@ Try out the embed events in the +++