From f457426fddac365e37ca5cc54e46738fe9220d92 Mon Sep 17 00:00:00 2001 From: ShashiSubramanya <76986173+ShashiSubramanya@users.noreply.github.com> Date: Tue, 15 Sep 2026 17:47:33 +0530 Subject: [PATCH 01/33] docs(26.10.0.cl): add Spotter Analyst API reference page [SCAL-317811] --- modules/ROOT/pages/spotter-analyst-api.adoc | 389 ++++++++++++++++++++ 1 file changed, 389 insertions(+) create mode 100644 modules/ROOT/pages/spotter-analyst-api.adoc diff --git a/modules/ROOT/pages/spotter-analyst-api.adoc b/modules/ROOT/pages/spotter-analyst-api.adoc new file mode 100644 index 000000000..5375e876f --- /dev/null +++ b/modules/ROOT/pages/spotter-analyst-api.adoc @@ -0,0 +1,389 @@ += Spotter Analyst API +:toc: true +:toclevels: 2 + +:page-title: Spotter Analyst API +:page-pageid: spotter-analyst-api +:page-description: Create, search, update, and delete Spotter Analysts using the REST API + +// SOURCE: SCAL-317811; create-analyst.md, search-analyst.md, update-analyst.md, delete-analyst.md + +ThoughtSpot Spotter Analysts are governed AI agents, each configured with a name, description, one or more data sources, and optional instructions, MCP connectors, and starter prompts. Users converse with an Analyst directly in the Spotter interface. + +The Spotter Analyst REST API lets you create, search, update, and delete Analysts programmatically. +All endpoints are under `/api/rest/2.0/ai/agent/analysts/` and are available from ThoughtSpot Cloud 26.10.0.cl. + +== Prerequisites + +* Spotter must be enabled on your ThoughtSpot instance. Contact ThoughtSpot Support to enable it. +* All requests require a Bearer token. Use a token scoped to the Org in which the Analyst exists or should be created. +* Privilege requirements vary by operation. See each endpoint section for details. + +== Analyst object + +Each Analyst has the following fields: + +[cols="1,1,3"] +|=== +| Field | Type | Description + +| `id` +| string +| Server-assigned unique identifier. + +| `name` +| string +| Display name of the Analyst. + +| `description` +| string +| Description of the Analyst. Maximum 200 characters. + +| `instructions` +| string +| Optional natural-language behavior guidelines for the agent. + +| `sources` +| array +| Data sources the Analyst can query. Each source includes an `id`, `type`, and display `name`. Supported types: `MODEL`, `ANSWER`, `LIVEBOARD`, `CONVERSATION`. + +| `mcp_connectors` +| array +| Linked MCP connectors. Each connector includes `id`, `name`, and `icon_url`. + +| `starter_prompts` +| array +| Up to 4 suggested prompts shown on the Analyst landing page. Each entry includes `label`, `text`, `order`, and `is_ai_generated`. + +| `icon_id` +| string +| Analyst icon identifier. Analysts created via the API use the default icon until one is set in the UI. + +| `updated_time_in_millis` +| integer +| Epoch timestamp in milliseconds of the last update. + +| `last_accessed_time_in_millis` +| integer +| Epoch timestamp in milliseconds of the last access. + +| `created_by` +| object +| User who created the Analyst. Includes `id`, `name`, and `display_name`. + +| `updated_by` +| object +| User who last updated the Analyst. Includes `id`, `name`, and `display_name`. +|=== + +== Create Analyst + +`POST /api/rest/2.0/ai/agent/analysts/create` + +Creates a Spotter Analyst. Analysts created via the API use the default icon until one is set in the ThoughtSpot UI. + +=== Privileges required + +At least one of the following: `ADMINISTRATION`, `CAN_MANAGE_SPOTTER`, or `CAN_USE_SPOTTER`. The caller must also have view access to every data source listed in `sources`. + +=== Request parameters + +[cols="1,1,1,3"] +|=== +| Parameter | Type | Required | Description + +| `name` +| string +| Required +| Display name of the Analyst. + +| `description` +| string +| Required +| Description of the Analyst. Maximum 200 characters. + +| `sources` +| array +| Required +| At least one data source. Each entry requires an `identifier` and a `type` (`MODEL`, `ANSWER`, `LIVEBOARD`, or `CONVERSATION`). The `name` field is optional. The caller must have view access to every referenced source. + +| `instructions` +| string +| Optional +| Natural-language instructions that guide the agent's behavior. Instructions that conflict with system guardrails are rejected with a `409` error. + +| `mcp_connector_identifiers` +| array +| Optional +| Identifiers of MCP connectors to link to the Analyst. + +| `starter_prompts` +| array +| Optional +| Up to 4 plain-text prompts, each between 10 and 250 characters. Display order follows list position. +|=== + +=== Response + +Returns `200 OK` and the created `Analyst` object, including the server-assigned `id`. + +=== Example + +[source,bash] +---- +curl -X POST \ + --url 'https://{cluster}/api/rest/2.0/ai/agent/analysts/create' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {token}' \ + --data-raw '{ + "name": "Revenue Analyst", + "description": "Answers revenue questions using the Sales data model.", + "sources": [ + { + "identifier": "{model-guid}", + "type": "MODEL" + } + ], + "instructions": "Focus on year-over-year comparisons. Do not surface raw transaction data.", + "starter_prompts": [ + "What was total revenue last quarter?", + "Compare revenue by region for the past 12 months." + ] +}' +---- + +=== Error responses + +[cols="1,3"] +|=== +| HTTP status code | Description + +| 400 | Malformed request. +| 401 | Bearer token is missing, expired, or invalid. +| 403 | Insufficient privileges, or the caller does not have view access to a referenced data source. +| 409 | The `instructions` value conflicts with system guardrails. +| 422 | Validation failure: a required field is missing, `sources` is empty, the starter prompt count exceeds 4, or a field-length limit is violated. +| 429 | Rate limit exceeded. +| 500 | Unexpected server error. +|=== + +== Search Analysts + +`POST /api/rest/2.0/ai/agent/analysts/search` + +Returns Analysts visible to the caller. This endpoint operates in two modes: + +Fetch mode:: Provide `analyst_identifier` to retrieve a single Analyst. All other filters are ignored and `total_size` is `1`. +List mode:: Omit `analyst_identifier` to get a paginated list of Analysts, ordered by most recently accessed. + +=== Privileges required + +At least one of the following: `ADMINISTRATION`, `CAN_MANAGE_SPOTTER`, or `CAN_USE_SPOTTER`. + +=== Request parameters + +[cols="1,1,1,3"] +|=== +| Parameter | Type | Required | Description + +| `analyst_identifier` +| string +| Optional +| When provided, returns exactly this Analyst. All other filters are ignored. + +| `record_size` +| integer +| Optional +| Number of records per page. Default: `50`. Range: 1 to 500. + +| `record_offset` +| integer +| Optional +| Zero-based index of the first record. Default: `0`. Maximum: `10000`. + +| `query` +| string +| Optional +| Case-insensitive substring match on Analyst name. + +| `type` +| string +| Optional +| Ownership filter. Accepted values: `ALL` (default, returns Analysts created by or shared with the caller), `CREATED_BY_ME`, or `SHARED_TO_ME`. +|=== + +=== Response + +Returns `200 OK` and an `AnalystSearchResponse` object with: + +* `analysts`: the current page of matching `Analyst` objects. +* `total_size`: total count of matching Analysts before pagination. + +=== Example: list all Analysts + +[source,bash] +---- +curl -X POST \ + --url 'https://{cluster}/api/rest/2.0/ai/agent/analysts/search' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {token}' \ + --data-raw '{ + "record_size": 50, + "record_offset": 0, + "type": "ALL" +}' +---- + +=== Example: fetch a single Analyst + +[source,bash] +---- +curl -X POST \ + --url 'https://{cluster}/api/rest/2.0/ai/agent/analysts/search' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {token}' \ + --data-raw '{ + "analyst_identifier": "{analyst-guid}" +}' +---- + +=== Error responses + +[cols="1,3"] +|=== +| HTTP status code | Description + +| 403 | Missing privileges, or (fetch mode) the caller does not have access to the requested Analyst. +| 404 | (Fetch mode) No Analyst with the given identifier exists in the caller's Org. +| 422 | `record_size` or `record_offset` is out of the permitted range. +|=== + +== Update Analyst + +`POST /api/rest/2.0/ai/agent/analysts/{analyst_identifier}/update` + +Updates a Spotter Analyst. The update is a full replace: the Analyst is rewritten from the request body. Any optional field omitted from the request is cleared. Include all fields you want to retain. + +When new sources are added, they are automatically shared with users the Analyst was previously shared with. Those users retain access to a working Analyst. + +=== Privileges required + +The caller must be the owner of the Analyst, or hold `ADMINISTRATION` or `CAN_MANAGE_SPOTTER` privileges. Users the Analyst is shared with can use it but cannot edit it. + +=== Path parameter + +`analyst_identifier`: unique ID of the Analyst to update, as returned by the Create Analyst or Search Analysts endpoint. + +=== Request parameters + +The request body uses the same shape as Create Analyst: `name`, `description`, `sources`, `instructions`, `mcp_connector_identifiers`, and `starter_prompts`. + +=== Response + +Returns `200 OK` and the updated `Analyst` object, including the refreshed `updated_time_in_millis` and `updated_by` fields. + +=== Example + +[source,bash] +---- +curl -X POST \ + --url 'https://{cluster}/api/rest/2.0/ai/agent/analysts/{analyst_identifier}/update' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {token}' \ + --data-raw '{ + "name": "Revenue Analyst v2", + "description": "Updated to include APAC data model.", + "sources": [ + { + "identifier": "{model-guid}", + "type": "MODEL" + }, + { + "identifier": "{apac-model-guid}", + "type": "MODEL" + } + ], + "starter_prompts": [ + "What was total revenue last quarter?", + "Compare revenue by region for the past 12 months.", + "Show top 10 products by APAC revenue." + ] +}' +---- + +[NOTE] +==== +The update is a full replace. Omitting `instructions`, `mcp_connector_identifiers`, or `starter_prompts` clears those fields on the Analyst. Include every field you want to keep. +==== + +=== Error responses + +[cols="1,3"] +|=== +| HTTP status code | Description + +| 400 | Malformed `analyst_identifier`. +| 401 | Bearer token is missing, expired, or invalid. +| 403 | The caller is not the Analyst owner and does not hold admin or Spotter-management privileges. +| 404 | No Analyst with the given identifier exists in the caller's Org. +| 409 | The `instructions` value conflicts with system guardrails. +| 422 | Validation failure: a required field is missing, `sources` is empty, the starter prompt count exceeds 4, or a field-length limit is violated. +| 429 | Rate limit exceeded. +| 500 | Unexpected server error. +|=== + +== Delete Analyst + +`POST /api/rest/2.0/ai/agent/analysts/{analyst_identifier}/delete` + +Permanently deletes a Spotter Analyst. This operation is irreversible. Deleted Analysts cannot be recovered. + +=== Privileges required + +The caller must be the owner of the Analyst, or hold `ADMINISTRATION` or `CAN_MANAGE_SPOTTER` privileges. Users the Analyst is shared with cannot delete it. + +=== Path parameter + +`analyst_identifier`: unique ID of the Analyst to delete, as returned by the Create Analyst or Search Analysts endpoint. + +=== Request body + +None. + +=== Response + +Returns `200 OK` and an `AnalystDeleteResponse` object containing the `id` of the deleted Analyst. + +=== Example + +[source,bash] +---- +curl -X POST \ + --url 'https://{cluster}/api/rest/2.0/ai/agent/analysts/{analyst_identifier}/delete' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {token}' +---- + +=== Error responses + +[cols="1,3"] +|=== +| HTTP status code | Description + +| 400 | Malformed `analyst_identifier`. +| 401 | Bearer token is missing, expired, or invalid. +| 403 | The caller is not the Analyst owner and does not hold admin or Spotter-management privileges. +| 404 | No Analyst with the given identifier exists in the caller's Org. +| 429 | Rate limit exceeded. +| 500 | Unexpected server error. +|=== + +== Related resources + +* xref:embed-spotter-analyst.adoc[Embed Spotter Analyst] +* xref:rest-api-v2-reference.adoc[REST API v2 reference] +* xref:privileges-and-roles.adoc[Privileges and roles] From f67361a83ea34474ac01799c263228b2436730fe Mon Sep 17 00:00:00 2001 From: ShashiSubramanya <76986173+ShashiSubramanya@users.noreply.github.com> Date: Tue, 15 Sep 2026 17:48:22 +0530 Subject: [PATCH 02/33] docs(26.10.0.cl): add Feature Management API reference page [SCAL-319281] --- .../ROOT/pages/feature-management-api.adoc | 366 ++++++++++++++++++ 1 file changed, 366 insertions(+) create mode 100644 modules/ROOT/pages/feature-management-api.adoc diff --git a/modules/ROOT/pages/feature-management-api.adoc b/modules/ROOT/pages/feature-management-api.adoc new file mode 100644 index 000000000..7e85dab14 --- /dev/null +++ b/modules/ROOT/pages/feature-management-api.adoc @@ -0,0 +1,366 @@ += Feature Management API +:toc: true +:toclevels: 2 + +:page-title: Feature Management API +:page-pageid: feature-management-api +:page-description: Search feature configurations, assign features to Orgs, and set feature values using the REST API + +// SOURCE: SCAL-319281; search-feature.md, update-feature-assignment.md, updated-feature-value.md + +The Feature Management API lets cluster and Org admins retrieve feature configurations, assign features to Orgs, and set feature values programmatically. These endpoints replicate the feature management capabilities available in the Admin Portal 2.0 UI. + +All endpoints are under `/api/rest/2.0/configurations/features/` and are available from ThoughtSpot Cloud 26.10.0.cl. + +== Prerequisites + +* Feature Management must be enabled on your ThoughtSpot instance. +* All requests require a Bearer token. +* If link:https://developers.thoughtspot.com/docs/rbac[Role-Based Access Control (RBAC)] is enabled on your instance, the `ADMINISTRATION` privilege is required for all write operations. +* Privilege requirements vary by operation. See each endpoint section for details. + +== Key concepts + +=== Feature scope + +Feature configurations exist at two levels: + +Cluster scope:: The cluster-level default, visible to cluster admins. Returns `assigned_orgs` and `is_org_aware` for each feature. +Org scope:: A per-Org value override, visible to Org admins. Returns `element_type`, `element_config`, and `element_value` for each feature. + +=== Feature identifiers + +Each feature can be referenced by its: + +* `feature_name`: a human-readable name, such as `index_columns`. +* `feature_id`: the underlying system identifier, such as `orion.embraceConfig.doIndexing`. + +Both forms are accepted in requests to any endpoint that takes a `feature_identifier`. + +=== Feature categories + +Features are grouped into availability categories: + +* `GENERAL_ACCESS`: generally available features. This is the default. +* `EARLY_ACCESS`: features in early access. + +== Search features + +`POST /api/rest/2.0/configurations/features/search` + +Returns feature configurations available on the ThoughtSpot instance, grouped by feature group. + +=== Privileges required + +`ADMINISTRATION` or `ORG_ADMINISTRATION`. + +=== Request parameters + +[cols="1,1,1,3"] +|=== +| Parameter | Type | Required | Description + +| `scope` +| string +| Required +| Administrative view: `CLUSTER` returns the cluster-admin view, including `assigned_orgs` per feature. `ORG` returns the Org-admin view, including `element_value` per feature. + +| `org_identifier` +| integer +| Conditional +| Numeric ID of the Org. Required when `scope` is `ORG`. Omitting it returns a `400` error. Ignored when `scope` is `CLUSTER`. + +| `category` +| string +| Optional +| Feature availability category: `GENERAL_ACCESS` (default) or `EARLY_ACCESS`. +|=== + +=== Response fields by scope + +The response fields populated depend on the requested `scope`. + +*Cluster view (`scope=CLUSTER`)*: each feature includes `feature_id`, `feature_name`, `assigned_orgs`, `is_org_aware`, and (for non-Org-aware features) `feature_value`. + +*Org view (`scope=ORG`)*: each feature includes `feature_id`, `feature_name`, `element_type`, `element_config`, and `element_value`. + +=== Example: cluster view + +[source,bash] +---- +curl -X POST \ + --url 'https://{cluster}/api/rest/2.0/configurations/features/search' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {token}' \ + --data-raw '{ + "scope": "CLUSTER", + "category": "GENERAL_ACCESS" +}' +---- + +=== Example: Org view + +[source,bash] +---- +curl -X POST \ + --url 'https://{cluster}/api/rest/2.0/configurations/features/search' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {token}' \ + --data-raw '{ + "scope": "ORG", + "org_identifier": 1, + "category": "GENERAL_ACCESS" +}' +---- + +=== Example response (cluster view) + +[source,json] +---- +[ + { + "feature_group": "search", + "docs_url": null, + "features": [ + { + "feature_id": "orion.embraceConfig.doIndexing", + "feature_name": "index_columns", + "assigned_orgs": [ + { + "org_id": 0, + "org_name": "Primary" + } + ], + "is_org_aware": true, + "feature_value": null, + "docs_url": null + } + ] + } +] +---- + +=== Error responses + +[cols="1,3"] +|=== +| HTTP status code | Description + +| 400 | Invalid request parameters, or `org_identifier` is missing when `scope` is `ORG`. +| 401 | Bearer token is missing, expired, or invalid. +| 403 | Insufficient privileges. +| 404 | Feature Management is not enabled on this instance. +| 500 | Unexpected server error. +|=== + +== Update feature assignments + +`POST /api/rest/2.0/configurations/features/assignments/update` + +Updates the Org assignments for a feature. Available to cluster admins only. Org-scoped admins cannot call this endpoint. + +=== Privileges required + +`ADMINISTRATION` in the cluster-admin (All-Org or default-Org) context. + +=== Request parameters + +[cols="1,1,1,3"] +|=== +| Parameter | Type | Required | Description + +| `feature_identifier` +| string +| Required +| Feature name (`feature_name`) or feature ID (`feature_id`) of the feature to update. + +| `org_identifiers` +| array +| Required +| Numeric IDs of the Orgs to assign. Send an empty array with `operation` set to `REPLACE` to remove all Org assignments for this feature. + +| `operation` +| string +| Optional +| Type of assignment update: `ADD` assigns the given Orgs in addition to existing assignments, `REMOVE` unassigns the given Orgs, or `REPLACE` sets the assignment to exactly the given Orgs. Defaults to `REPLACE`. +|=== + +=== Response + +Returns `200 OK` and a `FeatureAssignmentResponse` object with `feature_id`, `feature_name`, and the updated `assigned_orgs` list. + +=== Example: add Org assignments + +[source,bash] +---- +curl -X POST \ + --url 'https://{cluster}/api/rest/2.0/configurations/features/assignments/update' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {token}' \ + --data-raw '{ + "feature_identifier": "index_columns", + "org_identifiers": [1, 2], + "operation": "ADD" +}' +---- + +=== Example: remove all Org assignments + +[source,bash] +---- +curl -X POST \ + --url 'https://{cluster}/api/rest/2.0/configurations/features/assignments/update' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {token}' \ + --data-raw '{ + "feature_identifier": "index_columns", + "org_identifiers": [], + "operation": "REPLACE" +}' +---- + +=== Example response + +[source,json] +---- +{ + "feature_id": "orion.embraceConfig.doIndexing", + "feature_name": "index_columns", + "assigned_orgs": [ + { "org_id": 1, "org_name": "Acme" }, + { "org_id": 2, "org_name": "Beta" } + ] +} +---- + +=== Error responses + +[cols="1,3"] +|=== +| HTTP status code | Description + +| 400 | Invalid request parameters. +| 401 | Bearer token is missing, expired, or invalid. +| 403 | Insufficient privileges. Org-scoped admins cannot call this endpoint. +| 404 | Feature not found, or Feature Management is not enabled on this instance. +| 500 | Unexpected server error. +|=== + +== Update feature value + +`POST /api/rest/2.0/configurations/features/values/update` + +Sets the value of a feature at the cluster or Org scope. + +[WARNING] +==== +Setting `reset_org_overrides` to `true` at `CLUSTER` scope removes all per-Org value overrides cluster-wide. All Orgs then inherit the new cluster-level value. This operation cannot be undone via the API. +==== + +=== Privileges required + +`ADMINISTRATION`. + +=== Request parameters + +[cols="1,1,1,3"] +|=== +| Parameter | Type | Required | Description + +| `scope` +| string +| Required +| Scope at which to set the value: `CLUSTER` or `ORG`. + +| `org_identifier` +| integer +| Conditional +| Numeric ID of the Org for which to set the value. Required when `scope` is `ORG`. Ignored when `scope` is `CLUSTER`. + +| `feature_identifier` +| string +| Required +| Feature name (`feature_name`) or feature ID (`feature_id`) of the feature to update. + +| `feature_value` +| string +| Required +| New value to assign to the feature. + +| `reset_org_overrides` +| boolean +| Conditional +| Applicable only when `scope` is `CLUSTER`. When `true`, removes all existing per-Org value overrides so that every Org inherits the new cluster-level value. Required when `scope` is `CLUSTER` for Org-aware features. Passing this parameter at `ORG` scope returns a `400` error. +|=== + +=== Response + +Returns `200 OK` and a `FeatureValueResponse` object with `feature_id`, `feature_name`, and the updated `feature_value`. + +=== Example: set an Org-level override + +[source,bash] +---- +curl -X POST \ + --url 'https://{cluster}/api/rest/2.0/configurations/features/values/update' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {token}' \ + --data-raw '{ + "scope": "ORG", + "org_identifier": 1, + "feature_identifier": "index_columns", + "feature_value": "true" +}' +---- + +=== Example: set cluster value and reset all Org overrides + +[source,bash] +---- +curl -X POST \ + --url 'https://{cluster}/api/rest/2.0/configurations/features/values/update' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {token}' \ + --data-raw '{ + "scope": "CLUSTER", + "feature_identifier": "index_columns", + "feature_value": "true", + "reset_org_overrides": true +}' +---- + +=== Example response + +[source,json] +---- +{ + "feature_id": "orion.embraceConfig.doIndexing", + "feature_name": "index_columns", + "feature_value": "true" +} +---- + +=== Error responses + +[cols="1,3"] +|=== +| HTTP status code | Description + +| 400 | Invalid request, or `reset_org_overrides` was passed with `scope: ORG`. +| 401 | Bearer token is missing, expired, or invalid. +| 403 | Insufficient privileges, or the Org is not assigned to this feature. +| 404 | Feature not found, or Feature Management is not enabled on this instance. +| 500 | Unexpected server error. +|=== + +== Related resources + +* xref:rest-api-v2-reference.adoc[REST API v2 reference] +* xref:orgs-api.adoc[Orgs API] +* xref:privileges-and-roles.adoc[Privileges and roles] From 9dd6ea8fc906c4dfef9af5f508f072cff14c43be Mon Sep 17 00:00:00 2001 From: ShashiSubramanya <76986173+ShashiSubramanya@users.noreply.github.com> Date: Tue, 15 Sep 2026 17:49:21 +0530 Subject: [PATCH 03/33] docs(26.10.0.cl): add Embed Spotter Analyst page [SCAL-317811] --- modules/ROOT/pages/embed-spotter-analyst.adoc | 300 ++++++++++++++++++ 1 file changed, 300 insertions(+) create mode 100644 modules/ROOT/pages/embed-spotter-analyst.adoc diff --git a/modules/ROOT/pages/embed-spotter-analyst.adoc b/modules/ROOT/pages/embed-spotter-analyst.adoc new file mode 100644 index 000000000..badd322a1 --- /dev/null +++ b/modules/ROOT/pages/embed-spotter-analyst.adoc @@ -0,0 +1,300 @@ += Embed Spotter Analyst +:toc: true +:toclevels: 2 + +:page-title: Embed Spotter Analyst +:page-pageid: embed-spotter-analyst +:page-description: Embed a single, pinned Spotter Analyst in your application using the Visual Embed SDK + +// SOURCE: SCAL-317811, SDK-1.53.0-changelog.md, Spotter embed developer cheatsheet + +ThoughtSpot Spotter Analysts are governed AI agents configured with specific data sources, instructions, and starter prompts. Using the Visual Embed SDK, you can embed a single, pinned Analyst in your application. This locks the embed to one governed experience and prevents users from switching to other Analysts or to the default Spotter. + +== Version requirements + +[cols="1,2"] +|=== +| Component | Minimum version + +| Visual Embed SDK | 1.51.2 +| ThoughtSpot cluster | 26.10.0.cl +|=== + +[NOTE] +==== +Some controls described in this page are available on earlier cluster versions (26.3 through 26.9). The `spotterAnalystConfig.analystId` property itself requires cluster version 26.10.0.cl. Use 26.10.0.cl as the minimum version requirement when setting up the single-Analyst embed configuration. +==== + +== How it works + +Use `spotterAnalystConfig.analystId` in `SpotterEmbed` to pin the embed to one Analyst. By default, with no additional configuration, the Analyst panel and a switcher rail remain visible and users can navigate to other Analysts. To create a fully locked experience, you must also hide the switcher actions. + +== Minimal configuration + +The following example embeds one Analyst with the chat history sidebar disabled and the switcher hidden: + +[source,javascript] +---- +// In server-side rendered frameworks (Next.js, Nuxt, SvelteKit), +// import the SDK dynamically to avoid window reference errors. +const { init, SpotterEmbed, AuthType } = + await import('@thoughtspot/visual-embed-sdk'); + +init({ + thoughtSpotHost: 'https://{cluster}', + authType: AuthType.None, // uses the browser's existing session +}); + +new SpotterEmbed(container, { + frameParams: { width: '100%', height: '100%' }, + worksheetId: '{model-guid}', + + // Pin to one Analyst. + spotterAnalystConfig: { analystId: '{analyst-guid}' }, + + // Disable the chat history sidebar. + spotterSidebarConfig: { enablePastConversationsSidebar: false }, + + // Hide the switcher so users cannot navigate to a different Analyst. + hiddenActions: [ + 'spotterAnalystSidebar', + 'spotterDefaultAnalyst', + 'spotterAnalystList', + ], + + hideSourceSelection: true, + disableSourceSelection: true, +}).render(); +---- + +== Configuration reference + +=== `spotterAnalystConfig` + +Type: `SpotterAnalystConfig`. Available from SDK 1.53.0 and ThoughtSpot Cloud 26.10.0.cl. + +Available on `SpotterEmbedViewConfig`. Pins the embed to a single Analyst. + +[cols="1,1,1,3"] +|=== +| Property | Type | Cluster version | Description + +| `analystId` +| string +| 26.10.0.cl +| GUID of the Analyst to display. Obtain this value from the xref:spotter-analyst-api.adoc[Spotter Analyst API] or from the ThoughtSpot UI. +|=== + +=== `spotterSidebarConfig` + +Type: `SpotterSidebarViewConfig`. + +[cols="1,1,1,3"] +|=== +| Property | Type | Cluster version | Description + +| `enablePastConversationsSidebar` +| boolean +| 26.4.0.cl +| Shows or hides the chat history sidebar. Set this property explicitly. Leaving it unset applies the cluster default, which may be `true`. + +| `spotterChatPinConfig` +| `SpotterChatPinConfig` +| 26.10.0.cl +| Enables pinning and unpinning conversations in the sidebar. See xref:embed-spotter-analyst.adoc#pinning-conversations[Pinning conversations]. +|=== + +=== `worksheetId` and `dataSources` + +[cols="1,1,3"] +|=== +| Property | Cluster version | Description + +| `worksheetId` +| All +| GUID of the single model Spotter queries. Include this property alongside `spotterAnalystConfig`. Omitting it can prevent host-triggered questions from executing. + +| `dataSources` +| 26.9.0.cl +| Array of model GUIDs when the Analyst spans multiple models. If both `dataSources` and `worksheetId` are set, `dataSources` takes precedence. +|=== + +=== Locking the embed with `hiddenActions` + +Pinning an Analyst without hiding the switcher only changes the default selection. Users can still navigate to a different Analyst. Use the following three action IDs together to prevent this: + +[cols="1,1,1"] +|=== +| Action ID | What it hides | Cluster version + +| `spotterAnalystSidebar` +| The Analyst selection panel +| 26.8.0.cl + +| `spotterDefaultAnalyst` +| The default Spotter row +| 26.10.0.cl + +| `spotterAnalystList` +| The Show all Analysts row +| 26.10.0.cl +|=== + +[NOTE] +==== +An action ID not recognized by the cluster is silently dropped and does not cause an error. You can include all three action IDs even when targeting a cluster that does not yet support one of them. +==== + +If a narrow sidebar rail (expand toggle, New chat icon, or footer gear icon) remains visible after hiding these three actions, add the following shell-level action IDs. These are supported from cluster version 26.3.0.cl: + +[source,javascript] +---- +hiddenActions: [ + 'spotterAnalystSidebar', + 'spotterDefaultAnalyst', + 'spotterAnalystList', + 'spotterSidebarOpen', + 'spotterSidebarClose', + 'spotterNewConversation', + 'spotterSidebarSettings', +], +---- + +=== Starter prompts + +Use `starterPrompts` in `SpotterChatViewConfig` to customize the starter prompt pills displayed above the chat input. + +[cols="1,1,1,3"] +|=== +| Property | Type | Cluster version | Description + +| `starterPrompts` +| `StarterPromptsConfig` +| 26.10.0.cl +| Top-level configuration object for Spotter starter prompts. Contains keys: `enable`, `quick`, `research`, `previewData`, and `liveboard`. + +| `openSpotterOnLiveboardByDefault` +| boolean +| 26.10.0.cl +| Opens the Spotter chat panel automatically when a Liveboard loads. Default: `true`. Supported in `LiveboardEmbed` and `AppEmbed`. +|=== + +To show or hide individual starter prompt pills, use the `Action` enum: + +[cols="1,3"] +|=== +| Action | Description + +| `Action.QuickSearchPill` +| The Basic Search starter-prompt pill. Opens a card of suggested questions that submit on click. + +| `Action.DeepAnalysisPill` +| The Deep Analysis pill. Fills the chat input with a suggested question without auto-submitting. + +| `Action.DataLiteracyPill` +| The Data Literacy pill. Submits a backend-generated prompt describing the data source. Only its label is customizable. +|=== + +[source,javascript] +---- +hiddenActions: [ + Action.QuickSearchPill, + Action.DeepAnalysisPill, + Action.DataLiteracyPill, +], +---- + +[NOTE] +==== +Setting `hideSampleQuestions: true` hides both the generic sample questions and the Analyst's own starter prompts, as they share the same block. This is generally not the intended behavior when embedding a governed Analyst. +==== + +=== Pre-filling the chat input + +Use `searchOptions.searchQuery` to pre-fill the prompt. This does not submit the question. To submit it, also fire `HostEvent.SpotterSearch` with `executeSearch: true`. + +[source,javascript] +---- +new SpotterEmbed(container, { + searchOptions: { + searchQuery: 'What was total revenue last quarter?', + }, + // ... +}).render(); +---- + +[#pinning-conversations] +== Pinning conversations + +`SpotterChatPinConfig` lets users pin Spotter conversations so they appear at the top of the sidebar for quick access. Pinning is disabled by default in embedded deployments and must be explicitly enabled. + +[cols="1,1,1,3"] +|=== +| Property | Type | Default | Description + +| `enabled` +| boolean +| `false` +| Enables the pin and unpin actions in the conversation edit menu. Set to `true` to allow users to pin conversations. + +| `pinLabel` +| string +| System default +| Custom label for the pin action in the conversation edit menu. + +| `unpinLabel` +| string +| System default +| Custom label for the unpin action in the conversation edit menu. +|=== + +[source,javascript] +---- +new SpotterEmbed(container, { + spotterSidebarConfig: { + enablePastConversationsSidebar: true, + spotterChatPinConfig: { + enabled: true, + pinLabel: 'Save to top', + unpinLabel: 'Remove from top', + }, + }, + // ... +}).render(); +---- + +To listen for pin and unpin events, or to trigger pin state programmatically from the host application, see xref:event-embedEvents.adoc#pin-events[Spotter pin and unpin events] and xref:events-hostEvents.adoc#spotter-pin-host-events[Spotter conversation pin and unpin]. + +== New actions in SDK 1.53.0 + +The following `Action` enum members are new in SDK 1.53.0 and are relevant to Analyst embed: + +[cols="1,3"] +|=== +| Action | Description + +| `Action.SpotterChatPin` +| Controls visibility and disabled state of the pin and unpin action in the Spotter conversation edit menu. + +| `Action.SpotterAnalystList` +| Controls visibility and disabled state of the Show all Analysts row in the Analyst interface. + +| `Action.SpotterDefaultAnalyst` +| Controls visibility and disabled state of the default Spotter analyst entry in the Analyst interface. + +| `Action.SpotterOnLiveboard` +| The Spotter button in the Liveboard header. + +| `Action.AllLiveboardFilters` +| Shows, hides, or disables all filter surfaces on a Liveboard: filter chips, parameter chips, and cross-filter chips at the Liveboard, tab, and group levels. Parameter and cross-filter chips support hide only and cannot be disabled. + +| `Action.EditInputTable` +| Edits an input table used by an Answer directly from the Liveboard. +|=== + +== Related resources + +* xref:spotter-analyst-api.adoc[Spotter Analyst API] +* xref:event-embedEvents.adoc[Embed events reference] +* xref:events-hostEvents.adoc[Host events reference] +* xref:customize-spotter-embed.adoc[Customize Spotter embed] From 21a16ab5ee2381ea757c955b7b84b58fa666c022 Mon Sep 17 00:00:00 2001 From: ShashiSubramanya <76986173+ShashiSubramanya@users.noreply.github.com> Date: Tue, 15 Sep 2026 17:53:56 +0530 Subject: [PATCH 04/33] docs(26.10.0.cl): add October 2026 What's New section [SCAL-317811, SCAL-319281, SCAL-333470, SCAL-298005] --- modules/ROOT/pages/whats-new.adoc | 765 +++--------------------------- 1 file changed, 69 insertions(+), 696 deletions(-) diff --git a/modules/ROOT/pages/whats-new.adoc b/modules/ROOT/pages/whats-new.adoc index d9fc73c1f..0f911b881 100644 --- a/modules/ROOT/pages/whats-new.adoc +++ b/modules/ROOT/pages/whats-new.adoc @@ -22,6 +22,67 @@ This page lists new features, enhancements, and deprecated functionality introdu // *Status:* Current / Supported / Deprecated // *Affects:* Developers, Administrators, End Users // ============================================================ +== October 2026 + +**Release version**: ThoughtSpot Cloud 26.10.0.cl + +*Upgrade notes*: No breaking changes in this release. + +*Recommended SDK versions*: Visual Embed SDK v1.53.0 or later + +[.cl-table, cols="2,4", frame=none, grid=none] +|=== +a| +[.cl-label] +*Version 26.10.0.cl* + +a| + +[discrete] +==== Spotter Analyst API + +Spotter Analysts are governed AI agents you can create, configure, and manage programmatically using four new REST API endpoints under `/api/rest/2.0/ai/agent/analysts/`. Each Analyst is scoped to specific data sources and can be configured with a name, description, optional instructions, MCP connectors, and up to 4 starter prompts. The API supports create, search, update, and delete operations. For more information, see xref:spotter-analyst-api.adoc[Spotter Analyst API]. + +--- + +[discrete] +==== Embed Spotter Analyst + +You can now embed a single, pinned Spotter Analyst in your application using the Visual Embed SDK. The `spotterAnalystConfig.analystId` property in `SpotterEmbed` locks the embed to one governed Analyst experience. Combined with the `hiddenActions` list, you can prevent users from switching to other Analysts or to the default Spotter. For more information, see xref:embed-spotter-analyst.adoc[Embed Spotter Analyst]. + +--- + +[discrete] +==== Spotter conversation pinning + +Users can now pin Spotter conversations so they appear at the top of the conversation list for quick access. In embedded deployments, pinning is disabled by default and must be enabled using `spotterChatPinConfig` in `spotterSidebarConfig`. The SDK emits `EmbedEvent.SpotterConversationPinned` and `EmbedEvent.SpotterConversationUnpinned` when pin state changes. Use `HostEvent.PinSpotterConversation` and `HostEvent.UnpinSpotterConversation` to trigger pin state from the host application. The `is_pinned` field is also available on the Update Conversation endpoint (`POST /api/rest/2.0/ai/agent/conversations/{conversation_identifier}/update`). For more information, see xref:embed-spotter-analyst.adoc#pinning-conversations[Pinning conversations] and xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. + +--- + +[discrete] +==== Feature Management API + +Three new REST API endpoints are available under `/api/rest/2.0/configurations/features/` for programmatic feature management. Cluster and Org admins can search feature configurations by scope, assign features to Orgs, and set feature values without using the Admin Portal 2.0 UI. For more information, see xref:feature-management-api.adoc[Feature Management API]. + +--- + +[discrete] +==== Scoped Liveboard filtering + +ThoughtSpot 26.10.0.cl introduces a three-tier filter hierarchy on Liveboards: Liveboard level, tab level, and group level. You can enable group-level filter scoping in embedded Liveboards using the `isScopedLiveboardFilteringEnabled` property. The `HostEvent.GetGroups` event returns group details for the Liveboard. The `applicability` attribute on filter and parameter events scopes updates to a specific tab or group. For more information, see xref:embed-events.adoc[Events and app interactions] and xref:liveboard-embed.adoc[Embed a Liveboard]. + +--- + +[discrete] +==== Visual Embed SDK +For information about new features and enhancements in Visual Embed SDK version 1.53.0, see xref:api-changelog.adoc[Visual Embed SDK changelog]. + +--- + +[discrete] +==== REST API v2.0 +For information about REST API v2.0 enhancements in this release, see xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. + +|=== + == September 2026 **Release version**: ThoughtSpot Cloud 26.9.0.cl + @@ -155,715 +216,27 @@ The following features, previously in Early Access, are now generally available * Hide irrelevant filters (`hideIrrelevantChipsInLiveboardTabs`) + xref:embed-pinboard.adoc#_customizing_filter_visibility[Hides filters] that are not relevant to the displayed visualization in a tab. -* Compact header (`isLiveboardCompactHeaderEnabled`) + -Enables in compact header in embedded Liveboards. For information about breaking changes and the affected elements, see xref:embed-pinboard.adoc#compact-header[compact Liveboard header]. -* Cover page filtering options (`coverAndFilterOptionInPDF`) + -Enables the *Include cover page* and *Include filter page(s)* checkboxes in the Liveboard download modal. -* Liveboard styling and grouping (isLiveboardMasterpiecesEnabled) + -Enables the xref:embed-pinboard.adoc#_liveboard_grouping_and_styling[Liveboard styling and grouping] feature. -* Filter interactivity (`isEnhancedFilterInteractivityEnabled`) + -Enables interactive filter chips that allow users to add, update, or remove filters in an embedded Liveboard. - ---- - -[discrete] -==== Navigation and homepage V1/V2 deprecated [.version-badge.deprecated]#Deprecated# -Starting from ThoughtSpot Cloud 26.8.0.cl, the classic V1 and V2 navigation and homepage experience modes are deprecated. All ThoughtSpot Embedded sessions now render in the V3 navigation experience by default. For more information, see xref:deprecated-features.adoc#v1-v2-exp-fullApp-embed[V1 and V2 deprecation]. - ---- - -[discrete] -==== Wide logo dimension [.version-badge.breaking]#Breaking change# -Starting from ThoughtSpot Cloud 26.8.0.cl, the recommended dimensions for the wide logo displayed on the ThoughtSpot login page have changed from 330x100px to *250x50px (5:1 aspect ratio)*. Logos uploaded at the previous dimensions may appear distorted or incorrectly scaled on the login screen. If you previously uploaded a wide logo at 330x100px, re-upload it at 250x50px to ensure correct display. - -For more information, see xref:customize-style.adoc#logo-change[Customize the login page logo]. - ---- - - -[discrete] -==== Granular download privileges -The new granular download privileges that replace the single general download privilege for RBAC enabled clusters are now generally available. +* Compact header (`isLiveboardHeaderSticky`) + +xref:embed-pinboard.adoc#_liveboard_header[Enables a sticky compact header] for Liveboards that persists as users scroll. -* *Can Download Visuals*: Allows downloading chart images and visual exports. -* *Can Download Detailed Data*: Allows downloading raw tabular data (CSV, XLSX). - -These privileges can be assigned independently per user or group. Update privilege assignments in your embedded application accordingly. - ---- - -[discrete] -==== Personalized Views portability [earlyAccess eaBackground]#Early Access# -ThoughtSpot improves the portability of Personalized Views across environments. Import operations use smart merge logic to avoid duplicating Personalized Views. -Two new fields have been added to the TML for Personalized Views: - -* A new `author` field is added to the Personalized View TML during export. This field is used to assign ownership during import. -* Personalized Views now support `obj_id` for stable cross-environment object identity. - -For more information, see xref:tml-import.adoc#personalized-views-portability[Personalized Views portability]. +For more information, see xref:embed-pinboard.adoc[Embed a Liveboard]. --- [discrete] -==== Discoverability checkbox deprecation [.version-badge.breaking]#Breaking change# -The *Make this Liveboard Discoverable* checkbox has been removed from the ThoughtSpot UI. Embedding applications that relied on discoverability for content visibility should review their sharing logic and update user-facing guidance for content access. For more information, see xref:deprecated-features.adoc#liveboardDiscoverable[Deprecation announcements]. +==== Custom styles for embedded ThoughtSpot +Custom styles and CSS classes are now supported for embedded ThoughtSpot application components. For more information, see xref:custom-styles.adoc[Custom styles]. --- [discrete] -==== SpotterCode widget for documentation assistance -This developer documentation site now includes a SpotterCode AI assistant panel that replaces the earlier *AskDocs* feature. When you open the assistant panel, it displays prebuilt starter prompts relevant to the page you are currently viewing and allows you to explore topics instantly. You can also type your own questions about embedding, REST APIs, SDK configuration, and developer guides. For more information, see xref:spottercode.adoc[SpotterCode documentation]. +==== REST API v2.0 enhancements +For information about REST API v2.0 enhancements in this release, see xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. --- [discrete] ==== Visual Embed SDK -The Visual Embed SDK version 1.51.0 includes new features and enhancements for Spotter Analysts, starter prompts, and the `HostEvent.Navigate` object format. For more information, see the xref:api-changelog.adoc[Visual Embed SDK changelog]. - ---- - -[discrete] -==== REST API v2 -For information about REST API v2 enhancements in this release, see the xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. - ---- - -|=== - -== July 2026 - -**Release version**: ThoughtSpot Cloud 26.7.0.cl + -*Upgrade notes*: Includes breaking changes to SpotterCode + -*Recommended SDK versions*: Visual Embed SDK v1.50.0 and later - -[.cl-table, cols="2,4", frame=none, grid=none] -|=== -a| -[.cl-label] -*Version 26.7.0.cl* - -a| -[discrete] -==== SpotterViz for Liveboards [earlyAccess eaBackground]#Early Access# -You can now use SpotterViz in your embedding application to help your users build and edit Liveboards through a conversational interface. Instead of manually configuring charts and layouts, your users can describe what they want and SpotterViz generates the Liveboard for them, including the new tabs, chart types, data filters, and scheduled deliveries. - -For SpotterViz customization in embedded view, the Visual Embed SDK also provides several options to customize the SpotterViz panel experience. For more information, see xref:embed-spotterViz.adoc[SpotterViz in embedded Liveboards]. - ---- - -[discrete] -==== Spotter embedding - -Spotter file upload in embedded apps:: -Applications embedding the Spotter interface can now allow their users to xref:embed-spotter.adoc#_enable_file_upload_in_spotter_chat[upload files directly in the Spotter chat panel]. - -Spotter conversation history:: -You can now save your Spotter conversation and manage chat history using Spotter AI REST APIs. For more information, see xref:spotter-agent-conversation-mgmt-apis.adoc[APIs for managing saved conversations]. - -Spotter Agent instructions:: -You can configure and retrieve behavioral instructions for the Spotter agent using REST APIs. For more information, see xref:spotter-agent-instructions.adoc[Spotter AI agent instructions APIs]. - ---- - -[discrete] -==== Focused home page experience [earlyAccess eaBackground]#Early Access# - -In full application embedding with the V3 navigation and home page experience, ThoughtSpot provides an additional option to switch to the V4 focused home page experience. The focused home page experience provides a streamlined, contemporary experience along with the Spotter panel. For more information, see xref:full-app-customize.adoc[Customize full application embedding]. - ---- - -[discrete] -==== SpotterCode authentication and workflow execution [.version-badge.breaking]#Breaking# -SpotterCode now supports authenticated sessions with your ThoughtSpot instance. When connecting your MCP client to the SpotterCode endpoint, you are now prompted to log in using your organization's identity provider. After authentication, SpotterCode can make ThoughtSpot API calls on your behalf. - -For more information, see the documentation on xref:spottercode.adoc#_mcp_server_endpoints[SpotterCode MCP Server] and xref:spottercode-integration.adoc#_authenticate_spottercode[Authenticating SpotterCode]. - ---- - -[discrete] -==== SpotterCode Agent in Visual Embed Playground [earlyAccess eaBackground]#Early Access# - -The Visual Embed SDK Playground now includes SpotterCode Agent, an AI-powered coding assistant. The SpotterCode panel displays pre-built prompts relevant to the component you are embedding, provides a prompt interface for user queries, and generates embed code. It generates boilerplate code automatically and accelerates building code and iterating embed configurations. - -For more information, see xref:developer-playground.adoc#spottercode-panel[Using SpotterCode in the Playground]. - ---- - -[discrete] -==== Webhooks enhancements - -ThoughtSpot introduces the following features and enhancements for webhook configuration and management: - -* New Webhooks page in the UI [earlyAccess eaBackground]#Early Access# + -The *Develop* page now includes a xref:webhooks-ux.adoc[dedicated *Webhooks* page] for creating, managing, and monitoring webhooks within the Org context. -* Storage configuration retrieval + -The `GET /api/rest/2.0/webhooks/storage-config` REST API endpoint to xref:webhooks-api.adoc#_retrieving_storage_information_for_webhook_configuration[get storage configuration details]. -* GCS storage configuration for webhook delivery + -Administrators can now xref:webhooks-gcs-storage.adoc[configure Google Cloud Storage (GCS) buckets as a storage destination] for webhook payload delivery on GCP-hosted ThoughtSpot clusters. -* Webhook activation and deactivation + -You can enable or disable a webhook connection in the UI or through REST API. -* Selective configuration reset + -The xref:webhooks-api.adoc#_updating_a_webhook[webhook update API endpoint] supports the `reset_options` parameter to remove specific optional configuration sections without replacing the full webhook configuration. - ---- - - -[discrete] -==== Org isolation for per-org SAML and OIDC authentication -ThoughtSpot now enforces strict org isolation when users authenticate through a per-org identity provider (IdP). When a per-org IdP sends SAML or OIDC group claims that reference Orgs outside its authorized scope, ThoughtSpot silently drops those claims and records them as security audit events. This prevents a rogue IdP administrator in one Org from using group assertions to gain unauthorized access to another Org. Manually-assigned existing Org memberships are unaffected. For more information, see xref:orgs.adoc#per-org-sso-isolation[SSO and Org isolation]. - ---- - -[discrete] -==== Visual Embed SDK -The Visual Embed SDK version 1.50.0 includes several new features and enhancements. For more information, see the xref:api-changelog.adoc[Visual Embed changelog]. - ---- - -[discrete] -==== REST API v2 -For information about REST API v2 enhancements in this release, see the xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. - ---- - -|=== - -== June 2026 - -**Release version**: ThoughtSpot Cloud 26.6.0.cl + -*Upgrade notes*: No breaking changes. + -*Recommended SDK versions*: Visual Embed SDK v1.49.0 and later - -[.cl-table, cols="2,4", frame=none, grid=none] -|=== -a| -[.cl-label] -*Version 26.6.0.cl* - -a| -[discrete] -==== Chart and table overrides [.version-badge.new]#New# -You can now apply visualization overrides to charts and tables generated from a search query in ThoughtSpot search and full application embedding. The `visualOverrides` property in `SearchViewConfig` and `AppViewConfig` allows developers to apply at the embed initialization time: - -* Chart overrides + -Control legend visibility and position, data label display and per-column filter -thresholds, regression lines, grid lines, axis range and label settings, series -colors, and conditional formatting rules including font and background styling. -* Table overrides + -Control column visibility, text wrapping, row height and padding density, table -theme, and column summary visibility with per-column exceptions. - -For more information, see xref:viz-overrides.adoc[Configuring visualization overrides]. - ---- - -[discrete] -==== Spotter AI and embedding enhancements [.version-badge.new]#New# - -This release introduces the following enhancements for Spotter AI workflows and embedded Spotter applications. - -* Spotter embedding: + -Spotter now includes data literacy skills that help users understand the underlying data model. Users can ask Spotter to explain available data sources, fields, and relationships in plain language within a conversation session. -* Spotter AI APIs: + -//** New REST API endpoints to configure and retrieve persistent behavioral xref:spotter-agent-instructions.adoc[instructions for the Spotter agent]. - New API endpoint xref:spotter-agent-conversation-apis.adoc#_stop_an_in_progress_agent_response[stop and cancel a long-running Spotter response]. - ---- - -[discrete] -==== Developer page enhancements -The **Develop** page in the ThoughtSpot UI has been updated with the following enhancements: - -* The **Custom actions** list page now shows the code-based custom actions configured using the Visual Embed SDK. -* Removal of REST API v1 + -The legacy REST Playground v1 has been removed from the left navigation. This change does not affect your current integrations with v1 REST API. ThoughtSpot recommends that you update your integration workflows to use REST API v2. For more information, see xref:rest-api-v1v2-comparison.adoc[REST API v1 to v2 migration]. -* Removal of GraphQL playgrounds + -The menu link to the GraphQL playground has been removed from the UI. - -[discrete] -==== Liveboard browser cache refresh -To improve load performance and reduce reload times, you can now enable the Liveboard cache option with a **Refresh** button that lets your users clear the cache and refresh visualization data when required. For more information, see xref:api-changelog.adoc#_liveboard_browser_cache_refresh[Liveboard browser cache refresh]. - ---- - -[discrete] -==== Visual Embed SDK -The Visual Embed SDK version 1.49.0 includes several new features and enhancements. For more information, see the xref:api-changelog.adoc[Visual Embed changelog]. - ---- - -[discrete] -==== REST API v2 -This release introduces new API endpoints for Spotter, connections and trusted authentication. For information about REST API v2 enhancements, see the xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. - -|=== - - -== May 2026 - -**Release version**: ThoughtSpot Cloud 26.5.0.cl + -*Upgrade notes*: ⚠️ Includes breaking changes to Spotter APIs. Refer to the xref:rest-apiv2-changelog.adoc[REST API changelog] for more information. + -*Recommended SDK versions*: Visual Embed SDK v1.48.0 and later - - -[.cl-table, cols="2,4", frame=none, grid=none] -|=== -a| -[.cl-label] -*Version 26.5.0.cl* - -a| - - -[discrete] -==== Liveboard downloads - -Continuous Liveboard PDF export [beta betaBackground]^Beta^:: -In PDF downloads, Liveboard tabs can now be rendered in a single page matching the UI layout. This feature can be enabled by setting `isContinuousLiveboardPDFEnabled` to `true` in the SDK. Setting this flag to `false` returns to the paginated PDF view. - -Liveboard download in XLSX and CSV formats:: -Embedded Liveboards can now be downloaded in the PDF, XLSX and CSV file formats. To enable this feature, ensure that the `isLiveboardXLSXCSVDownloadEnabled` parameter is set to `true`. - -Excel exports for pivot tables:: -Pivot table visualizations can now be exported to Excel format. - -For more information, see xref:embed-pinboard.adoc#_liveboard_download_options[Liveboard download options]. - ---- - -[discrete] -==== Visualization edit interface within the Liveboard view - -Users can now edit the underlying query of an answer directly within the Liveboard. When this feature is enabled, the edit button for visualization appears in the answer's floating toolbar when the Liveboard is opened in the edit mode. Clicking the edit button opens the Answer interface preloaded with the answer's current query context. You can make the edits and save the changes without leaving the Liveboard. - ---- - -[discrete] -==== KPI charts in embedded Liveboards - -Embedded Liveboards support advanced controls KPI chart customization. For more information, see link:https://docs.thoughtspot.com/cloud/latest/chart-kpi#advanced[KPI charts]. - ---- - -[discrete] -==== Per-org and per-user timezone control via variables [beta betaBackground]^Beta^ - -You can centrally control timezone behavior per org and per user in embedded deployments using the new template variable `ts_user_timezone` and Variable APIs. - -For multi-org and multi-tenant environments, each tenant org and user can be configured independently, guaranteeing isolation and consistency of time-based analytics across regions. Administrators can reference the timezone variable in formulas to render and filter timestamp data correctly for each embedded user, without separate content per region. - ---- - -[discrete] -==== Timezone-aware keyword filtering [beta betaBackground]^Beta^ -ThoughtSpot now supports resolving relative date and time keywords, such as `today`, `yesterday`, and `last 7 days`, using a configurable per-user or per-Org timezone, instead of the system default timezone on a ThoughtSpot instance. This feature eliminates timezone-based inconsistencies in multi-region embedded deployments and removes the need for custom workarounds. - -For more information, see xref:timezone.adoc[Timezone-aware keywords and filters]. - -[NOTE] -==== -The timezone awareness feature is in Beta and disabled by default. To enable this feature, contact ThoughtSpot Support. -==== - - ---- - -[discrete] -==== Visual Embed SDK -The Visual Embed SDK version 1.48.0 includes several new features and enhancements. For more information, see the xref:api-changelog.adoc[Visual Embed changelog]. - ---- - -[discrete] -==== REST API v2 -This release introduces new Spotter API endpoints and modifications to the agent conversation APIs, and deprecates legacy agent endpoints. For information about REST API v2 enhancements, see the xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. - -|=== - - -== April 2026 - -**Release version**: ThoughtSpot Cloud 26.4.0.cl + -*Upgrade notes*: ⚠️ Variable update and delete API and metadata parameterization endpoints are deprecated and replaced with new API endpoints. Refer to xref:rest-apiv2-changelog.adoc#version_26_4_0_cl_april_2026[REST API changelog] and xref:deprecated-features.adoc[Deprecation announcements]. + -*Recommended SDK versions*: Visual Embed SDK v1.47.0 and later - -[.cl-table, cols="2,4", frame=none, grid=none] -|=== - -a| -[.cl-label] -*Version 26.4.0.cl* - -a| - -[discrete] -==== Theme builder in AI mode - -The Theme Builder now has an AI mode that enables developers to explore and preview style customizations for their embedded application's branding using natural language instructions and uploaded brand assets. You can execute style updates such as applying colors directly from a PDF branding guide, updating all button shapes with higher contrast, matching a header to a dark background based on a screenshot, or importing typography and spacing from a JSON file. In the AI mode, Theme builder interprets your intent and applies the changes instantly. - -For more information, see xref:theme-builder.adoc[Theme builder]. - ---- - - -[discrete] -==== Webhook integration -In this release version, the following enhancements are introduced in the webhook configuration and delivery status monitoring workflows: - -Channel validation:: -Administrators can verify the connection status of a webhook channel by sending a test payload in a `POST` request to the `/api/rest/2.0/system/communication-channels/validate` REST API endpoint. For more information, see xref:webhooks-comm-channel.adoc#_validate_communication_channel_configuration[Webhook channel validation]. - -Monitor webhook delivery:: -Administrators can also monitor the status of a webhook delivery via a `POST /api/rest/2.0/jobs/history/communication-channels/search` API request. For more information, see xref:webhooks-comm-channel.adoc#_monitor_webhook_delivery_and_job_status[Monitor webhook delivery and job status]. - -Support for custom HTTP headers in webhook requests:: -When configuring or updating a webhook, you can now specify custom headers to include in every outbound request, in addition to the standard HTTP and authentication headers that ThoughtSpot sends. For more information, refer to the xref:webhooks-lb-schedule.adoc#_create_a_webhook[webhook documentation]. - ---- - - -[discrete] -==== Spotter embed enhancements -You can now customize the appearance and contents of the chat history sidebar panel in Spotter embedding. - -You can also customize the branding and logo in the Spotter chat interface. - -For more information, see xref:embed-spotter.adoc#_chat_history_panel[Customizing chat history sidebar] and xref:embed-spotter.adoc#_hiding_the_spotter_icon_and_thoughtspot_branding_chat_interface[Hiding logo and brand label in Spotter chat interface]. - ---- - -[discrete] -==== Liveboard enhancements -The following enhancements are introduced in Liveboard export and filtering workflows. - -Embedding a personalized Liveboard view:: -You can now embed a saved personalized Liveboard view using the `personalizedViewId` and load it along with the `liveboardId` in your app. - -Centralized filter modal:: -Liveboard users can modify multiple filters and parameters in a single session using the centralized filter modal. This is an early access feature and disabled by default on ThoughtSpot embedded instances. To enable this feature on embedded Liveboards, set the `isCentralizedLiveboardFilterUXEnabled` to `true`. - -Current period inclusion in rolling date filters:: -The rolling date filters with the **Last ** and **Next ** filter types support including current period. Developers can disable, show, or hide this option using `isThisPeriodInDateFiltersEnabled` or `Action.IncludeCurrentPeriod`. - -Liveboard PNG export:: -The PNG export workflow in the `/api/rest/2.0/report/liveboard` REST API is enhanced to provide high-resolution PNG files. The legacy PNG workflow is deprecated in 26.4.0.cl. For more information about breaking changes and deprecation guidelines, see xref:deprecated-features.adoc[Deprecation announcements]. For information about the new PNG download workflow, see xref:report-apis-v2.adoc#_liveboard_report_api[Liveboard report API documentation]. - ---- - - -[discrete] -==== Full app embedding -In full application embedded deployments with the V3 navigation and home page experience, the default list page experience is set to ListPage v3 experience. - -The ListPage V3 experience provides a refreshed list layout and styling, including the following enhancements: - -* The **Views** column to show the number of views for each object. -* Sorting options for **Name**, **Author**, and **Views** columns. -* Filters can be added by clicking the column header without opening the filter modal. This option is available for **Favorites**, **Views** columns, and **Verified** columns. - -For more information, see xref:full-app-customize.adoc#_customize_list_page_experience[List page customization]. - ---- - - -[discrete] -==== Variable API -The variable REST API provides new API endpoints for the following bulk operations: - -* Bulk deletion: -You can now delete multiple variables in a single API request using the `/api/rest/2.0/template/variables/delete` endpoint. -* Batch update of variable values: -You can now assign and update multiple values to a variable in a single API request using the `/api/rest/2.0/template/variables/{identifier}/update-values` endpoint. - -[NOTE] -==== -The `/api/rest/2.0/template/variables/update-values` and `/api/rest/2.0/template/variables/{identifier}/delete` endpoints are now deprecated. Use the new `/api/rest/2.0/template/variables/{identifier}/update-values` and `/api/rest/2.0/template/variables/delete` endpoints for the variable update and delete operations instead. -==== - -For more information, see xref:variables.adoc[Variables documentation]. - ---- - - -[discrete] -==== Metadata parameterization -You can now parameterize multiple properties of metadata objects using `POST /api/rest/2.0/metadata/parameterize-fields`. The legacy endpoint `/api/rest/2.0/metadata/parameterize` is deprecated in 26.4.0.cl and later versions, and is replaced with the new endpoint to allow updating multiple fields in a single API request. - -For more information, see xref:metadata-parameterization.adoc[Metadata parameterization documentation]. - ---- - - -[discrete] -==== Collections [beta betaBackground]^Beta^ -ThoughtSpot embedded users can now use REST APIs v2 to organize different ThoughtSpot objects into organizational containers called *Collections*. These objects can be Liveboards, Answers, data models, tables, and even other Collections. - -For more information, see xref:collections.adoc[Collections]. - -[NOTE] -==== -These APIs are currently in beta and turned off by default on ThoughtSpot instances. To enable this feature on your instance, contact ThoughtSpot Support. -==== ---- - -[discrete] -==== Visual Embed SDK -For information about the new features and enhancements introduced in Visual Embed SDK version 1.46.0, see the xref:api-changelog.adoc[Visual Embed changelog]. - - -[discrete] -==== REST API v2 -For information about REST API v2 enhancements, see the xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. - ---- -|=== - -== March 2026 - -**Release version**: ThoughtSpot Cloud 26.3.0.cl + -*Upgrade notes*: ⚠️ Includes feature deprecations. Refer to xref:rest-apiv2-changelog.adoc#_custom_access_token_api[REST API changelog] and xref:deprecated-features.adoc[Deprecation announcements]. + -*Recommended SDK versions*: Visual Embed SDK v1.46.0 and later - -[.cl-table, cols="2,4", frame=none, grid=none] -|=== - -a| -[.cl-label] -*Version 26.3.0.cl* - -a| -[discrete] -==== Amazon S3 storage destination for webhook delivery -You can now configure ThoughtSpot to deliver webhook payloads and attachments directly into your own Amazon S3 storage using secure AWS cross-account access. To enable this integration, your AWS administrator must create an IAM role with S3 permissions and trust policy, and then register a webhook in ThoughtSpot to deliver the payloads and attachments directly to your S3 bucket. - -For more information, see xref:webhooks-s3-storage.adoc[Amazon S3 storage integration for webhook delivery]. - ---- - -[discrete] -==== Host event enhancements for context-aware routing - -HostEvents in the Visual Embed SDK are enhanced to improve event routing and context targeting in ThoughtSpot embedded applications. - -Developers can use the page context framework in the SDK to route host events to a specific UI layer and align user experience with the product UI behavior in multi-modal contexts. - -For more information, see xref:events-context-aware-routing.adoc[Context-based execution of host events]. - ---- - -[discrete] -==== JWT-based ABAC implementation -The legacy JWT-based approach that uses `filter_rules` and `parameter_values` to implement Attribute-Based Access Control (ABAC) is deprecated. - -As part of this deprecation, the following changes have been introduced to the custom authentication token API workflow and REST API Playground: - -* The `filter_rules` parameter on the custom token authentication page in the REST API Playground is no longer available for new configurations. This change does not affect your existing implementation. - -* The `parameter_values` property is not deprecated in version 26.3.0.cl and remains supported until further notice. However, using parameter values for row-level security use cases will ultimately be deprecated in an upcoming release. - -Existing ABAC implementations that use `filter_rules` will continue to function until further notice. However, we strongly recommend migrating your legacy ABAC implementation to the ABAC via RLS method that uses custom variables. For migration steps, refer to the xref:abac-migration-guide.adoc[ABAC migration guide]. - -For new deployments, use ABAC via RLS with custom variables and pass data security attributes through the `variable_values` property in the custom access token, and define your RLS rules based on those variables. For more information, see xref:abac_rls-variables.adoc[ABAC via RLS]. - ---- - -[discrete] -==== Spotter coaching access across published Orgs -Starting with the 26.3.0.cl release, ThoughtSpot supports publishing Spotter coaching information to other Orgs. Coaching changes from the primary Org are synchronized with the data models published in secondary Orgs. - -Administrators and users with edit access to data models can programmatically control user access to Spotter coaching information using the object privilege REST API endpoint, `/api/rest/2.0/security/metadata/manage-object-privilege`. They can assign `SPOTTER_COACHING_PRIVILEGE` to other users and user groups, allowing access to the coaching information without requiring data model editing or administration privileges. - -Users and groups with `SPOTTER_COACHING_PRIVILEGE` can import and export coaching TML on data models in the source and destination Orgs where the model is published, and can also share these objects with other users and groups. - -For more information, see xref:spotter-nl-instructions.adoc#_allowing_access_to_spotter_data_model_instructions[Allowing access to Spotter data model instructions]. - ---- - -[discrete] -==== Full application embedding -The height and aspect ratio of the logo in the top-left corner of the ThoughtSpot application interface have been updated for visual alignment and consistency across pages. This enhancement is available only in the V3 navigation and home page experience. - -If you have embedded the full application with the V3 navigation experience, you may notice that the logo appears smaller in the top navigation. This is a design update and does not require any configuration changes to your current embedding implementation. However, we recommend that you review the logo size and appearance, and adjust your custom logo if necessary. - -For information about adding a custom logo image, see xref:customize-style.adoc#logo-change[Customize application logo and favicon]. - ---- - -[discrete] -==== Visual Embed SDK -For information about the new features and enhancements introduced in Visual Embed SDK version 1.46.0, see the xref:api-changelog.adoc[Visual Embed changelog]. - ---- - -[discrete] -==== REST API v2 -For information about REST API v2 enhancements, see the xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. - ---- - -|=== - -== February 2026 -**Release version**: ThoughtSpot Cloud 26.2.0.cl + -*Upgrade notes*: ⚠️ Includes API parameter deprecations. Refer to xref:rest-apiv2-changelog.adoc[REST API changelog] and xref:deprecated-features.adoc[Deprecation announcements]. + -*Recommended SDK versions*: Visual Embed SDK v1.45.0 and later - - -[.cl-table, cols="2,4", frame=none, grid=none] -|=== -a| -[.cl-label] -*Version 26.2.0.cl* - -a| -[discrete] -==== SpotterCode extension for IDEs [earlyAccess eaBackground]#Early Access# - -ThoughtSpot introduces SpotterCode, an AI-powered Model Context Protocol (MCP) extension for Integrated Development Environments (IDEs) such as Cursor, Visual Studio Code, and Claude Code. When integrated, SpotterCode enables the AI agent in the IDE to access ThoughtSpot SDKs and API documentation resources and provide in-context coding assistance to developers embedding ThoughtSpot content within their applications. - -SpotterCode is available as an Early Access feature and can be integrated with development environments that support MCP servers and tools. For more information, see xref:spottercode.adoc[SpotterCode], xref:spottercode-integration.adoc[Integrating SpotterCode in IDEs], and xref:spottercode-prompt-guide.adoc[SpotterCode prompting guide]. - ---- - -[discrete] -==== Spotter 3 experience [earlyAccess eaBackground]#Early Access# -You can now embed the Spotter 3 experience, which introduces several new capabilities, agentic analytics, and an enhanced user experience. Spotter 3 is an Early Access feature and is disabled by default on ThoughtSpot embedded instances. - -For more information, see xref:embed-ai-analytics.adoc[Embed AI Search and Analytics] and xref:embed-spotter.adoc[Spotter embedding documentation]. - ---- - -[discrete] -==== Rate limits for REST APIs -To prevent excessive requests from reaching application servers and ensure API stability and service quality for REST API users, ThoughtSpot enforces rate limits on public API requests per client IP. These limits are applied globally at the cluster level for all public API requests, including calls to both REST API v1 and v2 endpoints. -//Administrators can adjust these limits for their ThoughtSpot deployments as needed. - -For more information, see xref:about-rest-apis.adoc#_rate_limits_for_api_requests[Rate limits for REST APIs]. - ---- - -[discrete] -==== Security settings via REST APIs -Security settings that ensure data security and a seamless embedded user experience can now be configured through REST APIs v2. Administrators and developers can configure allowlists for: - -* Content Security Policy (CSP) -* Cross-origin Resource Sharing (CORS) -* Authentication attributes -* Access control settings - -For more information, see xref:security-settings.adoc[Security Settings]. - ---- - -[discrete] -==== WebSocket support for external tools -ThoughtSpot supports secure WebSocket (`wss://`) endpoints for external tool script integrations, for example, tools that open WebSocket connections from the browser. - -To allow a WebSocket host, add the corresponding `wss://` URL to both your CSP allowlists. Only hosts explicitly listed with the `wss://` protocol are permitted. Existing `https://` entries in the allowlists remain unchanged and continue to function as expected. - -For more information, see xref:3rd-party-script.adoc#_allow_websocket_endpoints[External tools and script integration]. - ---- - - -[discrete] -==== Visual Embed SDK -For information about the new features and enhancements introduced in Visual Embed SDK version 1.45.0, see the xref:api-changelog.adoc[Visual Embed changelog]. - ---- - -[discrete] -==== REST API v2 -For information about REST API v2 enhancements, see the xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. - ---- -|=== - - -== January 2026 - -**Release version**: ThoughtSpot Cloud 10.15.0.cl + -*Upgrade notes*: No breaking changes. + -*Recommended SDK versions*: Visual Embed SDK v1.44.0 and later - - -[.cl-table, cols="2,4", frame=none, grid=none] -|=== -a| -[.cl-label] -*Version 10.15.0.cl* - -a| -[discrete] -==== Theme Builder -Theme Builder is now generally available (GA) and will be rolled out to all ThoughtSpot instances in customer deployments over the next few weeks. - -When this feature is enabled on your instance, you can access it from the *Develop* page in ThoughtSpot and use it to customize styles and UX themes directly within the product. - -For more information, see xref:theme-builder.adoc[Theme Builder]. - ---- - -[discrete] -==== V3 navigation and home page experience - -The new V3 navigation and home page experience is now generally available (GA) and can be enabled on ThoughtSpot embedded instances. - -The default UI experience in full application embedding remains the classic (V1) experience until further notice. Developers embedding the full ThoughtSpot application can enable the V3 experience in their applications by setting the appropriate configuration options in their embed code. - -For more information, see xref:full-app-customize.adoc[Customizing full application embedding]. - ---- - -[discrete] -==== Formula variables in RLS rules - -You can now create formula variables using the Variable REST API and use these variables in RLS rules for a specific data context and in ABAC token requests to dynamically assign security attributes to users. - -For more information, see xref:abac_rls-variables.adoc[ABAC via RLS with variables]. - ---- - -[discrete] -==== Spotter APIs - -ThoughtSpot introduces new REST APIs for the following Spotter workflows: - -* To send queries to a conversation session with the Spotter agent -* To set data model instructions on a model to coach the Spotter system -* To fetch data model instructions configured on a model - -For more information, see xref:spotter-apis.adoc[Spotter APIs]. - ---- - -[discrete] -==== Embed events and parameters to intercept API calls -You can now intercept API calls from the embedded ThoughtSpot application using the `interceptUrls` attribute in the Visual Embed SDK. This feature lets you control API requests in your embedding application and use embed events to modify, block, or handle requests before they are sent to the backend. For more information, see xref:api-intercept.adoc[Intercept API calls and search requests]. - ---- - -[discrete] -==== Icon customization enhancements - -You can now replace or customize the chart switcher toggle and icons in the Charts drawer on an Answer or visualization page using SVG sprites. Previously, these icons were fixed to ThoughtSpot defaults and were not configurable. In the new version, these icons are available as SVG components and can be replaced by developers through the xref:customize-icons.adoc[icon customization framework] as needed. - ---- - -[discrete] -==== Mobile Embed SDK -The SDKs for embedding ThoughtSpot components in mobile apps are now Generally Available (GA). For more information about the SDKs and how to embed a ThoughtSpot component in a mobile app, see xref:mobile-embed.adoc[Mobile embed documentation]. - ---- - -[discrete] -==== Visual Embed SDK -For information about the new features and enhancements introduced in Visual Embed SDK version 1.44.0, see xref:api-changelog.adoc[Visual Embed changelog]. - ---- - -[discrete] -==== REST API -For information about REST API v2 enhancements, see xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. +For information about the new features and enhancements introduced in Visual Embed SDK version 1.51.0, see xref:api-changelog.adoc[Visual Embed SDK changelog]. |=== From bd6b44bd9b22778b8c82c1a2331d711d5ab88d10 Mon Sep 17 00:00:00 2001 From: ShashiSubramanya <76986173+ShashiSubramanya@users.noreply.github.com> Date: Tue, 15 Sep 2026 17:55:07 +0530 Subject: [PATCH 05/33] docs(26.10.0.cl): add SDK v1.53.0 changelog entry [SCAL-317811, SCAL-333470, SCAL-298005] --- modules/ROOT/pages/api-changelog.adoc | 121 +++++++++++++++++++++++++- 1 file changed, 120 insertions(+), 1 deletion(-) diff --git a/modules/ROOT/pages/api-changelog.adoc b/modules/ROOT/pages/api-changelog.adoc index dbee4d36f..094d4f0d3 100644 --- a/modules/ROOT/pages/api-changelog.adoc +++ b/modules/ROOT/pages/api-changelog.adoc @@ -8,7 +8,126 @@ This page documents the changes introduced in each release of the Visual Embed SDK. For information about the REST API v2.0 changes, see the xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. -== Version 1.52.x, September 2026 + == Version 1.53.0, October 2026 + + [width="100%", cols="1,4"] + |==== + |[tag greenBackground]#NEW# + a| + [discrete] + ===== Spotter Analyst embed (`spotterAnalystConfig`) + + You can now embed a single, pinned Spotter Analyst using `spotterAnalystConfig.analystId` in `SpotterEmbed`. Setting this property locks the embed to one governed Analyst and prevents users from navigating to other Analysts or to the default Spotter. + + New and updated configuration properties: + + `SpotterAnalystConfig.analystId` (string):: + Pins the embed to the Analyst with this GUID. Available from cluster version 26.10.0.cl. + + `spotterChatPinConfig` (on `SpotterSidebarViewConfig`):: + Enables pinning and unpinning of conversations in the sidebar. Contains `enabled` (boolean, default `false`), `pinLabel` (string), and `unpinLabel` (string). Available from cluster version 26.10.0.cl. + + `isScopedLiveboardFilteringEnabled` (on `LiveboardViewConfig` and `AppViewConfig`):: + Enables group-level filter and parameter scoping on Liveboards, in addition to existing Liveboard-level and tab-level scoping. Available from cluster version 26.10.0.cl. + + `starterPrompts` (on `SpotterChatViewConfig`):: + Configures which starter prompt pills are shown above the Spotter chat input. Contains keys: `enable`, `quick`, `research`, `previewData`, and `liveboard`. Available from cluster version 26.10.0.cl. + + `openSpotterOnLiveboardByDefault` (on `SpotterChatViewConfig`):: + Opens the Spotter chat panel automatically when a Liveboard loads. Default: `true`. Supported on `LiveboardEmbed` and `AppEmbed`. Available from cluster version 26.10.0.cl. + + For more information, see xref:embed-spotter-analyst.adoc[Embed Spotter Analyst]. + + |[tag greenBackground]#NEW# + a| + [discrete] + ===== New `Action` enum members + + The following `Action` enum members are added in this release: + + [cols="2,3"] + !=== + ! Action ! Description + + ! `Action.SpotterChatPin` + ! Controls the visibility and disabled state of the pin and unpin action in the Spotter conversation edit menu. + + ! `Action.SpotterAnalystList` + ! Controls the visibility and disabled state of the Show all Analysts row in the Analyst interface. + + ! `Action.SpotterDefaultAnalyst` + ! Controls the visibility and disabled state of the default Spotter analyst entry in the Analyst interface. + + ! `Action.SpotterOnLiveboard` + ! Controls the Spotter button in the Liveboard header. + + ! `Action.AllLiveboardFilters` + ! Shows, hides, or disables all filter surfaces on a Liveboard: filter chips, parameter chips, and cross-filter chips at the Liveboard, tab, and group levels. Parameter and cross-filter chips support hide only and cannot be disabled. + + ! `Action.EditInputTable` + ! Edits an input table used by an Answer directly from the Liveboard. + + ! `Action.QuickSearchPill` + ! Controls the Basic Search starter-prompt pill in the Spotter interface. + + ! `Action.DeepAnalysisPill` + ! Controls the Deep Analysis starter-prompt pill in the Spotter interface. + + ! `Action.DataLiteracyPill` + ! Controls the Data Literacy starter-prompt pill in the Spotter interface. + !=== + + |[tag greenBackground]#NEW# + a| + [discrete] + ===== New `EmbedEvent` members + + `EmbedEvent.SpotterConversationPinned`:: + Emitted when a user pins a Spotter conversation. Payload: `{ conversationId, pinnedAt }`. Requires `spotterChatPinConfig.enabled: true` and `enablePastConversationsSidebar: true`. + + `EmbedEvent.SpotterConversationUnpinned`:: + Emitted when a user unpins a Spotter conversation. Payload: `{ conversationId, unpinnedAt }`. Requires `spotterChatPinConfig.enabled: true` and `enablePastConversationsSidebar: true`. + + The following existing `EmbedEvent` members gained an optional `applicability` attribute for scoped filter and parameter operations: + + * `EmbedEvent.FilterChanged` + * `EmbedEvent.ParameterChanged` + + |[tag greenBackground]#NEW# + a| + [discrete] + ===== New `HostEvent` members + + `HostEvent.PinSpotterConversation`:: + Pins a saved Spotter conversation. Accepts `{ conversationId }`. Requires `enablePastConversationsSidebar: true` on the instance. + + `HostEvent.UnpinSpotterConversation`:: + Unpins a previously pinned Spotter conversation. Accepts `{ conversationId }`. Requires `enablePastConversationsSidebar: true` on the instance. + + `HostEvent.GetGroups`:: + Returns filter and parameter group details for the current Liveboard. Response includes `orderedGroupIds`, `numberOfGroups`, and `Groups`. + + `HostEvent.OpenParameter`:: + Opens the parameter panel for a specific parameter on the Liveboard. Accepts an optional `applicability` object to scope the action to a tab or group. + + The following existing `HostEvent` members gained an optional `applicability` attribute for scoping to a Liveboard tab or group: + + * `HostEvent.OpenFilter` + * `HostEvent.GetFilters` + * `HostEvent.UpdateFilters` + * `HostEvent.UpdateParameters` + * `HostEvent.GetParameters` + + |[tag yellowBackground]#DEPRECATED# + a| + [discrete] + ===== `HostEvent.UpdatePersonalizedView` deprecated + + `HostEvent.UpdatePersonalizedView` is deprecated in this release. Use `HostEvent.SelectPersonalizedView` instead. The replacement accepts an optional `viewName` to select a view by name, resets to the original view when the payload is empty, and reports an error when the named view is not found. + + |==== + + == Version 1.52.x, September 2026 [width="100%" cols="1,4"] |==== From 4e1b2ff33201f332f8951df58786134475a33336 Mon Sep 17 00:00:00 2001 From: ShashiSubramanya <76986173+ShashiSubramanya@users.noreply.github.com> Date: Tue, 15 Sep 2026 17:55:09 +0530 Subject: [PATCH 06/33] docs(26.10.0.cl): add SDK v1.53.0 changelog entry [SCAL-317811, SCAL-333470, SCAL-298005] From edc0da1e94280c2e579486ed85e7bc7c3bc75217 Mon Sep 17 00:00:00 2001 From: ShashiSubramanya <76986173+ShashiSubramanya@users.noreply.github.com> Date: Tue, 15 Sep 2026 17:55:59 +0530 Subject: [PATCH 07/33] docs(26.10.0.cl): add REST API v2.0 changelog entry [SCAL-317811, SCAL-319281, SCAL-333470] --- modules/ROOT/pages/rest-apiv2-changelog.adoc | 59 +++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/modules/ROOT/pages/rest-apiv2-changelog.adoc b/modules/ROOT/pages/rest-apiv2-changelog.adoc index 7e201fe2f..f74abede8 100644 --- a/modules/ROOT/pages/rest-apiv2-changelog.adoc +++ b/modules/ROOT/pages/rest-apiv2-changelog.adoc @@ -8,7 +8,64 @@ This changelog lists the features and enhancements introduced in REST API v2.0. For information about new features and enhancements available for embedded analytics, see xref:whats-new.adoc[What's New]. -== Version 26.9.0.cl, September 2026 + == Version 26.10.0.cl, October 2026 + + === Spotter Analyst API + + Four new endpoints are available for managing Spotter Analysts programmatically. All endpoints are under `/api/rest/2.0/ai/agent/analysts/`. + + [cols="2,4"] + |=== + | Endpoint | Description + + | `POST /api/rest/2.0/ai/agent/analysts/create` + | Creates a Spotter Analyst with a name, description, data sources, and optional instructions, MCP connectors, and starter prompts. Requires `ADMINISTRATION`, `CAN_MANAGE_SPOTTER`, or `CAN_USE_SPOTTER` privilege, plus view access to all referenced sources. Returns the created `Analyst` object including the server-assigned `id`. + + | `POST /api/rest/2.0/ai/agent/analysts/search` + | Returns Analysts visible to the caller. Operates in fetch mode (single Analyst by `analyst_identifier`) or list mode (paginated, ordered by most recently accessed). Supports filtering by ownership type: `ALL`, `CREATED_BY_ME`, or `SHARED_TO_ME`. Requires `ADMINISTRATION`, `CAN_MANAGE_SPOTTER`, or `CAN_USE_SPOTTER`. + + | `POST /api/rest/2.0/ai/agent/analysts/{analyst_identifier}/update` + | Full-replace update of a Spotter Analyst. Omitted optional fields are cleared. Requires ownership or `ADMINISTRATION`/`CAN_MANAGE_SPOTTER` privilege. When new sources are added, they are automatically shared with existing users of the Analyst. + + | `POST /api/rest/2.0/ai/agent/analysts/{analyst_identifier}/delete` + | Permanently deletes a Spotter Analyst. This operation is irreversible. Requires ownership or `ADMINISTRATION`/`CAN_MANAGE_SPOTTER` privilege. + |=== + + For full parameter details, request and response schemas, and code examples, see xref:spotter-analyst-api.adoc[Spotter Analyst API]. + + === Feature Management API + + Three new endpoints are available for programmatic feature management. All endpoints are under `/api/rest/2.0/configurations/features/`. + + [cols="2,4"] + |=== + | Endpoint | Description + + | `POST /api/rest/2.0/configurations/features/search` + | Returns feature configurations grouped by feature group. Supports `CLUSTER` scope (cluster-admin view, returns `assigned_orgs` per feature) and `ORG` scope (Org-admin view, returns `element_value` per feature). The `category` parameter filters by `GENERAL_ACCESS` (default) or `EARLY_ACCESS`. Requires `ADMINISTRATION` or `ORG_ADMINISTRATION`. + + | `POST /api/rest/2.0/configurations/features/assignments/update` + | Updates Org assignments for a feature using `ADD`, `REMOVE`, or `REPLACE` operations. Send an empty `org_identifiers` array with `REPLACE` to remove all assignments. Requires cluster-admin `ADMINISTRATION` privilege. Org-scoped admins cannot call this endpoint. + + | `POST /api/rest/2.0/configurations/features/values/update` + | Sets feature value at `CLUSTER` or `ORG` scope. At `CLUSTER` scope, setting `reset_org_overrides: true` removes all per-Org value overrides cluster-wide. This operation is irreversible via the API. Requires `ADMINISTRATION`. + |=== + + For full parameter details, request and response schemas, and code examples, see xref:feature-management-api.adoc[Feature Management API]. + + === Update Conversation — `is_pinned` field added + + The `POST /api/rest/2.0/ai/agent/conversations/{conversation_identifier}/update` endpoint now accepts an `is_pinned` boolean field. + + * Set `is_pinned: true` to pin the conversation to the top of the conversation list. + * Set `is_pinned: false` to unpin a previously pinned conversation. + * The operation is idempotent: pinning an already-pinned conversation or unpinning an already-unpinned one succeeds with no side effects. + * Only conversations created with `enable_save_chat: true` can be pinned. + * Both `title` and `is_pinned` can be updated in a single request. + + NOTE: The `title` field has been available since version 26.7.0.cl. The `is_pinned` field is new in version 26.10.0.cl. + + == Version 26.9.0.cl, September 2026 === Answer Export API From 805eb3e7b6089f002bbed4c2a7a34bb6c2ee804e Mon Sep 17 00:00:00 2001 From: ShashiSubramanya <76986173+ShashiSubramanya@users.noreply.github.com> Date: Tue, 15 Sep 2026 17:56:01 +0530 Subject: [PATCH 08/33] docs(26.10.0.cl): add REST API v2.0 changelog entry [SCAL-317811, SCAL-319281, SCAL-333470] From 790df80e99242edef4c8ea9b2050d7d2ec15d4fe Mon Sep 17 00:00:00 2001 From: ShashiSubramanya <76986173+ShashiSubramanya@users.noreply.github.com> Date: Tue, 15 Sep 2026 17:57:08 +0530 Subject: [PATCH 09/33] docs(26.10.0.cl): add Spotter pin EmbedEvents and scoped filter events [SCAL-333470, SCAL-298005] --- modules/ROOT/pages/event-embedEvents.adoc | 71 +++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/modules/ROOT/pages/event-embedEvents.adoc b/modules/ROOT/pages/event-embedEvents.adoc index 6b7655f0f..ee04fa89a 100644 --- a/modules/ROOT/pages/event-embedEvents.adoc +++ b/modules/ROOT/pages/event-embedEvents.adoc @@ -295,3 +295,74 @@ For information about the supported event objects and examples, see xref:EmbedEv * See the xref:EmbedEvent.adoc[EmbedEvent] and xref:HostEvent.adoc[HostEvent] SDK documentation. * For information about triggering events on React components, see xref:react-components_lesson-04.adoc[Event listeners for React components]. + + [#pin-events] + === Spotter conversation pin events + + The following `EmbedEvent` members are available from ThoughtSpot Cloud 26.10.0.cl and Visual Embed SDK 1.53.0. Both events require `spotterChatPinConfig.enabled: true` and `enablePastConversationsSidebar: true` in the embed configuration. + + [cols="1,1,3"] + |=== + | Event | Cluster version | Description + + | `EmbedEvent.SpotterConversationPinned` + | 26.10.0.cl + | Emitted when a user pins a Spotter conversation. Payload: `{ conversationId, pinnedAt }`. + + | `EmbedEvent.SpotterConversationUnpinned` + | 26.10.0.cl + | Emitted when a user unpins a Spotter conversation. Payload: `{ conversationId, unpinnedAt }`. + |=== + + .Listen for pin and unpin events + [source,javascript] + ---- + const embed = new SpotterEmbed(container, { + spotterSidebarConfig: { + enablePastConversationsSidebar: true, + spotterChatPinConfig: { enabled: true }, + }, + // ... + }); + + embed.on(EmbedEvent.SpotterConversationPinned, (event) => { + const { conversationId, pinnedAt } = event.data; + console.log(`Conversation ${conversationId} pinned at ${pinnedAt}`); + }); + + embed.on(EmbedEvent.SpotterConversationUnpinned, (event) => { + const { conversationId, unpinnedAt } = event.data; + console.log(`Conversation ${conversationId} unpinned at ${unpinnedAt}`); + }); + + embed.render(); + ---- + + [#applicability-scope] + === Scoped filter and parameter events + + The following `EmbedEvent` members gained an optional `applicability` attribute in SDK 1.53.0. This attribute scopes a filter or parameter change notification to a specific Liveboard tab or group. + + [cols="1,3"] + |=== + | Event | Change in SDK 1.53.0 + + | `EmbedEvent.FilterChanged` + | Payload gains an optional `applicability` object describing the scope of the changed filter. + + | `EmbedEvent.ParameterChanged` + | Payload gains an optional `applicability` object describing the scope of the changed parameter. + |=== + + The `applicability` object has the following shape: + + [source,json] + ---- + { + "level": "LIVEBOARD" | "TAB" | "GROUP", + "targetId": "{tab-or-group-id}" + } + ---- + + `targetId` is optional. Omit it when `level` is `LIVEBOARD`. + \ No newline at end of file From a9869821a47cef6a99c40dae9fc299c01aa0c094 Mon Sep 17 00:00:00 2001 From: ShashiSubramanya <76986173+ShashiSubramanya@users.noreply.github.com> Date: Tue, 15 Sep 2026 17:57:10 +0530 Subject: [PATCH 10/33] docs(26.10.0.cl): add Spotter pin HostEvents, GetGroups, OpenParameter, scoped filter events [SCAL-333470, SCAL-298005] --- modules/ROOT/pages/events-hostEvents.adoc | 94 +++++++++++++++++++++++ 1 file changed, 94 insertions(+) diff --git a/modules/ROOT/pages/events-hostEvents.adoc b/modules/ROOT/pages/events-hostEvents.adoc index 3016a3500..d244c2cc5 100644 --- a/modules/ROOT/pages/events-hostEvents.adoc +++ b/modules/ROOT/pages/events-hostEvents.adoc @@ -357,3 +357,97 @@ When `AddFilter` is in `disabledActions`, `HostEvent.OpenAddFilterModal` is bloc * See xref:EmbedEvent.adoc[EmbedEvent] and xref:HostEvent.adoc[HostEvent] SDK documentation. * For information about triggering events on React components, see xref:react-components_lesson-04.adoc[Event listeners for React components]. + + [#spotter-pin-host-events] + === Spotter conversation pin and unpin + + The following `HostEvent` members are available from ThoughtSpot Cloud 26.10.0.cl and Visual Embed SDK 1.53.0. Both events require `enablePastConversationsSidebar: true` in the embed configuration. + + [cols="1,1,3"] + |=== + | Event | Cluster version | Description + + | `HostEvent.PinSpotterConversation` + | 26.10.0.cl + | Pins a saved Spotter conversation. Accepts `{ conversationId }`. + + | `HostEvent.UnpinSpotterConversation` + | 26.10.0.cl + | Unpins a previously pinned Spotter conversation. Accepts `{ conversationId }`. + |=== + + .Programmatically pin a conversation + [source,javascript] + ---- + embed.trigger(HostEvent.PinSpotterConversation, { + conversationId: '{conversation-id}', + }); + ---- + + [#liveboard-group-events] + === Liveboard group and parameter events + + The following `HostEvent` members are new in SDK 1.53.0 and support the scoped Liveboard filtering feature introduced in ThoughtSpot Cloud 26.10.0.cl. + + [cols="1,1,3"] + |=== + | Event | Cluster version | Description + + | `HostEvent.GetGroups` + | 26.10.0.cl + | Returns filter and parameter group details for the current Liveboard. Response includes `orderedGroupIds`, `numberOfGroups`, and `Groups`. Mirrors `HostEvent.GetTabs`. + + | `HostEvent.OpenParameter` + | 26.10.0.cl + | Opens the parameter panel for a specific parameter on the Liveboard. Accepts an optional `applicability` object to scope the action to a tab or group. Mirrors `HostEvent.OpenFilter`. + |=== + + [#applicability-host-events] + === Scoped filter and parameter host events + + The following existing `HostEvent` members gained an optional `applicability` attribute in SDK 1.53.0. This attribute scopes a filter or parameter operation to a specific Liveboard tab or group. + + [cols="1,3"] + |=== + | Event | Change in SDK 1.53.0 + + | `HostEvent.OpenFilter` + | Accepts an optional `applicability` parameter to scope which filter panel opens. + + | `HostEvent.GetFilters` + | Returned Liveboard filter objects now include an optional `applicability` field. + + | `HostEvent.UpdateFilters` + | Accepts an optional `applicability` value per filter to scope the update to a tab or group. + + | `HostEvent.UpdateParameters` + | Accepts an optional `applicability` value per parameter to scope the update to a tab or group. + + | `HostEvent.GetParameters` + | Returned parameter objects now include an optional `applicability` field. + |=== + + The `applicability` object has the following shape: + + [source,json] + ---- + { + "level": "LIVEBOARD" | "TAB" | "GROUP", + "targetId": "{tab-or-group-id}" + } + ---- + + `targetId` is optional. Omit it when `level` is `LIVEBOARD`. + + [#deprecated-host-events] + === Deprecated HostEvents + + [cols="1,1,3"] + |=== + | Event | Status | Details + + | `HostEvent.UpdatePersonalizedView` + | Deprecated in SDK 1.53.0 + | Use `HostEvent.SelectPersonalizedView` instead. The replacement accepts an optional `viewName` to select a view by name, resets to the original view when the payload is empty, and reports an error when the named view is not found. + |=== + \ No newline at end of file From c51df1fc1cbe16c8747c9469b3f01d8ea7e4e9fc Mon Sep 17 00:00:00 2001 From: ShashiSubramanya <76986173+ShashiSubramanya@users.noreply.github.com> Date: Tue, 15 Sep 2026 17:57:11 +0530 Subject: [PATCH 11/33] docs(26.10.0.cl): add Spotter pin EmbedEvents and scoped filter events [SCAL-333470, SCAL-298005] From d7ffb9b4a7f38e28816565b05fa763c797ce57fa Mon Sep 17 00:00:00 2001 From: ShashiSubramanya <76986173+ShashiSubramanya@users.noreply.github.com> Date: Tue, 15 Sep 2026 17:57:13 +0530 Subject: [PATCH 12/33] docs(26.10.0.cl): add Spotter pin HostEvents, GetGroups, OpenParameter, scoped filter events [SCAL-333470, SCAL-298005] From 0adf76e2180894791be7ce5422a5dcbd863ff98e Mon Sep 17 00:00:00 2001 From: ShashiSubramanya <76986173+ShashiSubramanya@users.noreply.github.com> Date: Tue, 15 Sep 2026 18:15:07 +0530 Subject: [PATCH 13/33] =?UTF-8?q?docs(26.10.0.cl):=20fix=20whats-new=20tru?= =?UTF-8?q?ncation=20=E2=80=94=20write=20full=20merged=20file=20with=20Oct?= =?UTF-8?q?ober=202026=20section=20prepended=20to=20complete=20main=20cont?= =?UTF-8?q?ent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Restores all existing release sections (Sep 2026 through Jan 2026) that were lost in the previous write due to context window truncation. Prepends the October 2026 / 26.10.0.cl section covering: Spotter Analyst API, Embed Spotter Analyst, Spotter conversation pinning, Feature Management API, and Scoped Liveboard filtering. Refs: SCAL-333470, SCAL-317811, SCAL-319281, SCAL-298005, SCAL-323877 --- modules/ROOT/pages/whats-new.adoc | 262 ++++++++++++++++++++++++------ 1 file changed, 216 insertions(+), 46 deletions(-) diff --git a/modules/ROOT/pages/whats-new.adoc b/modules/ROOT/pages/whats-new.adoc index 0f911b881..e3ac4f212 100644 --- a/modules/ROOT/pages/whats-new.adoc +++ b/modules/ROOT/pages/whats-new.adoc @@ -39,46 +39,46 @@ a| [discrete] ==== Spotter Analyst API -Spotter Analysts are governed AI agents you can create, configure, and manage programmatically using four new REST API endpoints under `/api/rest/2.0/ai/agent/analysts/`. Each Analyst is scoped to specific data sources and can be configured with a name, description, optional instructions, MCP connectors, and up to 4 starter prompts. The API supports create, search, update, and delete operations. For more information, see xref:spotter-analyst-api.adoc[Spotter Analyst API]. +Spotter Analysts are governed AI agents you can create, configure, and manage via the REST API. Four new endpoints are available under `/api/rest/2.0/ai/agent/analysts/` to create, search, update, and delete Analysts programmatically. Each Analyst is configured with a name, description, one or more data sources, and optional instructions, MCP connectors, and starter prompts. For more information, see xref:spotter-analyst-api.adoc[Spotter Analyst API]. --- [discrete] ==== Embed Spotter Analyst -You can now embed a single, pinned Spotter Analyst in your application using the Visual Embed SDK. The `spotterAnalystConfig.analystId` property in `SpotterEmbed` locks the embed to one governed Analyst experience. Combined with the `hiddenActions` list, you can prevent users from switching to other Analysts or to the default Spotter. For more information, see xref:embed-spotter-analyst.adoc[Embed Spotter Analyst]. +You can now embed a single, pinned Spotter Analyst in your application using the Visual Embed SDK. The `spotterAnalystConfig.analystId` property in `SpotterEmbed` locks the embed to one governed Analyst experience. Combined with the updated `hiddenActions` list, you can prevent users from switching to other Analysts or to the default Spotter. For more information, see xref:embed-spotter-analyst.adoc[Embed Spotter Analyst]. --- [discrete] ==== Spotter conversation pinning -Users can now pin Spotter conversations so they appear at the top of the conversation list for quick access. In embedded deployments, pinning is disabled by default and must be enabled using `spotterChatPinConfig` in `spotterSidebarConfig`. The SDK emits `EmbedEvent.SpotterConversationPinned` and `EmbedEvent.SpotterConversationUnpinned` when pin state changes. Use `HostEvent.PinSpotterConversation` and `HostEvent.UnpinSpotterConversation` to trigger pin state from the host application. The `is_pinned` field is also available on the Update Conversation endpoint (`POST /api/rest/2.0/ai/agent/conversations/{conversation_identifier}/update`). For more information, see xref:embed-spotter-analyst.adoc#pinning-conversations[Pinning conversations] and xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. +Users can now pin Spotter conversations so they appear at the top of the conversation list for quick access. Pinning is disabled by default in embedded deployments and must be explicitly enabled using `spotterChatPinConfig` in `spotterSidebarConfig`. The SDK emits `EmbedEvent.SpotterConversationPinned` and `EmbedEvent.SpotterConversationUnpinned` when pin state changes. Use `HostEvent.PinSpotterConversation` and `HostEvent.UnpinSpotterConversation` to trigger pin state from the host application. For REST API access, the `is_pinned` field is now available on the Update Conversation endpoint (`POST /api/rest/2.0/ai/agent/conversations/{conversation_identifier}/update`). For more information, see xref:embed-spotter-analyst.adoc[Embed Spotter Analyst] and xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. --- [discrete] ==== Feature Management API -Three new REST API endpoints are available under `/api/rest/2.0/configurations/features/` for programmatic feature management. Cluster and Org admins can search feature configurations by scope, assign features to Orgs, and set feature values without using the Admin Portal 2.0 UI. For more information, see xref:feature-management-api.adoc[Feature Management API]. +Three new endpoints are available under `/api/rest/2.0/configurations/features/` for programmatic feature management. Cluster and Org admins can search feature configurations, assign features to Orgs, and set feature values without using the Admin Portal 2.0 UI. For more information, see xref:feature-management-api.adoc[Feature Management API]. --- [discrete] ==== Scoped Liveboard filtering -ThoughtSpot 26.10.0.cl introduces a three-tier filter hierarchy on Liveboards: Liveboard level, tab level, and group level. You can enable group-level filter scoping in embedded Liveboards using the `isScopedLiveboardFilteringEnabled` property. The `HostEvent.GetGroups` event returns group details for the Liveboard. The `applicability` attribute on filter and parameter events scopes updates to a specific tab or group. For more information, see xref:embed-events.adoc[Events and app interactions] and xref:liveboard-embed.adoc[Embed a Liveboard]. +ThoughtSpot 26.10.0.cl introduces a three-tier filter hierarchy on Liveboards: Liveboard level, tab level, and group level. You can enable group-level filter scoping in embedded Liveboards using the `isScopedLiveboardFilteringEnabled` property. The `HostEvent.GetGroups` event returns group details for the Liveboard, and the `applicability` attribute on `HostEvent.UpdateFilters` and `HostEvent.UpdateParameters` scopes filter updates to a specific tab or group. For more information, see xref:embed-events.adoc[Events and app interactions] and xref:liveboard-embed.adoc[Embed a Liveboard]. --- [discrete] ==== Visual Embed SDK -For information about new features and enhancements in Visual Embed SDK version 1.53.0, see xref:api-changelog.adoc[Visual Embed SDK changelog]. +For information about the new features and enhancements introduced in Visual Embed SDK version 1.53.0, see xref:api-changelog.adoc[Visual Embed SDK changelog]. --- [discrete] -==== REST API v2.0 +==== REST API For information about REST API v2.0 enhancements in this release, see xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. |=== @@ -135,108 +135,278 @@ To improve the initial load performance of large Liveboards, lazy loading is now [discrete] ==== Custom app scheme allowlisting for mobile embeds -ThoughtSpot now supports adding custom app schemes such as `capacitor://localhost` and `ionic://localhost` to the CSP and CORS allowlist. This allows mobile applications built with hybrid frameworks such as Capacitor and Ionic to embed ThoughtSpot content. For more information, see xref:security-settings.adoc#custom-app-schemes[Security settings]. +ThoughtSpot now supports adding custom app schemes such as `capacitor://localhost` and `ionic://localhost` to the CSP and CORS allowlist. This allows mobile applications built with hybrid frameworks such as Capacitor and Ionic to embed ThoughtSpot content. For more information, see xref:security-settings.adoc[Security settings]. --- [discrete] -==== Upcoming changes to `EmbedEvent.Error` framework -In the upcoming ThoughtSpot Cloud 26.10.0.cl and Visual Embed SDK 1.53.0 versions, `EmbedEvent.Error` will include a `severity` field that categorizes errors into three levels, `SEV1`, `SEV2`, and `SEV3`. ThoughtSpot recommends reviewing your error handling logic to prepare for this change. For more information, see xref:embed-event-error-best-practices.adoc[Handling embed errors]. +==== Visual Embed SDK +For information about the new features and enhancements introduced in Visual Embed SDK version 1.52.0, see xref:api-changelog.adoc[Visual Embed SDK changelog]. --- +[discrete] +==== REST API +For information about REST API v2.0 enhancements in this release, see xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. + +|=== + +== August 2026 + +**Release version**: ThoughtSpot Cloud 26.8.0.cl + +*Upgrade notes*: No breaking changes in this release. + +*Recommended SDK versions*: Visual Embed SDK v1.51.0 or later + +[.cl-table, cols="2,4", frame=none, grid=none] +|=== +a| +[.cl-label] +*Version 26.8.0.cl* + +a| [discrete] -==== Personalized Views TML portability +==== Spotter embed -The Personalized Views TML portability feature is now GA and enabled on all ThoughtSpot Embedded instances. For more information, see xref:tml-import.adoc#personalized-views-portability[Personalized Views portability]. +Spotter Analyst selection:: +The Spotter embed now supports displaying the Analyst selection panel, which allows users to switch between different Spotter Analysts directly from the embedded interface. Use `Action.SpotterAnalystSidebar` in `hiddenActions` to show or hide this panel. For more information, see xref:customize-spotter-embed.adoc[Customize Spotter embed]. --- +[discrete] +==== Visual Embed SDK +For information about the new features and enhancements introduced in Visual Embed SDK version 1.51.0, see xref:api-changelog.adoc[Visual Embed SDK changelog]. + +--- + +[discrete] +==== REST API +For information about REST API v2.0 enhancements in this release, see xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. + +|=== + +== July 2026 + +**Release version**: ThoughtSpot Cloud 26.7.0.cl + +*Upgrade notes*: No breaking changes in this release. + +*Recommended SDK versions*: Visual Embed SDK v1.50.0 or later + +[.cl-table, cols="2,4", frame=none, grid=none] +|=== +a| +[.cl-label] +*Version 26.7.0.cl* + +a| + +[discrete] +==== Spotter conversation management APIs + +ThoughtSpot introduces Spotter conversation management APIs in this release. Using these REST APIs, developers can save and retrieve Spotter conversations programmatically. These APIs allow developers to integrate Spotter conversation history into host application workflows, enabling features like conversation bookmarking, session handoff, and custom conversation browsers. For more information, see xref:spotter-agent-api.adoc[Spotter APIs]. + +--- [discrete] ==== Visual Embed SDK -For information about the new features and enhancements introduced in Visual Embed SDK version 1.52.0, see xref:api-changelog.adoc[Visual Embed SDK changelog]. +For information about the new features and enhancements introduced in Visual Embed SDK version 1.50.0, see xref:api-changelog.adoc[Visual Embed SDK changelog]. --- +[discrete] +==== REST API +For information about REST API v2.0 enhancements in this release, see xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. + +|=== + +== June 2026 + +**Release version**: ThoughtSpot Cloud 26.6.0.cl + +*Upgrade notes*: No breaking changes in this release. + +*Recommended SDK versions*: Visual Embed SDK v1.49.0 or later + +[.cl-table, cols="2,4", frame=none, grid=none] +|=== +a| +[.cl-label] +*Version 26.6.0.cl* + +a| [discrete] -==== REST API v2 -This release introduces new API endpoints for sharing Spotter conversations, managing Snowflake Semantic integrations, and other enhancements. -For more information, see the xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. +==== Orion Custom Actions + +ThoughtSpot now supports custom actions in Orion embedded views. You can create and configure custom actions on Orion components using the same callback and URL-based action framework as ThoughtSpot embedded views. For more information, see xref:custom-actions.adoc[Custom actions]. --- -//// [discrete] -==== Answer Export API +==== Visual Embed SDK +For information about the new features and enhancements introduced in Visual Embed SDK version 1.49.0, see xref:api-changelog.adoc[Visual Embed SDK changelog]. + +--- -The following enhancements in the `POST /api/rest/2.0/report/answer` endpoint are now GA. +[discrete] +==== REST API +For information about REST API v2.0 enhancements in this release, see xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. -* *Pinned Answer export* from a Liveboard, using the new `type` parameter. -* *Personalized View* support to export data from a specific Personalized View of a Liveboard. -* *Spotter Answer export* in `XLSX` and `PDF`, in addition to `CSV` and `PNG`. -* *Custom PNG output*, using `x_resolution`, `y_resolution`, and `scaling`. +|=== -For more information, see xref:report-apis-v2.adoc#_answer_report_api[Answer Report API]. +== May 2026 + +**Release version**: ThoughtSpot Cloud 26.5.0.cl + +*Upgrade notes*: No breaking changes in this release. + +*Recommended SDK versions*: Visual Embed SDK v1.48.0 or later + +[.cl-table, cols="2,4", frame=none, grid=none] +|=== +a| +[.cl-label] +*Version 26.5.0.cl* + +a| + +[discrete] +==== Custom CSS and layout overrides + +ThoughtSpot now supports additional CSS variables for customizing the Liveboard layout and visualization borders. For more information, see xref:css-customization.adoc[CSS customization]. + +--- + +[discrete] +==== Visual Embed SDK +For information about the new features and enhancements introduced in Visual Embed SDK version 1.48.0, see xref:api-changelog.adoc[Visual Embed SDK changelog]. --- -//// + +[discrete] +==== REST API +For information about REST API v2.0 enhancements in this release, see xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. |=== -== August 2026 +== April 2026 -**Release version**: ThoughtSpot Cloud 26.8.0.cl + -*Upgrade notes*: ⚠️ Includes breaking changes and deprecations. Refer to feature details in this page and xref:deprecated-features.adoc[Deprecation announcements]. + -*Recommended SDK versions*: Visual Embed SDK v1.51.0 and later +**Release version**: ThoughtSpot Cloud 26.4.0.cl + +*Upgrade notes*: No breaking changes in this release. + +*Recommended SDK versions*: Visual Embed SDK v1.47.0 or later [.cl-table, cols="2,4", frame=none, grid=none] |=== a| [.cl-label] -*Version 26.8.0.cl* +*Version 26.4.0.cl* a| + [discrete] -==== Spotter embedding +==== Spotter embed + +Chat history sidebar:: +The Spotter embed now supports the chat history sidebar, which allows users to access and resume previous Spotter conversations from the embedded interface. Use `enablePastConversationsSidebar` in `spotterSidebarConfig` to enable this feature. For more information, see xref:customize-spotter-embed.adoc[Customize Spotter embed]. -Spotter Analysts [earlyAccess eaBackground]#Early Access#:: -Spotter now includes an *Analysts* panel in the sidebar that surfaces dedicated Spotter Analyst agents. Each Analyst is scoped to a specific data model and skill set, enabling your embedded users to start focused AI-driven conversations without manually selecting a data source. For more information, see xref:customize-spotter-analysts.adoc#_spotter_analysts[Customize Spotter Analysts]. +--- -Spotter onboarding starter prompts:: -Embedded Spotter interface supports onboarding starter prompts to guide first-time users. When enabled, Spotter presents suggested questions based on the connected data model. For more information, see xref:customize-spotter-chat-experience.adoc#_spotter_starter_prompts[Enable starter prompts in Spotter]. +[discrete] +==== Visual Embed SDK +For information about the new features and enhancements introduced in Visual Embed SDK version 1.47.0, see xref:api-changelog.adoc[Visual Embed SDK changelog]. --- [discrete] -==== Liveboard embedding enhancements -The following features, previously in Early Access, are now generally available and enabled by default on ThoughtSpot Embedded instances: +==== REST API +For information about REST API v2.0 enhancements in this release, see xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. + +|=== + +== March 2026 -* Hide irrelevant filters (`hideIrrelevantChipsInLiveboardTabs`) + -xref:embed-pinboard.adoc#_customizing_filter_visibility[Hides filters] that are not relevant to the displayed visualization in a tab. -* Compact header (`isLiveboardHeaderSticky`) + -xref:embed-pinboard.adoc#_liveboard_header[Enables a sticky compact header] for Liveboards that persists as users scroll. +**Release version**: ThoughtSpot Cloud 26.3.0.cl + +*Upgrade notes*: No breaking changes in this release. + +*Recommended SDK versions*: Visual Embed SDK v1.46.0 or later + +[.cl-table, cols="2,4", frame=none, grid=none] +|=== +a| +[.cl-label] +*Version 26.3.0.cl* + +a| + +[discrete] +==== Spotter embed + +Spotter sidebar actions:: +The Spotter sidebar now exposes additional action controls: `spotterSidebarOpen`, `spotterSidebarClose`, `spotterNewConversation`, and `spotterSidebarSettings`. Use these in `hiddenActions` to control the sidebar shell. For more information, see xref:customize-spotter-embed.adoc[Customize Spotter embed]. + +--- -For more information, see xref:embed-pinboard.adoc[Embed a Liveboard]. +[discrete] +==== Visual Embed SDK +For information about the new features and enhancements introduced in Visual Embed SDK version 1.46.0, see xref:api-changelog.adoc[Visual Embed SDK changelog]. --- [discrete] -==== Custom styles for embedded ThoughtSpot -Custom styles and CSS classes are now supported for embedded ThoughtSpot application components. For more information, see xref:custom-styles.adoc[Custom styles]. +==== REST API +For information about REST API v2.0 enhancements in this release, see xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. + +|=== + +== February 2026 + +**Release version**: ThoughtSpot Cloud 26.2.0.cl + +*Upgrade notes*: No breaking changes in this release. + +*Recommended SDK versions*: Visual Embed SDK v1.45.0 or later + +[.cl-table, cols="2,4", frame=none, grid=none] +|=== +a| +[.cl-label] +*Version 26.2.0.cl* + +a| + +[discrete] +==== Visual Embed SDK +For information about the new features and enhancements introduced in Visual Embed SDK version 1.45.0, see xref:api-changelog.adoc[Visual Embed SDK changelog]. --- [discrete] -==== REST API v2.0 enhancements +==== REST API For information about REST API v2.0 enhancements in this release, see xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. +|=== + +== January 2026 + +**Release version**: ThoughtSpot Cloud 26.1.0.cl + +*Upgrade notes*: No breaking changes in this release. + +*Recommended SDK versions*: Visual Embed SDK v1.44.0 or later + +[.cl-table, cols="2,4", frame=none, grid=none] +|=== +a| +[.cl-label] +*Version 26.1.0.cl* + +a| + +[discrete] +==== Mobile embed support + +ThoughtSpot now supports embedding ThoughtSpot components in mobile applications using the Visual Embed SDK. This feature is currently in beta and is available to select customers. The mobile embed support allows developers to render ThoughtSpot Liveboards and Answers natively in iOS and Android applications using WebView components. ThoughtSpot mobile embed is compatible with all ThoughtSpot Cloud release versions from 26.1.0.cl and SDK versions from v1.44.0. For a complete list of supported features and limitations, refer to the mobile embed documentation. Note that some features available in browser-based embeds (such as certain custom actions, full-application embed, and certain authentication flows) may not be available or may behave differently in a mobile embed (GA). For more information about the SDKs and how to embed a ThoughtSpot component in a mobile app, see xref:mobile-embed.adoc[Mobile embed documentation]. + --- [discrete] ==== Visual Embed SDK -For information about the new features and enhancements introduced in Visual Embed SDK version 1.51.0, see xref:api-changelog.adoc[Visual Embed SDK changelog]. +For information about the new features and enhancements introduced in Visual Embed SDK version 1.44.0, see xref:api-changelog.adoc[Visual Embed changelog]. + +--- + +[discrete] +==== REST API +For information about REST API v2 enhancements, see xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. |=== From 4595b14e251e5f2a8ce2e49d2d0953ee23cf94ce Mon Sep 17 00:00:00 2001 From: ShashiSubramanya Date: Tue, 15 Sep 2026 18:22:00 +0530 Subject: [PATCH 14/33] whats new edit --- modules/ROOT/pages/whats-new.adoc | 647 +++++++++++++++++++++++++++--- 1 file changed, 584 insertions(+), 63 deletions(-) diff --git a/modules/ROOT/pages/whats-new.adoc b/modules/ROOT/pages/whats-new.adoc index e3ac4f212..caf3a8f4d 100644 --- a/modules/ROOT/pages/whats-new.adoc +++ b/modules/ROOT/pages/whats-new.adoc @@ -22,6 +22,8 @@ This page lists new features, enhancements, and deprecated functionality introdu // *Status:* Current / Supported / Deprecated // *Affects:* Developers, Administrators, End Users // ============================================================ + + == October 2026 **Release version**: ThoughtSpot Cloud 26.10.0.cl + @@ -53,7 +55,7 @@ You can now embed a single, pinned Spotter Analyst in your application using the [discrete] ==== Spotter conversation pinning -Users can now pin Spotter conversations so they appear at the top of the conversation list for quick access. Pinning is disabled by default in embedded deployments and must be explicitly enabled using `spotterChatPinConfig` in `spotterSidebarConfig`. The SDK emits `EmbedEvent.SpotterConversationPinned` and `EmbedEvent.SpotterConversationUnpinned` when pin state changes. Use `HostEvent.PinSpotterConversation` and `HostEvent.UnpinSpotterConversation` to trigger pin state from the host application. For REST API access, the `is_pinned` field is now available on the Update Conversation endpoint (`POST /api/rest/2.0/ai/agent/conversations/{conversation_identifier}/update`). For more information, see xref:embed-spotter-analyst.adoc[Embed Spotter Analyst] and xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. +Users can now pin Spotter conversations so they appear at the top of the conversation list for quick access. Pinning is disabled by default in embedded deployments and must be explicitly enabled using `spotterChatPinConfig` in `spotterSidebarConfig`. The SDK emits `EmbedEvent.SpotterConversationPinned` and `EmbedEvent.SpotterConversationUnpinned` when pin state changes. Use `HostEvent.PinSpotterConversation` and `HostEvent.UnpinSpotterConversation` to trigger pin state from the host application. For REST API access, the `is_pinned` field is now available on the Update Conversation endpoint. For more information, see xref:embed-spotter-analyst.adoc[Embed Spotter Analyst] and xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. --- @@ -83,6 +85,7 @@ For information about REST API v2.0 enhancements in this release, see xref:rest- |=== + == September 2026 **Release version**: ThoughtSpot Cloud 26.9.0.cl + @@ -135,27 +138,62 @@ To improve the initial load performance of large Liveboards, lazy loading is now [discrete] ==== Custom app scheme allowlisting for mobile embeds -ThoughtSpot now supports adding custom app schemes such as `capacitor://localhost` and `ionic://localhost` to the CSP and CORS allowlist. This allows mobile applications built with hybrid frameworks such as Capacitor and Ionic to embed ThoughtSpot content. For more information, see xref:security-settings.adoc[Security settings]. +ThoughtSpot now supports adding custom app schemes such as `capacitor://localhost` and `ionic://localhost` to the CSP and CORS allowlist. This allows mobile applications built with hybrid frameworks such as Capacitor and Ionic to embed ThoughtSpot content. For more information, see xref:security-settings.adoc#custom-app-schemes[Security settings]. + +--- + +[discrete] +==== Upcoming changes to `EmbedEvent.Error` framework +In the upcoming ThoughtSpot Cloud 26.10.0.cl and Visual Embed SDK 1.53.0 versions, `EmbedEvent.Error` will include a `severity` field that categorizes errors into three levels, `SEV1`, `SEV2`, and `SEV3`. ThoughtSpot recommends reviewing your error handling logic to prepare for this change. For more information, see xref:embed-event-error-best-practices.adoc[Handling embed errors]. + +--- + + +[discrete] +==== Personalized Views TML portability + +The Personalized Views TML portability feature is now GA and enabled on all ThoughtSpot Embedded instances. For more information, see xref:tml-import.adoc#personalized-views-portability[Personalized Views portability]. --- + [discrete] ==== Visual Embed SDK For information about the new features and enhancements introduced in Visual Embed SDK version 1.52.0, see xref:api-changelog.adoc[Visual Embed SDK changelog]. --- + [discrete] -==== REST API -For information about REST API v2.0 enhancements in this release, see xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. +==== REST API v2 +This release introduces new API endpoints for sharing Spotter conversations, managing Snowflake Semantic integrations, and other enhancements. +For more information, see the xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. + +--- + +//// +[discrete] +==== Answer Export API + +The following enhancements in the `POST /api/rest/2.0/report/answer` endpoint are now GA. + +* *Pinned Answer export* from a Liveboard, using the new `type` parameter. +* *Personalized View* support to export data from a specific Personalized View of a Liveboard. +* *Spotter Answer export* in `XLSX` and `PDF`, in addition to `CSV` and `PNG`. +* *Custom PNG output*, using `x_resolution`, `y_resolution`, and `scaling`. + +For more information, see xref:report-apis-v2.adoc#_answer_report_api[Answer Report API]. + +--- +//// |=== == August 2026 **Release version**: ThoughtSpot Cloud 26.8.0.cl + -*Upgrade notes*: No breaking changes in this release. + -*Recommended SDK versions*: Visual Embed SDK v1.51.0 or later +*Upgrade notes*: ⚠️ Includes breaking changes and deprecations. Refer to feature details in this page and xref:deprecated-features.adoc[Deprecation announcements]. + +*Recommended SDK versions*: Visual Embed SDK v1.51.0 and later [.cl-table, cols="2,4", frame=none, grid=none] |=== @@ -164,32 +202,103 @@ a| *Version 26.8.0.cl* a| +[discrete] +==== Spotter embedding + +Spotter Analysts [earlyAccess eaBackground]#Early Access#:: +Spotter now includes an *Analysts* panel in the sidebar that surfaces dedicated Spotter Analyst agents. Each Analyst is scoped to a specific data model and skill set, enabling your embedded users to start focused AI-driven conversations without manually selecting a data source. For more information, see xref:customize-spotter-analysts.adoc#_spotter_analysts[Customize Spotter Analysts]. + +Spotter onboarding starter prompts:: +Embedded Spotter interface supports onboarding starter prompts to guide first-time users. When enabled, Spotter presents suggested questions based on the connected data model. For more information, see xref:customize-spotter-chat-experience.adoc#_spotter_starter_prompts[Enable starter prompts in Spotter]. + +--- [discrete] -==== Spotter embed +==== Liveboard embedding enhancements +The following features, previously in Early Access, are now generally available and enabled by default on ThoughtSpot Embedded instances: + +* Hide irrelevant filters (`hideIrrelevantChipsInLiveboardTabs`) + +xref:embed-pinboard.adoc#_customizing_filter_visibility[Hides filters] that are not relevant to the displayed visualization in a tab. +* Compact header (`isLiveboardCompactHeaderEnabled`) + +Enables in compact header in embedded Liveboards. For information about breaking changes and the affected elements, see xref:embed-pinboard.adoc#compact-header[compact Liveboard header]. +* Cover page filtering options (`coverAndFilterOptionInPDF`) + +Enables the *Include cover page* and *Include filter page(s)* checkboxes in the Liveboard download modal. +* Liveboard styling and grouping (isLiveboardMasterpiecesEnabled) + +Enables the xref:embed-pinboard.adoc#_liveboard_grouping_and_styling[Liveboard styling and grouping] feature. +* Filter interactivity (`isEnhancedFilterInteractivityEnabled`) + +Enables interactive filter chips that allow users to add, update, or remove filters in an embedded Liveboard. + +--- + +[discrete] +==== Navigation and homepage V1/V2 deprecated [.version-badge.deprecated]#Deprecated# +Starting from ThoughtSpot Cloud 26.8.0.cl, the classic V1 and V2 navigation and homepage experience modes are deprecated. All ThoughtSpot Embedded sessions now render in the V3 navigation experience by default. For more information, see xref:deprecated-features.adoc#v1-v2-exp-fullApp-embed[V1 and V2 deprecation]. + +--- -Spotter Analyst selection:: -The Spotter embed now supports displaying the Analyst selection panel, which allows users to switch between different Spotter Analysts directly from the embedded interface. Use `Action.SpotterAnalystSidebar` in `hiddenActions` to show or hide this panel. For more information, see xref:customize-spotter-embed.adoc[Customize Spotter embed]. +[discrete] +==== Wide logo dimension [.version-badge.breaking]#Breaking change# +Starting from ThoughtSpot Cloud 26.8.0.cl, the recommended dimensions for the wide logo displayed on the ThoughtSpot login page have changed from 330x100px to *250x50px (5:1 aspect ratio)*. Logos uploaded at the previous dimensions may appear distorted or incorrectly scaled on the login screen. If you previously uploaded a wide logo at 330x100px, re-upload it at 250x50px to ensure correct display. + +For more information, see xref:customize-style.adoc#logo-change[Customize the login page logo]. + +--- + + +[discrete] +==== Granular download privileges +The new granular download privileges that replace the single general download privilege for RBAC enabled clusters are now generally available. + +* *Can Download Visuals*: Allows downloading chart images and visual exports. +* *Can Download Detailed Data*: Allows downloading raw tabular data (CSV, XLSX). + +These privileges can be assigned independently per user or group. Update privilege assignments in your embedded application accordingly. + +--- + +[discrete] +==== Personalized Views portability [earlyAccess eaBackground]#Early Access# +ThoughtSpot improves the portability of Personalized Views across environments. Import operations use smart merge logic to avoid duplicating Personalized Views. +Two new fields have been added to the TML for Personalized Views: + +* A new `author` field is added to the Personalized View TML during export. This field is used to assign ownership during import. +* Personalized Views now support `obj_id` for stable cross-environment object identity. + +For more information, see xref:tml-import.adoc#personalized-views-portability[Personalized Views portability]. + +--- + +[discrete] +==== Discoverability checkbox deprecation [.version-badge.breaking]#Breaking change# +The *Make this Liveboard Discoverable* checkbox has been removed from the ThoughtSpot UI. Embedding applications that relied on discoverability for content visibility should review their sharing logic and update user-facing guidance for content access. For more information, see xref:deprecated-features.adoc#liveboardDiscoverable[Deprecation announcements]. + +--- + +[discrete] +==== SpotterCode widget for documentation assistance +This developer documentation site now includes a SpotterCode AI assistant panel that replaces the earlier *AskDocs* feature. When you open the assistant panel, it displays prebuilt starter prompts relevant to the page you are currently viewing and allows you to explore topics instantly. You can also type your own questions about embedding, REST APIs, SDK configuration, and developer guides. For more information, see xref:spottercode.adoc[SpotterCode documentation]. --- [discrete] ==== Visual Embed SDK -For information about the new features and enhancements introduced in Visual Embed SDK version 1.51.0, see xref:api-changelog.adoc[Visual Embed SDK changelog]. +The Visual Embed SDK version 1.51.0 includes new features and enhancements for Spotter Analysts, starter prompts, and the `HostEvent.Navigate` object format. For more information, see the xref:api-changelog.adoc[Visual Embed SDK changelog]. --- [discrete] -==== REST API -For information about REST API v2.0 enhancements in this release, see xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. +==== REST API v2 +For information about REST API v2 enhancements in this release, see the xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. + +--- |=== == July 2026 **Release version**: ThoughtSpot Cloud 26.7.0.cl + -*Upgrade notes*: No breaking changes in this release. + -*Recommended SDK versions*: Visual Embed SDK v1.50.0 or later +*Upgrade notes*: Includes breaking changes to SpotterCode + +*Recommended SDK versions*: Visual Embed SDK v1.50.0 and later [.cl-table, cols="2,4", frame=none, grid=none] |=== @@ -198,31 +307,96 @@ a| *Version 26.7.0.cl* a| +[discrete] +==== SpotterViz for Liveboards [earlyAccess eaBackground]#Early Access# +You can now use SpotterViz in your embedding application to help your users build and edit Liveboards through a conversational interface. Instead of manually configuring charts and layouts, your users can describe what they want and SpotterViz generates the Liveboard for them, including the new tabs, chart types, data filters, and scheduled deliveries. + +For SpotterViz customization in embedded view, the Visual Embed SDK also provides several options to customize the SpotterViz panel experience. For more information, see xref:embed-spotterViz.adoc[SpotterViz in embedded Liveboards]. + +--- + +[discrete] +==== Spotter embedding + +Spotter file upload in embedded apps:: +Applications embedding the Spotter interface can now allow their users to xref:embed-spotter.adoc#_enable_file_upload_in_spotter_chat[upload files directly in the Spotter chat panel]. + +Spotter conversation history:: +You can now save your Spotter conversation and manage chat history using Spotter AI REST APIs. For more information, see xref:spotter-agent-conversation-mgmt-apis.adoc[APIs for managing saved conversations]. + +Spotter Agent instructions:: +You can configure and retrieve behavioral instructions for the Spotter agent using REST APIs. For more information, see xref:spotter-agent-instructions.adoc[Spotter AI agent instructions APIs]. + +--- + +[discrete] +==== Focused home page experience [earlyAccess eaBackground]#Early Access# + +In full application embedding with the V3 navigation and home page experience, ThoughtSpot provides an additional option to switch to the V4 focused home page experience. The focused home page experience provides a streamlined, contemporary experience along with the Spotter panel. For more information, see xref:full-app-customize.adoc[Customize full application embedding]. + +--- + +[discrete] +==== SpotterCode authentication and workflow execution [.version-badge.breaking]#Breaking# +SpotterCode now supports authenticated sessions with your ThoughtSpot instance. When connecting your MCP client to the SpotterCode endpoint, you are now prompted to log in using your organization's identity provider. After authentication, SpotterCode can make ThoughtSpot API calls on your behalf. + +For more information, see the documentation on xref:spottercode.adoc#_mcp_server_endpoints[SpotterCode MCP Server] and xref:spottercode-integration.adoc#_authenticate_spottercode[Authenticating SpotterCode]. + +--- + +[discrete] +==== SpotterCode Agent in Visual Embed Playground [earlyAccess eaBackground]#Early Access# + +The Visual Embed SDK Playground now includes SpotterCode Agent, an AI-powered coding assistant. The SpotterCode panel displays pre-built prompts relevant to the component you are embedding, provides a prompt interface for user queries, and generates embed code. It generates boilerplate code automatically and accelerates building code and iterating embed configurations. + +For more information, see xref:developer-playground.adoc#spottercode-panel[Using SpotterCode in the Playground]. + +--- [discrete] -==== Spotter conversation management APIs +==== Webhooks enhancements + +ThoughtSpot introduces the following features and enhancements for webhook configuration and management: + +* New Webhooks page in the UI [earlyAccess eaBackground]#Early Access# + +The *Develop* page now includes a xref:webhooks-ux.adoc[dedicated *Webhooks* page] for creating, managing, and monitoring webhooks within the Org context. +* Storage configuration retrieval + +The `GET /api/rest/2.0/webhooks/storage-config` REST API endpoint to xref:webhooks-api.adoc#_retrieving_storage_information_for_webhook_configuration[get storage configuration details]. +* GCS storage configuration for webhook delivery + +Administrators can now xref:webhooks-gcs-storage.adoc[configure Google Cloud Storage (GCS) buckets as a storage destination] for webhook payload delivery on GCP-hosted ThoughtSpot clusters. +* Webhook activation and deactivation + +You can enable or disable a webhook connection in the UI or through REST API. +* Selective configuration reset + +The xref:webhooks-api.adoc#_updating_a_webhook[webhook update API endpoint] supports the `reset_options` parameter to remove specific optional configuration sections without replacing the full webhook configuration. + +--- + -ThoughtSpot introduces Spotter conversation management APIs in this release. Using these REST APIs, developers can save and retrieve Spotter conversations programmatically. These APIs allow developers to integrate Spotter conversation history into host application workflows, enabling features like conversation bookmarking, session handoff, and custom conversation browsers. For more information, see xref:spotter-agent-api.adoc[Spotter APIs]. +[discrete] +==== Org isolation for per-org SAML and OIDC authentication +ThoughtSpot now enforces strict org isolation when users authenticate through a per-org identity provider (IdP). When a per-org IdP sends SAML or OIDC group claims that reference Orgs outside its authorized scope, ThoughtSpot silently drops those claims and records them as security audit events. This prevents a rogue IdP administrator in one Org from using group assertions to gain unauthorized access to another Org. Manually-assigned existing Org memberships are unaffected. For more information, see xref:orgs.adoc#per-org-sso-isolation[SSO and Org isolation]. --- [discrete] ==== Visual Embed SDK -For information about the new features and enhancements introduced in Visual Embed SDK version 1.50.0, see xref:api-changelog.adoc[Visual Embed SDK changelog]. +The Visual Embed SDK version 1.50.0 includes several new features and enhancements. For more information, see the xref:api-changelog.adoc[Visual Embed changelog]. --- [discrete] -==== REST API -For information about REST API v2.0 enhancements in this release, see xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. +==== REST API v2 +For information about REST API v2 enhancements in this release, see the xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. + +--- |=== == June 2026 **Release version**: ThoughtSpot Cloud 26.6.0.cl + -*Upgrade notes*: No breaking changes in this release. + -*Recommended SDK versions*: Visual Embed SDK v1.49.0 or later +*Upgrade notes*: No breaking changes. + +*Recommended SDK versions*: Visual Embed SDK v1.49.0 and later [.cl-table, cols="2,4", frame=none, grid=none] |=== @@ -231,31 +405,70 @@ a| *Version 26.6.0.cl* a| +[discrete] +==== Chart and table overrides [.version-badge.new]#New# +You can now apply visualization overrides to charts and tables generated from a search query in ThoughtSpot search and full application embedding. The `visualOverrides` property in `SearchViewConfig` and `AppViewConfig` allows developers to apply at the embed initialization time: + +* Chart overrides + +Control legend visibility and position, data label display and per-column filter +thresholds, regression lines, grid lines, axis range and label settings, series +colors, and conditional formatting rules including font and background styling. +* Table overrides + +Control column visibility, text wrapping, row height and padding density, table +theme, and column summary visibility with per-column exceptions. + +For more information, see xref:viz-overrides.adoc[Configuring visualization overrides]. + +--- + +[discrete] +==== Spotter AI and embedding enhancements [.version-badge.new]#New# + +This release introduces the following enhancements for Spotter AI workflows and embedded Spotter applications. + +* Spotter embedding: + +Spotter now includes data literacy skills that help users understand the underlying data model. Users can ask Spotter to explain available data sources, fields, and relationships in plain language within a conversation session. +* Spotter AI APIs: + +//** New REST API endpoints to configure and retrieve persistent behavioral xref:spotter-agent-instructions.adoc[instructions for the Spotter agent]. + New API endpoint xref:spotter-agent-conversation-apis.adoc#_stop_an_in_progress_agent_response[stop and cancel a long-running Spotter response]. + +--- [discrete] -==== Orion Custom Actions +==== Developer page enhancements +The **Develop** page in the ThoughtSpot UI has been updated with the following enhancements: -ThoughtSpot now supports custom actions in Orion embedded views. You can create and configure custom actions on Orion components using the same callback and URL-based action framework as ThoughtSpot embedded views. For more information, see xref:custom-actions.adoc[Custom actions]. +* The **Custom actions** list page now shows the code-based custom actions configured using the Visual Embed SDK. +* Removal of REST API v1 + +The legacy REST Playground v1 has been removed from the left navigation. This change does not affect your current integrations with v1 REST API. ThoughtSpot recommends that you update your integration workflows to use REST API v2. For more information, see xref:rest-api-v1v2-comparison.adoc[REST API v1 to v2 migration]. +* Removal of GraphQL playgrounds + +The menu link to the GraphQL playground has been removed from the UI. + +[discrete] +==== Liveboard browser cache refresh +To improve load performance and reduce reload times, you can now enable the Liveboard cache option with a **Refresh** button that lets your users clear the cache and refresh visualization data when required. For more information, see xref:api-changelog.adoc#_liveboard_browser_cache_refresh[Liveboard browser cache refresh]. --- [discrete] ==== Visual Embed SDK -For information about the new features and enhancements introduced in Visual Embed SDK version 1.49.0, see xref:api-changelog.adoc[Visual Embed SDK changelog]. +The Visual Embed SDK version 1.49.0 includes several new features and enhancements. For more information, see the xref:api-changelog.adoc[Visual Embed changelog]. --- [discrete] -==== REST API -For information about REST API v2.0 enhancements in this release, see xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. +==== REST API v2 +This release introduces new API endpoints for Spotter, connections and trusted authentication. For information about REST API v2 enhancements, see the xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. |=== + == May 2026 **Release version**: ThoughtSpot Cloud 26.5.0.cl + -*Upgrade notes*: No breaking changes in this release. + -*Recommended SDK versions*: Visual Embed SDK v1.48.0 or later +*Upgrade notes*: ⚠️ Includes breaking changes to Spotter APIs. Refer to the xref:rest-apiv2-changelog.adoc[REST API changelog] for more information. + +*Recommended SDK versions*: Visual Embed SDK v1.48.0 and later + [.cl-table, cols="2,4", frame=none, grid=none] |=== @@ -265,33 +478,82 @@ a| a| + +[discrete] +==== Liveboard downloads + +Continuous Liveboard PDF export [beta betaBackground]^Beta^:: +In PDF downloads, Liveboard tabs can now be rendered in a single page matching the UI layout. This feature can be enabled by setting `isContinuousLiveboardPDFEnabled` to `true` in the SDK. Setting this flag to `false` returns to the paginated PDF view. + +Liveboard download in XLSX and CSV formats:: +Embedded Liveboards can now be downloaded in the PDF, XLSX and CSV file formats. To enable this feature, ensure that the `isLiveboardXLSXCSVDownloadEnabled` parameter is set to `true`. + +Excel exports for pivot tables:: +Pivot table visualizations can now be exported to Excel format. + +For more information, see xref:embed-pinboard.adoc#_liveboard_download_options[Liveboard download options]. + +--- + +[discrete] +==== Visualization edit interface within the Liveboard view + +Users can now edit the underlying query of an answer directly within the Liveboard. When this feature is enabled, the edit button for visualization appears in the answer's floating toolbar when the Liveboard is opened in the edit mode. Clicking the edit button opens the Answer interface preloaded with the answer's current query context. You can make the edits and save the changes without leaving the Liveboard. + +--- + +[discrete] +==== KPI charts in embedded Liveboards + +Embedded Liveboards support advanced controls KPI chart customization. For more information, see link:https://docs.thoughtspot.com/cloud/latest/chart-kpi#advanced[KPI charts]. + +--- + +[discrete] +==== Per-org and per-user timezone control via variables [beta betaBackground]^Beta^ + +You can centrally control timezone behavior per org and per user in embedded deployments using the new template variable `ts_user_timezone` and Variable APIs. + +For multi-org and multi-tenant environments, each tenant org and user can be configured independently, guaranteeing isolation and consistency of time-based analytics across regions. Administrators can reference the timezone variable in formulas to render and filter timestamp data correctly for each embedded user, without separate content per region. + +--- + [discrete] -==== Custom CSS and layout overrides +==== Timezone-aware keyword filtering [beta betaBackground]^Beta^ +ThoughtSpot now supports resolving relative date and time keywords, such as `today`, `yesterday`, and `last 7 days`, using a configurable per-user or per-Org timezone, instead of the system default timezone on a ThoughtSpot instance. This feature eliminates timezone-based inconsistencies in multi-region embedded deployments and removes the need for custom workarounds. + +For more information, see xref:timezone.adoc[Timezone-aware keywords and filters]. + +[NOTE] +==== +The timezone awareness feature is in Beta and disabled by default. To enable this feature, contact ThoughtSpot Support. +==== -ThoughtSpot now supports additional CSS variables for customizing the Liveboard layout and visualization borders. For more information, see xref:css-customization.adoc[CSS customization]. --- [discrete] ==== Visual Embed SDK -For information about the new features and enhancements introduced in Visual Embed SDK version 1.48.0, see xref:api-changelog.adoc[Visual Embed SDK changelog]. +The Visual Embed SDK version 1.48.0 includes several new features and enhancements. For more information, see the xref:api-changelog.adoc[Visual Embed changelog]. --- [discrete] -==== REST API -For information about REST API v2.0 enhancements in this release, see xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. +==== REST API v2 +This release introduces new Spotter API endpoints and modifications to the agent conversation APIs, and deprecates legacy agent endpoints. For information about REST API v2 enhancements, see the xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. |=== + == April 2026 **Release version**: ThoughtSpot Cloud 26.4.0.cl + -*Upgrade notes*: No breaking changes in this release. + -*Recommended SDK versions*: Visual Embed SDK v1.47.0 or later +*Upgrade notes*: ⚠️ Variable update and delete API and metadata parameterization endpoints are deprecated and replaced with new API endpoints. Refer to xref:rest-apiv2-changelog.adoc#version_26_4_0_cl_april_2026[REST API changelog] and xref:deprecated-features.adoc[Deprecation announcements]. + +*Recommended SDK versions*: Visual Embed SDK v1.47.0 and later [.cl-table, cols="2,4", frame=none, grid=none] |=== + a| [.cl-label] *Version 26.4.0.cl* @@ -299,64 +561,217 @@ a| a| [discrete] -==== Spotter embed +==== Theme builder in AI mode + +The Theme Builder now has an AI mode that enables developers to explore and preview style customizations for their embedded application's branding using natural language instructions and uploaded brand assets. You can execute style updates such as applying colors directly from a PDF branding guide, updating all button shapes with higher contrast, matching a header to a dark background based on a screenshot, or importing typography and spacing from a JSON file. In the AI mode, Theme builder interprets your intent and applies the changes instantly. -Chat history sidebar:: -The Spotter embed now supports the chat history sidebar, which allows users to access and resume previous Spotter conversations from the embedded interface. Use `enablePastConversationsSidebar` in `spotterSidebarConfig` to enable this feature. For more information, see xref:customize-spotter-embed.adoc[Customize Spotter embed]. +For more information, see xref:theme-builder.adoc[Theme builder]. --- + [discrete] -==== Visual Embed SDK -For information about the new features and enhancements introduced in Visual Embed SDK version 1.47.0, see xref:api-changelog.adoc[Visual Embed SDK changelog]. +==== Webhook integration +In this release version, the following enhancements are introduced in the webhook configuration and delivery status monitoring workflows: + +Channel validation:: +Administrators can verify the connection status of a webhook channel by sending a test payload in a `POST` request to the `/api/rest/2.0/system/communication-channels/validate` REST API endpoint. For more information, see xref:webhooks-comm-channel.adoc#_validate_communication_channel_configuration[Webhook channel validation]. + +Monitor webhook delivery:: +Administrators can also monitor the status of a webhook delivery via a `POST /api/rest/2.0/jobs/history/communication-channels/search` API request. For more information, see xref:webhooks-comm-channel.adoc#_monitor_webhook_delivery_and_job_status[Monitor webhook delivery and job status]. + +Support for custom HTTP headers in webhook requests:: +When configuring or updating a webhook, you can now specify custom headers to include in every outbound request, in addition to the standard HTTP and authentication headers that ThoughtSpot sends. For more information, refer to the xref:webhooks-lb-schedule.adoc#_create_a_webhook[webhook documentation]. --- + [discrete] -==== REST API -For information about REST API v2.0 enhancements in this release, see xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. +==== Spotter embed enhancements +You can now customize the appearance and contents of the chat history sidebar panel in Spotter embedding. + +You can also customize the branding and logo in the Spotter chat interface. + +For more information, see xref:embed-spotter.adoc#_chat_history_panel[Customizing chat history sidebar] and xref:embed-spotter.adoc#_hiding_the_spotter_icon_and_thoughtspot_branding_chat_interface[Hiding logo and brand label in Spotter chat interface]. + +--- + +[discrete] +==== Liveboard enhancements +The following enhancements are introduced in Liveboard export and filtering workflows. + +Embedding a personalized Liveboard view:: +You can now embed a saved personalized Liveboard view using the `personalizedViewId` and load it along with the `liveboardId` in your app. + +Centralized filter modal:: +Liveboard users can modify multiple filters and parameters in a single session using the centralized filter modal. This is an early access feature and disabled by default on ThoughtSpot embedded instances. To enable this feature on embedded Liveboards, set the `isCentralizedLiveboardFilterUXEnabled` to `true`. + +Current period inclusion in rolling date filters:: +The rolling date filters with the **Last ** and **Next ** filter types support including current period. Developers can disable, show, or hide this option using `isThisPeriodInDateFiltersEnabled` or `Action.IncludeCurrentPeriod`. + +Liveboard PNG export:: +The PNG export workflow in the `/api/rest/2.0/report/liveboard` REST API is enhanced to provide high-resolution PNG files. The legacy PNG workflow is deprecated in 26.4.0.cl. For more information about breaking changes and deprecation guidelines, see xref:deprecated-features.adoc[Deprecation announcements]. For information about the new PNG download workflow, see xref:report-apis-v2.adoc#_liveboard_report_api[Liveboard report API documentation]. + +--- + + +[discrete] +==== Full app embedding +In full application embedded deployments with the V3 navigation and home page experience, the default list page experience is set to ListPage v3 experience. + +The ListPage V3 experience provides a refreshed list layout and styling, including the following enhancements: + +* The **Views** column to show the number of views for each object. +* Sorting options for **Name**, **Author**, and **Views** columns. +* Filters can be added by clicking the column header without opening the filter modal. This option is available for **Favorites**, **Views** columns, and **Verified** columns. + +For more information, see xref:full-app-customize.adoc#_customize_list_page_experience[List page customization]. + +--- + + +[discrete] +==== Variable API +The variable REST API provides new API endpoints for the following bulk operations: + +* Bulk deletion: +You can now delete multiple variables in a single API request using the `/api/rest/2.0/template/variables/delete` endpoint. +* Batch update of variable values: +You can now assign and update multiple values to a variable in a single API request using the `/api/rest/2.0/template/variables/{identifier}/update-values` endpoint. + +[NOTE] +==== +The `/api/rest/2.0/template/variables/update-values` and `/api/rest/2.0/template/variables/{identifier}/delete` endpoints are now deprecated. Use the new `/api/rest/2.0/template/variables/{identifier}/update-values` and `/api/rest/2.0/template/variables/delete` endpoints for the variable update and delete operations instead. +==== + +For more information, see xref:variables.adoc[Variables documentation]. + +--- + + +[discrete] +==== Metadata parameterization +You can now parameterize multiple properties of metadata objects using `POST /api/rest/2.0/metadata/parameterize-fields`. The legacy endpoint `/api/rest/2.0/metadata/parameterize` is deprecated in 26.4.0.cl and later versions, and is replaced with the new endpoint to allow updating multiple fields in a single API request. + +For more information, see xref:metadata-parameterization.adoc[Metadata parameterization documentation]. + +--- + +[discrete] +==== Collections [beta betaBackground]^Beta^ +ThoughtSpot embedded users can now use REST APIs v2 to organize different ThoughtSpot objects into organizational containers called *Collections*. These objects can be Liveboards, Answers, data models, tables, and even other Collections. + +For more information, see xref:collections.adoc[Collections]. + +[NOTE] +==== +These APIs are currently in beta and turned off by default on ThoughtSpot instances. To enable this feature on your instance, contact ThoughtSpot Support. +==== +--- + +[discrete] +==== Visual Embed SDK +For information about the new features and enhancements introduced in Visual Embed SDK version 1.46.0, see the xref:api-changelog.adoc[Visual Embed changelog]. + + +[discrete] +==== REST API v2 +For information about REST API v2 enhancements, see the xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. + +--- |=== == March 2026 **Release version**: ThoughtSpot Cloud 26.3.0.cl + -*Upgrade notes*: No breaking changes in this release. + -*Recommended SDK versions*: Visual Embed SDK v1.46.0 or later +*Upgrade notes*: ⚠️ Includes feature deprecations. Refer to xref:rest-apiv2-changelog.adoc#_custom_access_token_api[REST API changelog] and xref:deprecated-features.adoc[Deprecation announcements]. + +*Recommended SDK versions*: Visual Embed SDK v1.46.0 and later [.cl-table, cols="2,4", frame=none, grid=none] |=== + a| [.cl-label] *Version 26.3.0.cl* a| +[discrete] +==== Amazon S3 storage destination for webhook delivery +You can now configure ThoughtSpot to deliver webhook payloads and attachments directly into your own Amazon S3 storage using secure AWS cross-account access. To enable this integration, your AWS administrator must create an IAM role with S3 permissions and trust policy, and then register a webhook in ThoughtSpot to deliver the payloads and attachments directly to your S3 bucket. + +For more information, see xref:webhooks-s3-storage.adoc[Amazon S3 storage integration for webhook delivery]. + +--- [discrete] -==== Spotter embed +==== Host event enhancements for context-aware routing -Spotter sidebar actions:: -The Spotter sidebar now exposes additional action controls: `spotterSidebarOpen`, `spotterSidebarClose`, `spotterNewConversation`, and `spotterSidebarSettings`. Use these in `hiddenActions` to control the sidebar shell. For more information, see xref:customize-spotter-embed.adoc[Customize Spotter embed]. +HostEvents in the Visual Embed SDK are enhanced to improve event routing and context targeting in ThoughtSpot embedded applications. + +Developers can use the page context framework in the SDK to route host events to a specific UI layer and align user experience with the product UI behavior in multi-modal contexts. + +For more information, see xref:events-context-aware-routing.adoc[Context-based execution of host events]. + +--- + +[discrete] +==== JWT-based ABAC implementation +The legacy JWT-based approach that uses `filter_rules` and `parameter_values` to implement Attribute-Based Access Control (ABAC) is deprecated. + +As part of this deprecation, the following changes have been introduced to the custom authentication token API workflow and REST API Playground: + +* The `filter_rules` parameter on the custom token authentication page in the REST API Playground is no longer available for new configurations. This change does not affect your existing implementation. + +* The `parameter_values` property is not deprecated in version 26.3.0.cl and remains supported until further notice. However, using parameter values for row-level security use cases will ultimately be deprecated in an upcoming release. + +Existing ABAC implementations that use `filter_rules` will continue to function until further notice. However, we strongly recommend migrating your legacy ABAC implementation to the ABAC via RLS method that uses custom variables. For migration steps, refer to the xref:abac-migration-guide.adoc[ABAC migration guide]. + +For new deployments, use ABAC via RLS with custom variables and pass data security attributes through the `variable_values` property in the custom access token, and define your RLS rules based on those variables. For more information, see xref:abac_rls-variables.adoc[ABAC via RLS]. + +--- + +[discrete] +==== Spotter coaching access across published Orgs +Starting with the 26.3.0.cl release, ThoughtSpot supports publishing Spotter coaching information to other Orgs. Coaching changes from the primary Org are synchronized with the data models published in secondary Orgs. + +Administrators and users with edit access to data models can programmatically control user access to Spotter coaching information using the object privilege REST API endpoint, `/api/rest/2.0/security/metadata/manage-object-privilege`. They can assign `SPOTTER_COACHING_PRIVILEGE` to other users and user groups, allowing access to the coaching information without requiring data model editing or administration privileges. + +Users and groups with `SPOTTER_COACHING_PRIVILEGE` can import and export coaching TML on data models in the source and destination Orgs where the model is published, and can also share these objects with other users and groups. + +For more information, see xref:spotter-nl-instructions.adoc#_allowing_access_to_spotter_data_model_instructions[Allowing access to Spotter data model instructions]. + +--- + +[discrete] +==== Full application embedding +The height and aspect ratio of the logo in the top-left corner of the ThoughtSpot application interface have been updated for visual alignment and consistency across pages. This enhancement is available only in the V3 navigation and home page experience. + +If you have embedded the full application with the V3 navigation experience, you may notice that the logo appears smaller in the top navigation. This is a design update and does not require any configuration changes to your current embedding implementation. However, we recommend that you review the logo size and appearance, and adjust your custom logo if necessary. + +For information about adding a custom logo image, see xref:customize-style.adoc#logo-change[Customize application logo and favicon]. --- [discrete] ==== Visual Embed SDK -For information about the new features and enhancements introduced in Visual Embed SDK version 1.46.0, see xref:api-changelog.adoc[Visual Embed SDK changelog]. +For information about the new features and enhancements introduced in Visual Embed SDK version 1.46.0, see the xref:api-changelog.adoc[Visual Embed changelog]. --- [discrete] -==== REST API -For information about REST API v2.0 enhancements in this release, see xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. +==== REST API v2 +For information about REST API v2 enhancements, see the xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. + +--- |=== == February 2026 - **Release version**: ThoughtSpot Cloud 26.2.0.cl + -*Upgrade notes*: No breaking changes in this release. + -*Recommended SDK versions*: Visual Embed SDK v1.45.0 or later +*Upgrade notes*: ⚠️ Includes API parameter deprecations. Refer to xref:rest-apiv2-changelog.adoc[REST API changelog] and xref:deprecated-features.adoc[Deprecation announcements]. + +*Recommended SDK versions*: Visual Embed SDK v1.45.0 and later + [.cl-table, cols="2,4", frame=none, grid=none] |=== @@ -365,37 +780,143 @@ a| *Version 26.2.0.cl* a| +[discrete] +==== SpotterCode extension for IDEs [earlyAccess eaBackground]#Early Access# + +ThoughtSpot introduces SpotterCode, an AI-powered Model Context Protocol (MCP) extension for Integrated Development Environments (IDEs) such as Cursor, Visual Studio Code, and Claude Code. When integrated, SpotterCode enables the AI agent in the IDE to access ThoughtSpot SDKs and API documentation resources and provide in-context coding assistance to developers embedding ThoughtSpot content within their applications. + +SpotterCode is available as an Early Access feature and can be integrated with development environments that support MCP servers and tools. For more information, see xref:spottercode.adoc[SpotterCode], xref:spottercode-integration.adoc[Integrating SpotterCode in IDEs], and xref:spottercode-prompt-guide.adoc[SpotterCode prompting guide]. + +--- + +[discrete] +==== Spotter 3 experience [earlyAccess eaBackground]#Early Access# +You can now embed the Spotter 3 experience, which introduces several new capabilities, agentic analytics, and an enhanced user experience. Spotter 3 is an Early Access feature and is disabled by default on ThoughtSpot embedded instances. + +For more information, see xref:embed-ai-analytics.adoc[Embed AI Search and Analytics] and xref:embed-spotter.adoc[Spotter embedding documentation]. + +--- + +[discrete] +==== Rate limits for REST APIs +To prevent excessive requests from reaching application servers and ensure API stability and service quality for REST API users, ThoughtSpot enforces rate limits on public API requests per client IP. These limits are applied globally at the cluster level for all public API requests, including calls to both REST API v1 and v2 endpoints. +//Administrators can adjust these limits for their ThoughtSpot deployments as needed. + +For more information, see xref:about-rest-apis.adoc#_rate_limits_for_api_requests[Rate limits for REST APIs]. + +--- + +[discrete] +==== Security settings via REST APIs +Security settings that ensure data security and a seamless embedded user experience can now be configured through REST APIs v2. Administrators and developers can configure allowlists for: + +* Content Security Policy (CSP) +* Cross-origin Resource Sharing (CORS) +* Authentication attributes +* Access control settings + +For more information, see xref:security-settings.adoc[Security Settings]. + +--- + +[discrete] +==== WebSocket support for external tools +ThoughtSpot supports secure WebSocket (`wss://`) endpoints for external tool script integrations, for example, tools that open WebSocket connections from the browser. + +To allow a WebSocket host, add the corresponding `wss://` URL to both your CSP allowlists. Only hosts explicitly listed with the `wss://` protocol are permitted. Existing `https://` entries in the allowlists remain unchanged and continue to function as expected. + +For more information, see xref:3rd-party-script.adoc#_allow_websocket_endpoints[External tools and script integration]. + +--- + [discrete] ==== Visual Embed SDK -For information about the new features and enhancements introduced in Visual Embed SDK version 1.45.0, see xref:api-changelog.adoc[Visual Embed SDK changelog]. +For information about the new features and enhancements introduced in Visual Embed SDK version 1.45.0, see the xref:api-changelog.adoc[Visual Embed changelog]. --- [discrete] -==== REST API -For information about REST API v2.0 enhancements in this release, see xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. +==== REST API v2 +For information about REST API v2 enhancements, see the xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. +--- |=== + == January 2026 -**Release version**: ThoughtSpot Cloud 26.1.0.cl + -*Upgrade notes*: No breaking changes in this release. + -*Recommended SDK versions*: Visual Embed SDK v1.44.0 or later +**Release version**: ThoughtSpot Cloud 10.15.0.cl + +*Upgrade notes*: No breaking changes. + +*Recommended SDK versions*: Visual Embed SDK v1.44.0 and later + [.cl-table, cols="2,4", frame=none, grid=none] |=== a| [.cl-label] -*Version 26.1.0.cl* +*Version 10.15.0.cl* a| +[discrete] +==== Theme Builder +Theme Builder is now generally available (GA) and will be rolled out to all ThoughtSpot instances in customer deployments over the next few weeks. + +When this feature is enabled on your instance, you can access it from the *Develop* page in ThoughtSpot and use it to customize styles and UX themes directly within the product. + +For more information, see xref:theme-builder.adoc[Theme Builder]. + +--- [discrete] -==== Mobile embed support +==== V3 navigation and home page experience -ThoughtSpot now supports embedding ThoughtSpot components in mobile applications using the Visual Embed SDK. This feature is currently in beta and is available to select customers. The mobile embed support allows developers to render ThoughtSpot Liveboards and Answers natively in iOS and Android applications using WebView components. ThoughtSpot mobile embed is compatible with all ThoughtSpot Cloud release versions from 26.1.0.cl and SDK versions from v1.44.0. For a complete list of supported features and limitations, refer to the mobile embed documentation. Note that some features available in browser-based embeds (such as certain custom actions, full-application embed, and certain authentication flows) may not be available or may behave differently in a mobile embed (GA). For more information about the SDKs and how to embed a ThoughtSpot component in a mobile app, see xref:mobile-embed.adoc[Mobile embed documentation]. +The new V3 navigation and home page experience is now generally available (GA) and can be enabled on ThoughtSpot embedded instances. + +The default UI experience in full application embedding remains the classic (V1) experience until further notice. Developers embedding the full ThoughtSpot application can enable the V3 experience in their applications by setting the appropriate configuration options in their embed code. + +For more information, see xref:full-app-customize.adoc[Customizing full application embedding]. + +--- + +[discrete] +==== Formula variables in RLS rules + +You can now create formula variables using the Variable REST API and use these variables in RLS rules for a specific data context and in ABAC token requests to dynamically assign security attributes to users. + +For more information, see xref:abac_rls-variables.adoc[ABAC via RLS with variables]. + +--- + +[discrete] +==== Spotter APIs + +ThoughtSpot introduces new REST APIs for the following Spotter workflows: + +* To send queries to a conversation session with the Spotter agent +* To set data model instructions on a model to coach the Spotter system +* To fetch data model instructions configured on a model + +For more information, see xref:spotter-apis.adoc[Spotter APIs]. + +--- + +[discrete] +==== Embed events and parameters to intercept API calls +You can now intercept API calls from the embedded ThoughtSpot application using the `interceptUrls` attribute in the Visual Embed SDK. This feature lets you control API requests in your embedding application and use embed events to modify, block, or handle requests before they are sent to the backend. For more information, see xref:api-intercept.adoc[Intercept API calls and search requests]. + +--- + +[discrete] +==== Icon customization enhancements + +You can now replace or customize the chart switcher toggle and icons in the Charts drawer on an Answer or visualization page using SVG sprites. Previously, these icons were fixed to ThoughtSpot defaults and were not configurable. In the new version, these icons are available as SVG components and can be replaced by developers through the xref:customize-icons.adoc[icon customization framework] as needed. + +--- + +[discrete] +==== Mobile Embed SDK +The SDKs for embedding ThoughtSpot components in mobile apps are now Generally Available (GA). For more information about the SDKs and how to embed a ThoughtSpot component in a mobile app, see xref:mobile-embed.adoc[Mobile embed documentation]. --- @@ -409,4 +930,4 @@ For information about the new features and enhancements introduced in Visual Emb ==== REST API For information about REST API v2 enhancements, see xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. -|=== +|=== \ No newline at end of file From e02731f27d4fe833252302373b32934f413c9d7f Mon Sep 17 00:00:00 2001 From: ShashiSubramanya Date: Tue, 15 Sep 2026 19:53:23 +0530 Subject: [PATCH 15/33] indentation issue fix --- modules/ROOT/pages/api-changelog.adoc | 166 +++++++++---------- modules/ROOT/pages/rest-apiv2-changelog.adoc | 76 ++++----- 2 files changed, 121 insertions(+), 121 deletions(-) diff --git a/modules/ROOT/pages/api-changelog.adoc b/modules/ROOT/pages/api-changelog.adoc index 094d4f0d3..8461327d3 100644 --- a/modules/ROOT/pages/api-changelog.adoc +++ b/modules/ROOT/pages/api-changelog.adoc @@ -8,126 +8,126 @@ This page documents the changes introduced in each release of the Visual Embed SDK. For information about the REST API v2.0 changes, see the xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. - == Version 1.53.0, October 2026 +== Version 1.53.0, October 2026 - [width="100%", cols="1,4"] - |==== - |[tag greenBackground]#NEW# - a| - [discrete] - ===== Spotter Analyst embed (`spotterAnalystConfig`) +[width="100%", cols="1,4"] +|==== +|[tag greenBackground]#NEW# +a| +[discrete] +===== Spotter Analyst embed (`spotterAnalystConfig`) - You can now embed a single, pinned Spotter Analyst using `spotterAnalystConfig.analystId` in `SpotterEmbed`. Setting this property locks the embed to one governed Analyst and prevents users from navigating to other Analysts or to the default Spotter. +You can now embed a single, pinned Spotter Analyst using `spotterAnalystConfig.analystId` in `SpotterEmbed`. Setting this property locks the embed to one governed Analyst and prevents users from navigating to other Analysts or to the default Spotter. - New and updated configuration properties: +New and updated configuration properties: - `SpotterAnalystConfig.analystId` (string):: - Pins the embed to the Analyst with this GUID. Available from cluster version 26.10.0.cl. +`SpotterAnalystConfig.analystId` (string):: +Pins the embed to the Analyst with this GUID. Available from cluster version 26.10.0.cl. - `spotterChatPinConfig` (on `SpotterSidebarViewConfig`):: - Enables pinning and unpinning of conversations in the sidebar. Contains `enabled` (boolean, default `false`), `pinLabel` (string), and `unpinLabel` (string). Available from cluster version 26.10.0.cl. +`spotterChatPinConfig` (on `SpotterSidebarViewConfig`):: +Enables pinning and unpinning of conversations in the sidebar. Contains `enabled` (boolean, default `false`), `pinLabel` (string), and `unpinLabel` (string). Available from cluster version 26.10.0.cl. - `isScopedLiveboardFilteringEnabled` (on `LiveboardViewConfig` and `AppViewConfig`):: - Enables group-level filter and parameter scoping on Liveboards, in addition to existing Liveboard-level and tab-level scoping. Available from cluster version 26.10.0.cl. +`isScopedLiveboardFilteringEnabled` (on `LiveboardViewConfig` and `AppViewConfig`):: +Enables group-level filter and parameter scoping on Liveboards, in addition to existing Liveboard-level and tab-level scoping. Available from cluster version 26.10.0.cl. - `starterPrompts` (on `SpotterChatViewConfig`):: - Configures which starter prompt pills are shown above the Spotter chat input. Contains keys: `enable`, `quick`, `research`, `previewData`, and `liveboard`. Available from cluster version 26.10.0.cl. +`starterPrompts` (on `SpotterChatViewConfig`):: +Configures which starter prompt pills are shown above the Spotter chat input. Contains keys: `enable`, `quick`, `research`, `previewData`, and `liveboard`. Available from cluster version 26.10.0.cl. - `openSpotterOnLiveboardByDefault` (on `SpotterChatViewConfig`):: - Opens the Spotter chat panel automatically when a Liveboard loads. Default: `true`. Supported on `LiveboardEmbed` and `AppEmbed`. Available from cluster version 26.10.0.cl. +`openSpotterOnLiveboardByDefault` (on `SpotterChatViewConfig`):: +Opens the Spotter chat panel automatically when a Liveboard loads. Default: `true`. Supported on `LiveboardEmbed` and `AppEmbed`. Available from cluster version 26.10.0.cl. - For more information, see xref:embed-spotter-analyst.adoc[Embed Spotter Analyst]. +For more information, see xref:embed-spotter-analyst.adoc[Embed Spotter Analyst]. - |[tag greenBackground]#NEW# - a| - [discrete] - ===== New `Action` enum members +|[tag greenBackground]#NEW# +a| +[discrete] +===== New `Action` enum members - The following `Action` enum members are added in this release: +The following `Action` enum members are added in this release: - [cols="2,3"] - !=== - ! Action ! Description +[cols="2,3"] +!=== +! Action ! Description - ! `Action.SpotterChatPin` - ! Controls the visibility and disabled state of the pin and unpin action in the Spotter conversation edit menu. +! `Action.SpotterChatPin` +! Controls the visibility and disabled state of the pin and unpin action in the Spotter conversation edit menu. - ! `Action.SpotterAnalystList` - ! Controls the visibility and disabled state of the Show all Analysts row in the Analyst interface. +! `Action.SpotterAnalystList` +! Controls the visibility and disabled state of the Show all Analysts row in the Analyst interface. - ! `Action.SpotterDefaultAnalyst` - ! Controls the visibility and disabled state of the default Spotter analyst entry in the Analyst interface. +! `Action.SpotterDefaultAnalyst` +! Controls the visibility and disabled state of the default Spotter analyst entry in the Analyst interface. - ! `Action.SpotterOnLiveboard` - ! Controls the Spotter button in the Liveboard header. +! `Action.SpotterOnLiveboard` +! Controls the Spotter button in the Liveboard header. - ! `Action.AllLiveboardFilters` - ! Shows, hides, or disables all filter surfaces on a Liveboard: filter chips, parameter chips, and cross-filter chips at the Liveboard, tab, and group levels. Parameter and cross-filter chips support hide only and cannot be disabled. +! `Action.AllLiveboardFilters` +! Shows, hides, or disables all filter surfaces on a Liveboard: filter chips, parameter chips, and cross-filter chips at the Liveboard, tab, and group levels. Parameter and cross-filter chips support hide only and cannot be disabled. - ! `Action.EditInputTable` - ! Edits an input table used by an Answer directly from the Liveboard. +! `Action.EditInputTable` +! Edits an input table used by an Answer directly from the Liveboard. - ! `Action.QuickSearchPill` - ! Controls the Basic Search starter-prompt pill in the Spotter interface. +! `Action.QuickSearchPill` +! Controls the Basic Search starter-prompt pill in the Spotter interface. - ! `Action.DeepAnalysisPill` - ! Controls the Deep Analysis starter-prompt pill in the Spotter interface. +! `Action.DeepAnalysisPill` +! Controls the Deep Analysis starter-prompt pill in the Spotter interface. - ! `Action.DataLiteracyPill` - ! Controls the Data Literacy starter-prompt pill in the Spotter interface. - !=== +! `Action.DataLiteracyPill` +! Controls the Data Literacy starter-prompt pill in the Spotter interface. +!=== - |[tag greenBackground]#NEW# - a| - [discrete] - ===== New `EmbedEvent` members +|[tag greenBackground]#NEW# +a| +[discrete] +===== New `EmbedEvent` members - `EmbedEvent.SpotterConversationPinned`:: - Emitted when a user pins a Spotter conversation. Payload: `{ conversationId, pinnedAt }`. Requires `spotterChatPinConfig.enabled: true` and `enablePastConversationsSidebar: true`. +`EmbedEvent.SpotterConversationPinned`:: +Emitted when a user pins a Spotter conversation. Payload: `{ conversationId, pinnedAt }`. Requires `spotterChatPinConfig.enabled: true` and `enablePastConversationsSidebar: true`. - `EmbedEvent.SpotterConversationUnpinned`:: - Emitted when a user unpins a Spotter conversation. Payload: `{ conversationId, unpinnedAt }`. Requires `spotterChatPinConfig.enabled: true` and `enablePastConversationsSidebar: true`. +`EmbedEvent.SpotterConversationUnpinned`:: +Emitted when a user unpins a Spotter conversation. Payload: `{ conversationId, unpinnedAt }`. Requires `spotterChatPinConfig.enabled: true` and `enablePastConversationsSidebar: true`. - The following existing `EmbedEvent` members gained an optional `applicability` attribute for scoped filter and parameter operations: +The following existing `EmbedEvent` members gained an optional `applicability` attribute for scoped filter and parameter operations: - * `EmbedEvent.FilterChanged` - * `EmbedEvent.ParameterChanged` +* `EmbedEvent.FilterChanged` +* `EmbedEvent.ParameterChanged` - |[tag greenBackground]#NEW# - a| - [discrete] - ===== New `HostEvent` members +|[tag greenBackground]#NEW# +a| +[discrete] +===== New `HostEvent` members - `HostEvent.PinSpotterConversation`:: - Pins a saved Spotter conversation. Accepts `{ conversationId }`. Requires `enablePastConversationsSidebar: true` on the instance. +`HostEvent.PinSpotterConversation`:: +Pins a saved Spotter conversation. Accepts `{ conversationId }`. Requires `enablePastConversationsSidebar: true` on the instance. - `HostEvent.UnpinSpotterConversation`:: - Unpins a previously pinned Spotter conversation. Accepts `{ conversationId }`. Requires `enablePastConversationsSidebar: true` on the instance. +`HostEvent.UnpinSpotterConversation`:: +Unpins a previously pinned Spotter conversation. Accepts `{ conversationId }`. Requires `enablePastConversationsSidebar: true` on the instance. - `HostEvent.GetGroups`:: - Returns filter and parameter group details for the current Liveboard. Response includes `orderedGroupIds`, `numberOfGroups`, and `Groups`. +`HostEvent.GetGroups`:: +Returns filter and parameter group details for the current Liveboard. Response includes `orderedGroupIds`, `numberOfGroups`, and `Groups`. - `HostEvent.OpenParameter`:: - Opens the parameter panel for a specific parameter on the Liveboard. Accepts an optional `applicability` object to scope the action to a tab or group. +`HostEvent.OpenParameter`:: +Opens the parameter panel for a specific parameter on the Liveboard. Accepts an optional `applicability` object to scope the action to a tab or group. - The following existing `HostEvent` members gained an optional `applicability` attribute for scoping to a Liveboard tab or group: +The following existing `HostEvent` members gained an optional `applicability` attribute for scoping to a Liveboard tab or group: - * `HostEvent.OpenFilter` - * `HostEvent.GetFilters` - * `HostEvent.UpdateFilters` - * `HostEvent.UpdateParameters` - * `HostEvent.GetParameters` +* `HostEvent.OpenFilter` +* `HostEvent.GetFilters` +* `HostEvent.UpdateFilters` +* `HostEvent.UpdateParameters` +* `HostEvent.GetParameters` - |[tag yellowBackground]#DEPRECATED# - a| - [discrete] - ===== `HostEvent.UpdatePersonalizedView` deprecated +|[tag yellowBackground]#DEPRECATED# +a| +[discrete] +===== `HostEvent.UpdatePersonalizedView` deprecated - `HostEvent.UpdatePersonalizedView` is deprecated in this release. Use `HostEvent.SelectPersonalizedView` instead. The replacement accepts an optional `viewName` to select a view by name, resets to the original view when the payload is empty, and reports an error when the named view is not found. +`HostEvent.UpdatePersonalizedView` is deprecated in this release. Use `HostEvent.SelectPersonalizedView` instead. The replacement accepts an optional `viewName` to select a view by name, resets to the original view when the payload is empty, and reports an error when the named view is not found. - |==== +|==== - == Version 1.52.x, September 2026 +== Version 1.52.x, September 2026 [width="100%" cols="1,4"] |==== diff --git a/modules/ROOT/pages/rest-apiv2-changelog.adoc b/modules/ROOT/pages/rest-apiv2-changelog.adoc index f74abede8..d4d4aa8f7 100644 --- a/modules/ROOT/pages/rest-apiv2-changelog.adoc +++ b/modules/ROOT/pages/rest-apiv2-changelog.adoc @@ -8,64 +8,64 @@ This changelog lists the features and enhancements introduced in REST API v2.0. For information about new features and enhancements available for embedded analytics, see xref:whats-new.adoc[What's New]. - == Version 26.10.0.cl, October 2026 +== Version 26.10.0.cl, October 2026 - === Spotter Analyst API +=== Spotter Analyst API - Four new endpoints are available for managing Spotter Analysts programmatically. All endpoints are under `/api/rest/2.0/ai/agent/analysts/`. +Four new endpoints are available for managing Spotter Analysts programmatically. All endpoints are under `/api/rest/2.0/ai/agent/analysts/`. - [cols="2,4"] - |=== - | Endpoint | Description +[cols="2,4"] +|=== +| Endpoint | Description - | `POST /api/rest/2.0/ai/agent/analysts/create` - | Creates a Spotter Analyst with a name, description, data sources, and optional instructions, MCP connectors, and starter prompts. Requires `ADMINISTRATION`, `CAN_MANAGE_SPOTTER`, or `CAN_USE_SPOTTER` privilege, plus view access to all referenced sources. Returns the created `Analyst` object including the server-assigned `id`. +| `POST /api/rest/2.0/ai/agent/analysts/create` +| Creates a Spotter Analyst with a name, description, data sources, and optional instructions, MCP connectors, and starter prompts. Requires `ADMINISTRATION`, `CAN_MANAGE_SPOTTER`, or `CAN_USE_SPOTTER` privilege, plus view access to all referenced sources. Returns the created `Analyst` object including the server-assigned `id`. - | `POST /api/rest/2.0/ai/agent/analysts/search` - | Returns Analysts visible to the caller. Operates in fetch mode (single Analyst by `analyst_identifier`) or list mode (paginated, ordered by most recently accessed). Supports filtering by ownership type: `ALL`, `CREATED_BY_ME`, or `SHARED_TO_ME`. Requires `ADMINISTRATION`, `CAN_MANAGE_SPOTTER`, or `CAN_USE_SPOTTER`. +| `POST /api/rest/2.0/ai/agent/analysts/search` +| Returns Analysts visible to the caller. Operates in fetch mode (single Analyst by `analyst_identifier`) or list mode (paginated, ordered by most recently accessed). Supports filtering by ownership type: `ALL`, `CREATED_BY_ME`, or `SHARED_TO_ME`. Requires `ADMINISTRATION`, `CAN_MANAGE_SPOTTER`, or `CAN_USE_SPOTTER`. - | `POST /api/rest/2.0/ai/agent/analysts/{analyst_identifier}/update` - | Full-replace update of a Spotter Analyst. Omitted optional fields are cleared. Requires ownership or `ADMINISTRATION`/`CAN_MANAGE_SPOTTER` privilege. When new sources are added, they are automatically shared with existing users of the Analyst. +| `POST /api/rest/2.0/ai/agent/analysts/{analyst_identifier}/update` +| Full-replace update of a Spotter Analyst. Omitted optional fields are cleared. Requires ownership or `ADMINISTRATION`/`CAN_MANAGE_SPOTTER` privilege. When new sources are added, they are automatically shared with existing users of the Analyst. - | `POST /api/rest/2.0/ai/agent/analysts/{analyst_identifier}/delete` - | Permanently deletes a Spotter Analyst. This operation is irreversible. Requires ownership or `ADMINISTRATION`/`CAN_MANAGE_SPOTTER` privilege. - |=== +| `POST /api/rest/2.0/ai/agent/analysts/{analyst_identifier}/delete` +| Permanently deletes a Spotter Analyst. This operation is irreversible. Requires ownership or `ADMINISTRATION`/`CAN_MANAGE_SPOTTER` privilege. +|=== - For full parameter details, request and response schemas, and code examples, see xref:spotter-analyst-api.adoc[Spotter Analyst API]. +For full parameter details, request and response schemas, and code examples, see xref:spotter-analyst-api.adoc[Spotter Analyst API]. - === Feature Management API +=== Feature Management API - Three new endpoints are available for programmatic feature management. All endpoints are under `/api/rest/2.0/configurations/features/`. +Three new endpoints are available for programmatic feature management. All endpoints are under `/api/rest/2.0/configurations/features/`. - [cols="2,4"] - |=== - | Endpoint | Description +[cols="2,4"] +|=== +| Endpoint | Description - | `POST /api/rest/2.0/configurations/features/search` - | Returns feature configurations grouped by feature group. Supports `CLUSTER` scope (cluster-admin view, returns `assigned_orgs` per feature) and `ORG` scope (Org-admin view, returns `element_value` per feature). The `category` parameter filters by `GENERAL_ACCESS` (default) or `EARLY_ACCESS`. Requires `ADMINISTRATION` or `ORG_ADMINISTRATION`. +| `POST /api/rest/2.0/configurations/features/search` +| Returns feature configurations grouped by feature group. Supports `CLUSTER` scope (cluster-admin view, returns `assigned_orgs` per feature) and `ORG` scope (Org-admin view, returns `element_value` per feature). The `category` parameter filters by `GENERAL_ACCESS` (default) or `EARLY_ACCESS`. Requires `ADMINISTRATION` or `ORG_ADMINISTRATION`. - | `POST /api/rest/2.0/configurations/features/assignments/update` - | Updates Org assignments for a feature using `ADD`, `REMOVE`, or `REPLACE` operations. Send an empty `org_identifiers` array with `REPLACE` to remove all assignments. Requires cluster-admin `ADMINISTRATION` privilege. Org-scoped admins cannot call this endpoint. +| `POST /api/rest/2.0/configurations/features/assignments/update` +| Updates Org assignments for a feature using `ADD`, `REMOVE`, or `REPLACE` operations. Send an empty `org_identifiers` array with `REPLACE` to remove all assignments. Requires cluster-admin `ADMINISTRATION` privilege. Org-scoped admins cannot call this endpoint. - | `POST /api/rest/2.0/configurations/features/values/update` - | Sets feature value at `CLUSTER` or `ORG` scope. At `CLUSTER` scope, setting `reset_org_overrides: true` removes all per-Org value overrides cluster-wide. This operation is irreversible via the API. Requires `ADMINISTRATION`. - |=== +| `POST /api/rest/2.0/configurations/features/values/update` +| Sets feature value at `CLUSTER` or `ORG` scope. At `CLUSTER` scope, setting `reset_org_overrides: true` removes all per-Org value overrides cluster-wide. This operation is irreversible via the API. Requires `ADMINISTRATION`. +|=== - For full parameter details, request and response schemas, and code examples, see xref:feature-management-api.adoc[Feature Management API]. +For full parameter details, request and response schemas, and code examples, see xref:feature-management-api.adoc[Feature Management API]. - === Update Conversation — `is_pinned` field added +=== Update Conversation — `is_pinned` field added - The `POST /api/rest/2.0/ai/agent/conversations/{conversation_identifier}/update` endpoint now accepts an `is_pinned` boolean field. +The `POST /api/rest/2.0/ai/agent/conversations/{conversation_identifier}/update` endpoint now accepts an `is_pinned` boolean field. - * Set `is_pinned: true` to pin the conversation to the top of the conversation list. - * Set `is_pinned: false` to unpin a previously pinned conversation. - * The operation is idempotent: pinning an already-pinned conversation or unpinning an already-unpinned one succeeds with no side effects. - * Only conversations created with `enable_save_chat: true` can be pinned. - * Both `title` and `is_pinned` can be updated in a single request. +* Set `is_pinned: true` to pin the conversation to the top of the conversation list. +* Set `is_pinned: false` to unpin a previously pinned conversation. +* The operation is idempotent: pinning an already-pinned conversation or unpinning an already-unpinned one succeeds with no side effects. +* Only conversations created with `enable_save_chat: true` can be pinned. +* Both `title` and `is_pinned` can be updated in a single request. - NOTE: The `title` field has been available since version 26.7.0.cl. The `is_pinned` field is new in version 26.10.0.cl. +NOTE: The `title` field has been available since version 26.7.0.cl. The `is_pinned` field is new in version 26.10.0.cl. - == Version 26.9.0.cl, September 2026 +== Version 26.9.0.cl, September 2026 === Answer Export API From 55c78b6835fd9b462934d9dd88a63c992ca4ff9f Mon Sep 17 00:00:00 2001 From: Rani Gangwar Date: Wed, 23 Sep 2026 11:19:30 +0530 Subject: [PATCH 16/33] edits --- .../ROOT/pages/feature-management-api.adoc | 86 +++++++------------ modules/ROOT/pages/rest-apiv2-changelog.adoc | 9 +- modules/ROOT/pages/whats-new.adoc | 4 +- 3 files changed, 37 insertions(+), 62 deletions(-) diff --git a/modules/ROOT/pages/feature-management-api.adoc b/modules/ROOT/pages/feature-management-api.adoc index 7e85dab14..f55541e3f 100644 --- a/modules/ROOT/pages/feature-management-api.adoc +++ b/modules/ROOT/pages/feature-management-api.adoc @@ -1,25 +1,24 @@ -= Feature Management API += Feature Management :toc: true :toclevels: 2 :page-title: Feature Management API -:page-pageid: feature-management-api +:page-pageid: feature-management :page-description: Search feature configurations, assign features to Orgs, and set feature values using the REST API // SOURCE: SCAL-319281; search-feature.md, update-feature-assignment.md, updated-feature-value.md -The Feature Management API lets cluster and Org admins retrieve feature configurations, assign features to Orgs, and set feature values programmatically. These endpoints replicate the feature management capabilities available in the Admin Portal 2.0 UI. +The Feature Management API lets cluster and Org admins retrieve feature configurations, assign features to Orgs, and set feature values programmatically. These endpoints replicate the feature management capabilities available in the https://docs.thoughtspot.com/cloud/26.9.0.cl/admin-portal-2#_feature_management[link:https://docs.thoughtspot.com/cloud/latest/admin-portal-2#_feature_management][new Admin portal UI]. All endpoints are under `/api/rest/2.0/configurations/features/` and are available from ThoughtSpot Cloud 26.10.0.cl. -== Prerequisites -* Feature Management must be enabled on your ThoughtSpot instance. -* All requests require a Bearer token. -* If link:https://developers.thoughtspot.com/docs/rbac[Role-Based Access Control (RBAC)] is enabled on your instance, the `ADMINISTRATION` privilege is required for all write operations. -* Privilege requirements vary by operation. See each endpoint section for details. +== Before you begin -== Key concepts +=== Required privileges + +If link:https://developers.thoughtspot.com/docs/rbac[Role-Based Access Control (RBAC)] is enabled on your instance, the `ADMINISTRATION` or `ORG_ADMINISTRATION` privilege is required for all write operations. +See each endpoint section for privilege details. === Feature scope @@ -46,13 +45,7 @@ Features are grouped into availability categories: == Search features -`POST /api/rest/2.0/configurations/features/search` - -Returns feature configurations available on the ThoughtSpot instance, grouped by feature group. - -=== Privileges required - -`ADMINISTRATION` or `ORG_ADMINISTRATION`. +The `POST /api/rest/2.0/configurations/features/search` API endpoint returns feature configurations available on the ThoughtSpot instance. === Request parameters @@ -63,7 +56,7 @@ Returns feature configurations available on the ThoughtSpot instance, grouped by | `scope` | string | Required -| Administrative view: `CLUSTER` returns the cluster-admin view, including `assigned_orgs` per feature. `ORG` returns the Org-admin view, including `element_value` per feature. +| `CLUSTER` returns the cluster-admin view, including `assigned_orgs` per feature. `ORG` returns the Org-admin view, including `element_value` per feature. | `org_identifier` | integer @@ -75,16 +68,7 @@ Returns feature configurations available on the ThoughtSpot instance, grouped by | Optional | Feature availability category: `GENERAL_ACCESS` (default) or `EARLY_ACCESS`. |=== - -=== Response fields by scope - -The response fields populated depend on the requested `scope`. - -*Cluster view (`scope=CLUSTER`)*: each feature includes `feature_id`, `feature_name`, `assigned_orgs`, `is_org_aware`, and (for non-Org-aware features) `feature_value`. - -*Org view (`scope=ORG`)*: each feature includes `feature_id`, `feature_name`, `element_type`, `element_config`, and `element_value`. - -=== Example: cluster view +=== Example request: cluster view [source,bash] ---- @@ -98,24 +82,7 @@ curl -X POST \ "category": "GENERAL_ACCESS" }' ---- - -=== Example: Org view - -[source,bash] ----- -curl -X POST \ - --url 'https://{cluster}/api/rest/2.0/configurations/features/search' \ - -H 'Accept: application/json' \ - -H 'Content-Type: application/json' \ - -H 'Authorization: Bearer {token}' \ - --data-raw '{ - "scope": "ORG", - "org_identifier": 1, - "category": "GENERAL_ACCESS" -}' ----- - -=== Example response (cluster view) +=== API response: cluster view [source,json] ---- @@ -142,18 +109,27 @@ curl -X POST \ ] ---- -=== Error responses +=== Example request: Org view -[cols="1,3"] -|=== -| HTTP status code | Description +[source,bash] +---- +curl -X POST \ + --url 'https://{cluster}/api/rest/2.0/configurations/features/search' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {token}' \ + --data-raw '{ + "scope": "ORG", + "org_identifier": 1, + "category": "GENERAL_ACCESS" +}' +---- +=== API response: Org view -| 400 | Invalid request parameters, or `org_identifier` is missing when `scope` is `ORG`. -| 401 | Bearer token is missing, expired, or invalid. -| 403 | Insufficient privileges. -| 404 | Feature Management is not enabled on this instance. -| 500 | Unexpected server error. -|=== +[source,json] +---- +[{"feature_group":"downloadsAndSchedules","docs_url":null,"features":[{"feature_id":"orion.exportConfig.legalDisclaimerText","feature_name":"downloaded_file_instructions","assigned_orgs":null,"is_org_aware":null,"feature_value":null,"element_type":"input","element_config":{"type":"textarea"},"element_value":"new ","docs_url":null}]},{"feature_group":"sage_feature","docs_url":null,"features":[{"feature_id":"orion.enableConvAssist","feature_name":"spotter_on_liveboard","assigned_orgs":null,"is_org_aware":null,"feature_value":null,"element_type":"toggle","element_config":null,"element_value":"true","docs_url":null},{"feature_id":"orion.enableKaiosAgent","feature_name":"spotterviz_on_liveboard","assigned_orgs":null,"is_org_aware":null,"feature_value":null,"element_type":"toggle","element_config":null,"element_value":"false","docs_url":null}]},{"feature_group":"appSettingsGeneralSettings","docs_url":null,"features":[{"feature_id":"orion.exportConfig.legalDisclaimerText","feature_name":"downloaded_file_instructions","assigned_orgs":null,"is_org_aware":null,"feature_value":null,"element_type":"input","element_config":{"type":"textarea"},"element_value":"new ","docs_url":null}]}] +---- == Update feature assignments diff --git a/modules/ROOT/pages/rest-apiv2-changelog.adoc b/modules/ROOT/pages/rest-apiv2-changelog.adoc index d4d4aa8f7..ddb60fd15 100644 --- a/modules/ROOT/pages/rest-apiv2-changelog.adoc +++ b/modules/ROOT/pages/rest-apiv2-changelog.adoc @@ -34,21 +34,20 @@ Four new endpoints are available for managing Spotter Analysts programmatically. For full parameter details, request and response schemas, and code examples, see xref:spotter-analyst-api.adoc[Spotter Analyst API]. === Feature Management API - -Three new endpoints are available for programmatic feature management. All endpoints are under `/api/rest/2.0/configurations/features/`. +This release introduces the following new REST API v2.0 endpoints for programmatic feature management. All endpoints are under `/api/rest/2.0/configurations/features/`. [cols="2,4"] |=== | Endpoint | Description | `POST /api/rest/2.0/configurations/features/search` -| Returns feature configurations grouped by feature group. Supports `CLUSTER` scope (cluster-admin view, returns `assigned_orgs` per feature) and `ORG` scope (Org-admin view, returns `element_value` per feature). The `category` parameter filters by `GENERAL_ACCESS` (default) or `EARLY_ACCESS`. Requires `ADMINISTRATION` or `ORG_ADMINISTRATION`. +| Returns feature configurations grouped by feature group. | `POST /api/rest/2.0/configurations/features/assignments/update` -| Updates Org assignments for a feature using `ADD`, `REMOVE`, or `REPLACE` operations. Send an empty `org_identifiers` array with `REPLACE` to remove all assignments. Requires cluster-admin `ADMINISTRATION` privilege. Org-scoped admins cannot call this endpoint. +| Updates Org assignments for a feature using `ADD`, `REMOVE`, or `REPLACE` operations. | `POST /api/rest/2.0/configurations/features/values/update` -| Sets feature value at `CLUSTER` or `ORG` scope. At `CLUSTER` scope, setting `reset_org_overrides: true` removes all per-Org value overrides cluster-wide. This operation is irreversible via the API. Requires `ADMINISTRATION`. +| Sets feature value at `CLUSTER` or `ORG` scope. |=== For full parameter details, request and response schemas, and code examples, see xref:feature-management-api.adoc[Feature Management API]. diff --git a/modules/ROOT/pages/whats-new.adoc b/modules/ROOT/pages/whats-new.adoc index caf3a8f4d..f0cedaaaa 100644 --- a/modules/ROOT/pages/whats-new.adoc +++ b/modules/ROOT/pages/whats-new.adoc @@ -60,9 +60,9 @@ Users can now pin Spotter conversations so they appear at the top of the convers --- [discrete] -==== Feature Management API +==== Feature management through APIs -Three new endpoints are available under `/api/rest/2.0/configurations/features/` for programmatic feature management. Cluster and Org admins can search feature configurations, assign features to Orgs, and set feature values without using the Admin Portal 2.0 UI. For more information, see xref:feature-management-api.adoc[Feature Management API]. +ThoughtSpot now supports programmatic feature management with new REST APIv2 endpoints available under `/api/rest/2.0/configurations/features/`. Cluster and Org admins can search feature configurations, assign features to Orgs, and set feature values without using the link:https://docs.thoughtspot.com/cloud/26.9.0.cl/admin-portal-2[new Admin portal]. For more information, see xref:feature-management-api.adoc[Feature Management]. --- From 1f758426e996c50ac870350a541e981fcabb9ee7 Mon Sep 17 00:00:00 2001 From: Rani Gangwar Date: Wed, 23 Sep 2026 11:50:48 +0530 Subject: [PATCH 17/33] more edits --- modules/ROOT/pages/common/nav-rest-api.adoc | 1 + .../ROOT/pages/feature-management-api.adoc | 141 ++++++++++-------- modules/ROOT/pages/whats-new.adoc | 2 +- 3 files changed, 77 insertions(+), 67 deletions(-) diff --git a/modules/ROOT/pages/common/nav-rest-api.adoc b/modules/ROOT/pages/common/nav-rest-api.adoc index 0251c0f31..e74ec5297 100644 --- a/modules/ROOT/pages/common/nav-rest-api.adoc +++ b/modules/ROOT/pages/common/nav-rest-api.adoc @@ -21,6 +21,7 @@ REST API endpoints ** link:{{navprefix}}/api-user-management[Users and group privileges] ** link:{{navprefix}}/rbac[Role-based access control] ** link:{{navprefix}}/audit-logs[Audit logs] +** link:{{navprefix}}/feature-management[Feature Management] * Multi-tenancy and Orgs ** link:{{navprefix}}/orgs-api-op[Orgs APIs] diff --git a/modules/ROOT/pages/feature-management-api.adoc b/modules/ROOT/pages/feature-management-api.adoc index f55541e3f..85bc65946 100644 --- a/modules/ROOT/pages/feature-management-api.adoc +++ b/modules/ROOT/pages/feature-management-api.adoc @@ -6,9 +6,7 @@ :page-pageid: feature-management :page-description: Search feature configurations, assign features to Orgs, and set feature values using the REST API -// SOURCE: SCAL-319281; search-feature.md, update-feature-assignment.md, updated-feature-value.md - -The Feature Management API lets cluster and Org admins retrieve feature configurations, assign features to Orgs, and set feature values programmatically. These endpoints replicate the feature management capabilities available in the https://docs.thoughtspot.com/cloud/26.9.0.cl/admin-portal-2#_feature_management[link:https://docs.thoughtspot.com/cloud/latest/admin-portal-2#_feature_management][new Admin portal UI]. +The Feature Management API lets cluster and Org admins retrieve feature configurations, assign features to Orgs, and set feature values programmatically. These endpoints replicate the feature management capabilities available in the link:https://docs.thoughtspot.com/cloud/latest/admin-portal-2#_feature_management[new Admin portal UI, window=_blank]. All endpoints are under `/api/rest/2.0/configurations/features/` and are available from ThoughtSpot Cloud 26.10.0.cl. @@ -17,8 +15,13 @@ All endpoints are under `/api/rest/2.0/configurations/features/` and are availab === Required privileges -If link:https://developers.thoughtspot.com/docs/rbac[Role-Based Access Control (RBAC)] is enabled on your instance, the `ADMINISTRATION` or `ORG_ADMINISTRATION` privilege is required for all write operations. -See each endpoint section for privilege details. +All Feature Management API endpoints require the `ADMINISTRATION` or `ORG_ADMINISTRATION` privilege. The `ORG_ADMINISTRATION` privilege applies only to Org admins. +If xref:roles.adoc[Role-Based Access Control (RBAC)] is enabled on your instance, these privileges are granted through roles. + +=== Prerequisites + +* Feature Management must be enabled on your ThoughtSpot instance. If it is not enabled, the API returns a `404` error. +* To set a feature value at `ORG` scope, the Org must be assigned to that feature. Otherwise, the API returns a `403` error. To assign Orgs to a feature, see <<_update_feature_assignments,Update feature assignments>>. === Feature scope @@ -32,7 +35,7 @@ Org scope:: A per-Org value override, visible to Org admins. Returns `element_ty Each feature can be referenced by its: * `feature_name`: a human-readable name, such as `index_columns`. -* `feature_id`: the underlying system identifier, such as `orion.embraceConfig.doIndexing`. +* `feature_id`: the underlying system identifier, such as `feature.search.columnIndexing`. Both forms are accepted in requests to any endpoint that takes a `feature_identifier`. @@ -45,7 +48,9 @@ Features are grouped into availability categories: == Search features -The `POST /api/rest/2.0/configurations/features/search` API endpoint returns feature configurations available on the ThoughtSpot instance. +The `POST /api/rest/2.0/configurations/features/search` API endpoint returns the feature configurations available on the ThoughtSpot instance. Requires the `ADMINISTRATION` or `ORG_ADMINISTRATION` privilege. The `ORG_ADMINISTRATION` privilege applies only to Org admins. + +A successful request returns `200 OK` and an array of feature groups. Each group contains a `feature_group` name and a `features` array. The fields returned for each feature depend on the `scope` of the request. For more information, see <<_feature_scope,Feature scope>>. === Request parameters @@ -68,6 +73,7 @@ The `POST /api/rest/2.0/configurations/features/search` API endpoint returns fea | Optional | Feature availability category: `GENERAL_ACCESS` (default) or `EARLY_ACCESS`. |=== + === Example request: cluster view [source,bash] @@ -82,7 +88,8 @@ curl -X POST \ "category": "GENERAL_ACCESS" }' ---- -=== API response: cluster view + +==== API response [source,json] ---- @@ -92,7 +99,7 @@ curl -X POST \ "docs_url": null, "features": [ { - "feature_id": "orion.embraceConfig.doIndexing", + "feature_id": "feature.search.columnIndexing", "feature_name": "index_columns", "assigned_orgs": [ { @@ -124,22 +131,56 @@ curl -X POST \ "category": "GENERAL_ACCESS" }' ---- -=== API response: Org view + +==== API response [source,json] ---- -[{"feature_group":"downloadsAndSchedules","docs_url":null,"features":[{"feature_id":"orion.exportConfig.legalDisclaimerText","feature_name":"downloaded_file_instructions","assigned_orgs":null,"is_org_aware":null,"feature_value":null,"element_type":"input","element_config":{"type":"textarea"},"element_value":"new ","docs_url":null}]},{"feature_group":"sage_feature","docs_url":null,"features":[{"feature_id":"orion.enableConvAssist","feature_name":"spotter_on_liveboard","assigned_orgs":null,"is_org_aware":null,"feature_value":null,"element_type":"toggle","element_config":null,"element_value":"true","docs_url":null},{"feature_id":"orion.enableKaiosAgent","feature_name":"spotterviz_on_liveboard","assigned_orgs":null,"is_org_aware":null,"feature_value":null,"element_type":"toggle","element_config":null,"element_value":"false","docs_url":null}]},{"feature_group":"appSettingsGeneralSettings","docs_url":null,"features":[{"feature_id":"orion.exportConfig.legalDisclaimerText","feature_name":"downloaded_file_instructions","assigned_orgs":null,"is_org_aware":null,"feature_value":null,"element_type":"input","element_config":{"type":"textarea"},"element_value":"new ","docs_url":null}]}] +[ + { + "feature_group": "spotter", + "docs_url": null, + "features": [ + { + "feature_id": "feature.spotter.liveboardAssist", + "feature_name": "spotter_on_liveboard", + "assigned_orgs": null, + "is_org_aware": null, + "feature_value": null, + "element_type": "toggle", + "element_config": null, + "element_value": "true", + "docs_url": null + } + ] + }, + { + "feature_group": "downloads", + "docs_url": null, + "features": [ + { + "feature_id": "feature.export.fileInstructions", + "feature_name": "downloaded_file_instructions", + "assigned_orgs": null, + "is_org_aware": null, + "feature_value": null, + "element_type": "input", + "element_config": { + "type": "textarea" + }, + "element_value": "Internal use only", + "docs_url": null + } + ] + } +] ---- == Update feature assignments -`POST /api/rest/2.0/configurations/features/assignments/update` +The `POST /api/rest/2.0/configurations/features/assignments/update` API endpoint updates the Org assignments for a feature. Available to cluster admins only. Org-scoped admins cannot call this endpoint. Requires the `ADMINISTRATION` privilege. -Updates the Org assignments for a feature. Available to cluster admins only. Org-scoped admins cannot call this endpoint. - -=== Privileges required - -`ADMINISTRATION` in the cluster-admin (All-Org or default-Org) context. +A successful request returns `200 OK` and a `FeatureAssignmentResponse` object with `feature_id`, `feature_name`, and the updated `assigned_orgs` list. === Request parameters @@ -163,11 +204,12 @@ Updates the Org assignments for a feature. Available to cluster admins only. Org | Type of assignment update: `ADD` assigns the given Orgs in addition to existing assignments, `REMOVE` unassigns the given Orgs, or `REPLACE` sets the assignment to exactly the given Orgs. Defaults to `REPLACE`. |=== -=== Response - -Returns `200 OK` and a `FeatureAssignmentResponse` object with `feature_id`, `feature_name`, and the updated `assigned_orgs` list. +[CAUTION] +==== +If you omit `operation`, the API uses `REPLACE`. Any Orgs currently assigned to the feature that are not in `org_identifiers` are unassigned. To add Orgs without affecting existing assignments, set `operation` to `ADD`. +==== -=== Example: add Org assignments +=== Example request: add Org assignments [source,bash] ---- @@ -183,7 +225,7 @@ curl -X POST \ }' ---- -=== Example: remove all Org assignments +=== Example request: remove all Org assignments [source,bash] ---- @@ -199,12 +241,12 @@ curl -X POST \ }' ---- -=== Example response +==== API response [source,json] ---- { - "feature_id": "orion.embraceConfig.doIndexing", + "feature_id": "feature.search.columnIndexing", "feature_name": "index_columns", "assigned_orgs": [ { "org_id": 1, "org_name": "Acme" }, @@ -213,34 +255,17 @@ curl -X POST \ } ---- -=== Error responses - -[cols="1,3"] -|=== -| HTTP status code | Description - -| 400 | Invalid request parameters. -| 401 | Bearer token is missing, expired, or invalid. -| 403 | Insufficient privileges. Org-scoped admins cannot call this endpoint. -| 404 | Feature not found, or Feature Management is not enabled on this instance. -| 500 | Unexpected server error. -|=== - == Update feature value -`POST /api/rest/2.0/configurations/features/values/update` +The `POST /api/rest/2.0/configurations/features/values/update` API endpoint sets the value of a feature at the cluster or Org scope. Requires the `ADMINISTRATION` or `ORG_ADMINISTRATION` privilege. The `ORG_ADMINISTRATION` privilege applies only to Org admins. -Sets the value of a feature at the cluster or Org scope. +A successful request returns `200 OK` and a `FeatureValueResponse` object with `feature_id`, `feature_name`, and the updated `feature_value`. [WARNING] ==== Setting `reset_org_overrides` to `true` at `CLUSTER` scope removes all per-Org value overrides cluster-wide. All Orgs then inherit the new cluster-level value. This operation cannot be undone via the API. ==== -=== Privileges required - -`ADMINISTRATION`. - === Request parameters [cols="1,1,1,3"] @@ -265,7 +290,7 @@ Setting `reset_org_overrides` to `true` at `CLUSTER` scope removes all per-Org v | `feature_value` | string | Required -| New value to assign to the feature. +| New value to assign to the feature, as a string. For toggle features, use `"true"` or `"false"`. | `reset_org_overrides` | boolean @@ -273,11 +298,7 @@ Setting `reset_org_overrides` to `true` at `CLUSTER` scope removes all per-Org v | Applicable only when `scope` is `CLUSTER`. When `true`, removes all existing per-Org value overrides so that every Org inherits the new cluster-level value. Required when `scope` is `CLUSTER` for Org-aware features. Passing this parameter at `ORG` scope returns a `400` error. |=== -=== Response - -Returns `200 OK` and a `FeatureValueResponse` object with `feature_id`, `feature_name`, and the updated `feature_value`. - -=== Example: set an Org-level override +=== Example request: set an Org-level override [source,bash] ---- @@ -294,7 +315,7 @@ curl -X POST \ }' ---- -=== Example: set cluster value and reset all Org overrides +=== Example request: set cluster value and reset all Org overrides [source,bash] ---- @@ -311,32 +332,20 @@ curl -X POST \ }' ---- -=== Example response +==== API response [source,json] ---- { - "feature_id": "orion.embraceConfig.doIndexing", + "feature_id": "feature.search.columnIndexing", "feature_name": "index_columns", "feature_value": "true" } ---- -=== Error responses - -[cols="1,3"] -|=== -| HTTP status code | Description - -| 400 | Invalid request, or `reset_org_overrides` was passed with `scope: ORG`. -| 401 | Bearer token is missing, expired, or invalid. -| 403 | Insufficient privileges, or the Org is not assigned to this feature. -| 404 | Feature not found, or Feature Management is not enabled on this instance. -| 500 | Unexpected server error. -|=== - == Related resources * xref:rest-api-v2-reference.adoc[REST API v2 reference] -* xref:orgs-api.adoc[Orgs API] +* xref:org-manage-api.adoc[Org administration] * xref:privileges-and-roles.adoc[Privileges and roles] +* xref:roles.adoc[Role-based access control] diff --git a/modules/ROOT/pages/whats-new.adoc b/modules/ROOT/pages/whats-new.adoc index f0cedaaaa..74208aed4 100644 --- a/modules/ROOT/pages/whats-new.adoc +++ b/modules/ROOT/pages/whats-new.adoc @@ -62,7 +62,7 @@ Users can now pin Spotter conversations so they appear at the top of the convers [discrete] ==== Feature management through APIs -ThoughtSpot now supports programmatic feature management with new REST APIv2 endpoints available under `/api/rest/2.0/configurations/features/`. Cluster and Org admins can search feature configurations, assign features to Orgs, and set feature values without using the link:https://docs.thoughtspot.com/cloud/26.9.0.cl/admin-portal-2[new Admin portal]. For more information, see xref:feature-management-api.adoc[Feature Management]. +ThoughtSpot now supports programmatic feature management with new REST APIv2 endpoints available under `/api/rest/2.0/configurations/features/`. Cluster and Org admins can search feature configurations, assign features to Orgs, and set feature values without using the link:https://docs.thoughtspot.com/cloud/latest/admin-portal-2#_feature_management[new Admin portal, window=_blank]. For more information, see xref:feature-management-api.adoc[Feature Management]. --- From 4d49906538c40ee037a5a8f06e4e9060093201b0 Mon Sep 17 00:00:00 2001 From: Rani Gangwar Date: Wed, 23 Sep 2026 13:06:18 +0530 Subject: [PATCH 18/33] review edits --- .../ROOT/pages/feature-management-api.adoc | 50 +++++++++---------- 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/modules/ROOT/pages/feature-management-api.adoc b/modules/ROOT/pages/feature-management-api.adoc index 85bc65946..ac0b50e40 100644 --- a/modules/ROOT/pages/feature-management-api.adoc +++ b/modules/ROOT/pages/feature-management-api.adoc @@ -1,7 +1,6 @@ = Feature Management :toc: true :toclevels: 2 - :page-title: Feature Management API :page-pageid: feature-management :page-description: Search feature configurations, assign features to Orgs, and set feature values using the REST API @@ -10,7 +9,6 @@ The Feature Management API lets cluster and Org admins retrieve feature configur All endpoints are under `/api/rest/2.0/configurations/features/` and are available from ThoughtSpot Cloud 26.10.0.cl. - == Before you begin === Required privileges @@ -48,7 +46,7 @@ Features are grouped into availability categories: == Search features -The `POST /api/rest/2.0/configurations/features/search` API endpoint returns the feature configurations available on the ThoughtSpot instance. Requires the `ADMINISTRATION` or `ORG_ADMINISTRATION` privilege. The `ORG_ADMINISTRATION` privilege applies only to Org admins. +The `POST /api/rest/2.0/configurations/features/search` API endpoint returns the feature configurations available on the ThoughtSpot instance. Requires the `ADMINISTRATION` or `ORG_ADMINISTRATION` privilege. Org admins with the `ORG_ADMINISTRATION` privilege can call this endpoint only with `scope` set to `ORG`. A successful request returns `200 OK` and an array of feature groups. Each group contains a `feature_group` name and a `features` array. The fields returned for each feature depend on the `scope` of the request. For more information, see <<_feature_scope,Feature scope>>. @@ -61,12 +59,12 @@ A successful request returns `200 OK` and an array of feature groups. Each group | `scope` | string | Required -| `CLUSTER` returns the cluster-admin view, including `assigned_orgs` per feature. `ORG` returns the Org-admin view, including `element_value` per feature. +| `CLUSTER` returns the cluster-admin view, including `assigned_orgs` per feature, and requires the `ADMINISTRATION` privilege. `ORG` returns the Org-admin view, including `element_value` per feature. | `org_identifier` | integer | Conditional -| Numeric ID of the Org. Required when `scope` is `ORG`. Omitting it returns a `400` error. Ignored when `scope` is `CLUSTER`. +| Numeric ID of the Org to scope the search to. Required when `scope` is `ORG`; ignored when `scope` is `CLUSTER`. | `category` | string @@ -89,7 +87,7 @@ curl -X POST \ }' ---- -==== API response +=== API response: cluster view [source,json] ---- @@ -132,7 +130,7 @@ curl -X POST \ }' ---- -==== API response +=== API response: Org view [source,json] ---- @@ -178,7 +176,7 @@ curl -X POST \ == Update feature assignments -The `POST /api/rest/2.0/configurations/features/assignments/update` API endpoint updates the Org assignments for a feature. Available to cluster admins only. Org-scoped admins cannot call this endpoint. Requires the `ADMINISTRATION` privilege. +The `POST /api/rest/2.0/configurations/features/assignments/update` API endpoint updates the Org assignments for a feature. Available to cluster admins only. Org admins cannot call this endpoint. Requires the `ADMINISTRATION` privilege. A successful request returns `200 OK` and a `FeatureAssignmentResponse` object with `feature_id`, `feature_name`, and the updated `assigned_orgs` list. @@ -194,7 +192,7 @@ A successful request returns `200 OK` and a `FeatureAssignmentResponse` object w | Feature name (`feature_name`) or feature ID (`feature_id`) of the feature to update. | `org_identifiers` -| array +| array of integers | Required | Numeric IDs of the Orgs to assign. Send an empty array with `operation` set to `REPLACE` to remove all Org assignments for this feature. @@ -225,6 +223,20 @@ curl -X POST \ }' ---- +=== API response: add Org assignments + +[source,json] +---- +{ + "feature_id": "feature.search.columnIndexing", + "feature_name": "index_columns", + "assigned_orgs": [ + { "org_id": 1, "org_name": "Acme" }, + { "org_id": 2, "org_name": "Beta" } + ] +} +---- + === Example request: remove all Org assignments [source,bash] @@ -241,20 +253,6 @@ curl -X POST \ }' ---- -==== API response - -[source,json] ----- -{ - "feature_id": "feature.search.columnIndexing", - "feature_name": "index_columns", - "assigned_orgs": [ - { "org_id": 1, "org_name": "Acme" }, - { "org_id": 2, "org_name": "Beta" } - ] -} ----- - == Update feature value The `POST /api/rest/2.0/configurations/features/values/update` API endpoint sets the value of a feature at the cluster or Org scope. Requires the `ADMINISTRATION` or `ORG_ADMINISTRATION` privilege. The `ORG_ADMINISTRATION` privilege applies only to Org admins. @@ -263,7 +261,7 @@ A successful request returns `200 OK` and a `FeatureValueResponse` object with ` [WARNING] ==== -Setting `reset_org_overrides` to `true` at `CLUSTER` scope removes all per-Org value overrides cluster-wide. All Orgs then inherit the new cluster-level value. This operation cannot be undone via the API. +Setting `reset_org_overrides` to `true` at `CLUSTER` scope removes all per-Org value overrides for this feature. All Orgs then inherit the new cluster-level value. This operation cannot be undone through the API. ==== === Request parameters @@ -295,7 +293,7 @@ Setting `reset_org_overrides` to `true` at `CLUSTER` scope removes all per-Org v | `reset_org_overrides` | boolean | Conditional -| Applicable only when `scope` is `CLUSTER`. When `true`, removes all existing per-Org value overrides so that every Org inherits the new cluster-level value. Required when `scope` is `CLUSTER` for Org-aware features. Passing this parameter at `ORG` scope returns a `400` error. +| Applicable only when `scope` is `CLUSTER`. When `true`, any existing per-Org value overrides for this feature are also removed so that all Orgs inherit the new cluster-level value. When `false`, existing per-Org value overrides are retained. Required when `scope` is `CLUSTER` for an Org-aware feature. Must be omitted when `scope` is `ORG`; passing it at `ORG` scope returns a `400` error. |=== === Example request: set an Org-level override @@ -332,7 +330,7 @@ curl -X POST \ }' ---- -==== API response +=== API response: set cluster value and reset all Org overrides [source,json] ---- From 093f7a0aa2ef1f19f7adecc64e73aad423552147 Mon Sep 17 00:00:00 2001 From: Rani Gangwar Date: Wed, 23 Sep 2026 14:35:01 +0530 Subject: [PATCH 19/33] updates to lb filters --- modules/ROOT/pages/embed-pinboard.adoc | 40 ++++++++++++++++++++++++++ modules/ROOT/pages/whats-new.adoc | 3 +- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/modules/ROOT/pages/embed-pinboard.adoc b/modules/ROOT/pages/embed-pinboard.adoc index 3d1618160..e3ca487a6 100644 --- a/modules/ROOT/pages/embed-pinboard.adoc +++ b/modules/ROOT/pages/embed-pinboard.adoc @@ -384,6 +384,46 @@ limit are silently dropped without an error or warning. For more information, se xref:runtime-filters.adoc#_maximum_filter_count[Runtime filter limit]. ==== +[#scoped-liveboard-filtering] +==== Scoped Liveboard filtering +Starting with ThoughtSpot Cloud 26.10.0.cl and Visual Embed SDK 1.53.0, Liveboard filters and parameters can be scoped at three levels: + +* *Liveboard*: applies to all visualizations on the Liveboard. +* *Tab*: applies only to visualizations on a specific tab. +* *Group*: applies only to visualizations in a specific group on a tab. + +Liveboard-level and tab-level scoping are available by default. To enable group-level scoping in an embedded Liveboard, set `isScopedLiveboardFilteringEnabled` to `true`: + +[source,JavaScript] +---- +const liveboardEmbed = new LiveboardEmbed(document.getElementById('ts-embed'), { + //... other embed config properties + liveboardId: "d7a5a08e-a1f7-4850-aeb7-0764692855b8", + isScopedLiveboardFilteringEnabled: true, +}); +---- + +The `isScopedLiveboardFilteringEnabled` property is also available in `AppViewConfig` for full application embedding. + +To get the groups on a Liveboard, use `HostEvent.GetGroups`. To scope a filter or parameter update to a specific tab or group, pass the `applicability` attribute with `HostEvent.UpdateFilters` or `HostEvent.UpdateParameters`: + +[source,JavaScript] +---- +liveboardEmbed.trigger(HostEvent.UpdateFilters, { + filter: { + column: "Region", + oper: "IN", + values: ["West"], + applicability: { + level: "GROUP", + targetId: "{group-id}", + }, + }, +}); +---- + +For more information, see xref:events-hostEvents.adoc#liveboard-group-events[Liveboard group and parameter events] and xref:events-hostEvents.adoc#applicability-host-events[Scoped filter and parameter host events]. + ==== Updating filters Use the following host events in the Visual Embed SDK to update filters: diff --git a/modules/ROOT/pages/whats-new.adoc b/modules/ROOT/pages/whats-new.adoc index 74208aed4..dd6fd8bbe 100644 --- a/modules/ROOT/pages/whats-new.adoc +++ b/modules/ROOT/pages/whats-new.adoc @@ -1,7 +1,6 @@ = What's new :toc: true :toclevels: 1 - :page-title: What's new :page-pageid: whats-new :page-description: New features and enhancements @@ -69,7 +68,7 @@ ThoughtSpot now supports programmatic feature management with new REST APIv2 end [discrete] ==== Scoped Liveboard filtering -ThoughtSpot 26.10.0.cl introduces a three-tier filter hierarchy on Liveboards: Liveboard level, tab level, and group level. You can enable group-level filter scoping in embedded Liveboards using the `isScopedLiveboardFilteringEnabled` property. The `HostEvent.GetGroups` event returns group details for the Liveboard, and the `applicability` attribute on `HostEvent.UpdateFilters` and `HostEvent.UpdateParameters` scopes filter updates to a specific tab or group. For more information, see xref:embed-events.adoc[Events and app interactions] and xref:liveboard-embed.adoc[Embed a Liveboard]. +ThoughtSpot 26.10.0.cl introduces a three-tier filter hierarchy on Liveboards: Liveboard level, tab level, and group level. You can enable group-level filter scoping in embedded Liveboards using the `isScopedLiveboardFilteringEnabled` property. The `HostEvent.GetGroups` event returns group details for the Liveboard, and the `applicability` attribute on `HostEvent.UpdateFilters` and `HostEvent.UpdateParameters` scopes filter updates to a specific tab or group. For more information, see xref:embed-events.adoc[Events and app interactions] and xref:embed-pinboard.adoc[Embed a Liveboard]. --- From ad96d819e05e958cc5d2ab41bdde2d85afc95903 Mon Sep 17 00:00:00 2001 From: Rani Gangwar Date: Wed, 23 Sep 2026 16:34:34 +0530 Subject: [PATCH 20/33] updates to lb filters --- modules/ROOT/pages/embed-pinboard.adoc | 34 ++-- modules/ROOT/pages/event-embedEvents.adoc | 113 +++++++------- modules/ROOT/pages/events-hostEvents.adoc | 182 +++++++++++++--------- modules/ROOT/pages/filters_overview.adoc | 37 ++++- modules/ROOT/pages/whats-new.adoc | 12 +- 5 files changed, 234 insertions(+), 144 deletions(-) diff --git a/modules/ROOT/pages/embed-pinboard.adoc b/modules/ROOT/pages/embed-pinboard.adoc index e3ca487a6..c375c334a 100644 --- a/modules/ROOT/pages/embed-pinboard.adoc +++ b/modules/ROOT/pages/embed-pinboard.adoc @@ -384,15 +384,19 @@ limit are silently dropped without an error or warning. For more information, se xref:runtime-filters.adoc#_maximum_filter_count[Runtime filter limit]. ==== -[#scoped-liveboard-filtering] -==== Scoped Liveboard filtering -Starting with ThoughtSpot Cloud 26.10.0.cl and Visual Embed SDK 1.53.0, Liveboard filters and parameters can be scoped at three levels: +[#contextual-liveboard-filtering] +==== Contextual filtering in Liveboards [earlyAccess eaBackground]#Early Access# +Starting with ThoughtSpot Cloud 26.10.0.cl release, Liveboard filters and parameters can be scoped at three levels: * *Liveboard*: applies to all visualizations on the Liveboard. * *Tab*: applies only to visualizations on a specific tab. * *Group*: applies only to visualizations in a specific group on a tab. -Liveboard-level and tab-level scoping are available by default. To enable group-level scoping in an embedded Liveboard, set `isScopedLiveboardFilteringEnabled` to `true`: +[NOTE] +==== +Contextual filtering in Liveboards is an Early Access feature and is disabled by default on ThoughtSpot instances. To enable this feature on your instance, set `isScopedLiveboardFilteringEnabled` to `true`. +==== + [source,JavaScript] ---- @@ -407,21 +411,25 @@ The `isScopedLiveboardFilteringEnabled` property is also available in `AppViewCo To get the groups on a Liveboard, use `HostEvent.GetGroups`. To scope a filter or parameter update to a specific tab or group, pass the `applicability` attribute with `HostEvent.UpdateFilters` or `HostEvent.UpdateParameters`: -[source,JavaScript] +[source,javascript] ---- liveboardEmbed.trigger(HostEvent.UpdateFilters, { - filter: { - column: "Region", - oper: "IN", - values: ["West"], - applicability: { - level: "GROUP", - targetId: "{group-id}", + filters: [ + { + column: 'Region', + oper: 'IN', + values: ['West'], + applicability: { + level: 'GROUP', + targetId: '{group-id}', + }, }, - }, + ], }); ---- +To listen for filter and parameter changes, use `EmbedEvent.FilterChanged` and `EmbedEvent.ParameterChanged`. Starting with SDK 1.53.0, both events include an optional `applicability` field in their response payload that indicates the scope of the change. + For more information, see xref:events-hostEvents.adoc#liveboard-group-events[Liveboard group and parameter events] and xref:events-hostEvents.adoc#applicability-host-events[Scoped filter and parameter host events]. ==== Updating filters diff --git a/modules/ROOT/pages/event-embedEvents.adoc b/modules/ROOT/pages/event-embedEvents.adoc index ee04fa89a..d8162285c 100644 --- a/modules/ROOT/pages/event-embedEvents.adoc +++ b/modules/ROOT/pages/event-embedEvents.adoc @@ -290,79 +290,78 @@ image::./images/embed-event-playground.png[Try Embed event in Playground] == Event enumerations and examples For information about the supported event objects and examples, see xref:EmbedEvent.adoc[EmbedEvent]. -== Additional resources +[#pin-events] +=== Spotter conversation pin events -* See the xref:EmbedEvent.adoc[EmbedEvent] and xref:HostEvent.adoc[HostEvent] SDK documentation. -* For information about triggering events on React components, see xref:react-components_lesson-04.adoc[Event listeners for React components]. +The following `EmbedEvent` members are available from ThoughtSpot Cloud 26.10.0.cl and Visual Embed SDK 1.53.0. Both events require `spotterChatPinConfig.enabled: true` and `enablePastConversationsSidebar: true` in the embed configuration. +[cols="1,1,3"] +|=== +| Event | Cluster version | Description - [#pin-events] - === Spotter conversation pin events +| `EmbedEvent.SpotterConversationPinned` +| 26.10.0.cl +| Emitted when a user pins a Spotter conversation. Payload: `{ conversationId, pinnedAt }`. - The following `EmbedEvent` members are available from ThoughtSpot Cloud 26.10.0.cl and Visual Embed SDK 1.53.0. Both events require `spotterChatPinConfig.enabled: true` and `enablePastConversationsSidebar: true` in the embed configuration. +| `EmbedEvent.SpotterConversationUnpinned` +| 26.10.0.cl +| Emitted when a user unpins a Spotter conversation. Payload: `{ conversationId, unpinnedAt }`. +|=== - [cols="1,1,3"] - |=== - | Event | Cluster version | Description +.Listen for pin and unpin events +[source,javascript] +---- +const embed = new SpotterEmbed(container, { + spotterSidebarConfig: { + enablePastConversationsSidebar: true, + spotterChatPinConfig: { enabled: true }, + }, + // ... +}); - | `EmbedEvent.SpotterConversationPinned` - | 26.10.0.cl - | Emitted when a user pins a Spotter conversation. Payload: `{ conversationId, pinnedAt }`. +embed.on(EmbedEvent.SpotterConversationPinned, (event) => { + const { conversationId, pinnedAt } = event.data; + console.log(`Conversation ${conversationId} pinned at ${pinnedAt}`); +}); - | `EmbedEvent.SpotterConversationUnpinned` - | 26.10.0.cl - | Emitted when a user unpins a Spotter conversation. Payload: `{ conversationId, unpinnedAt }`. - |=== +embed.on(EmbedEvent.SpotterConversationUnpinned, (event) => { + const { conversationId, unpinnedAt } = event.data; + console.log(`Conversation ${conversationId} unpinned at ${unpinnedAt}`); +}); - .Listen for pin and unpin events - [source,javascript] - ---- - const embed = new SpotterEmbed(container, { - spotterSidebarConfig: { - enablePastConversationsSidebar: true, - spotterChatPinConfig: { enabled: true }, - }, - // ... - }); +embed.render(); +---- - embed.on(EmbedEvent.SpotterConversationPinned, (event) => { - const { conversationId, pinnedAt } = event.data; - console.log(`Conversation ${conversationId} pinned at ${pinnedAt}`); - }); +[#applicability-scope] +=== Scoped filter and parameter events - embed.on(EmbedEvent.SpotterConversationUnpinned, (event) => { - const { conversationId, unpinnedAt } = event.data; - console.log(`Conversation ${conversationId} unpinned at ${unpinnedAt}`); - }); +The following `EmbedEvent` members gained an optional `applicability` attribute in SDK 1.53.0. This attribute scopes a filter or parameter change notification to a specific Liveboard tab or group. - embed.render(); - ---- +[cols="1,3"] +|=== +| Event | Change in SDK 1.53.0 - [#applicability-scope] - === Scoped filter and parameter events +| `EmbedEvent.FilterChanged` +| Payload gains an optional `applicability` object describing the scope of the changed filter. - The following `EmbedEvent` members gained an optional `applicability` attribute in SDK 1.53.0. This attribute scopes a filter or parameter change notification to a specific Liveboard tab or group. +| `EmbedEvent.ParameterChanged` +| Payload gains an optional `applicability` object describing the scope of the changed parameter. +|=== - [cols="1,3"] - |=== - | Event | Change in SDK 1.53.0 +The `applicability` object has the following shape: - | `EmbedEvent.FilterChanged` - | Payload gains an optional `applicability` object describing the scope of the changed filter. +[source,json] +---- +{ + "level": "LIVEBOARD" | "TAB" | "GROUP", + "targetId": "{tab-or-group-id}" +} +---- - | `EmbedEvent.ParameterChanged` - | Payload gains an optional `applicability` object describing the scope of the changed parameter. - |=== +`targetId` is optional. Omit it when `level` is `LIVEBOARD`. - The `applicability` object has the following shape: - [source,json] - ---- - { - "level": "LIVEBOARD" | "TAB" | "GROUP", - "targetId": "{tab-or-group-id}" - } - ---- +== Additional resources - `targetId` is optional. Omit it when `level` is `LIVEBOARD`. - \ No newline at end of file +* See the xref:EmbedEvent.adoc[EmbedEvent] and xref:HostEvent.adoc[HostEvent] SDK documentation. +* For information about triggering events on React components, see xref:react-components_lesson-04.adoc[Event listeners for React components]. diff --git a/modules/ROOT/pages/events-hostEvents.adoc b/modules/ROOT/pages/events-hostEvents.adoc index d244c2cc5..b8b5ba106 100644 --- a/modules/ROOT/pages/events-hostEvents.adoc +++ b/modules/ROOT/pages/events-hostEvents.adoc @@ -184,6 +184,11 @@ Updates the filters applied on an embedded Liveboard. For more information and e ==== HostEvent.OpenFilter Opens the filter panel for the specified column. For more information and examples, see xref:HostEvent.adoc#_openfilter[HostEvent reference documentation]. +[NOTE] +==== +Starting with SDK 1.53.0, the `EmbedEvent.FilterChanged` and `EmbedEvent.ParameterChanged` events include an optional `applicability` field in their response payload. This field describes the scope (Liveboard, tab, or group) of the filter or parameter change that triggered the event. +==== + ==== HostEvent.UpdateRuntimeFilters xref:runtime-filters.adoc[Runtime filters] are applied at runtime, that is, when loading the embedded ThoughtSpot content. Runtime filters can also be updated after the load time using `HostEvent.UpdateRuntimeFilters`. You can add a UI option or button in your embedding app and assign `HostEvent.UpdateRuntimeFilters` to a button to trigger the event when that button is clicked. @@ -351,103 +356,138 @@ liveboardEmbed.trigger(HostEvent.OpenAddFilterModal); ---- When `AddFilter` is in `disabledActions`, `HostEvent.OpenAddFilterModal` is blocked. +[#spotter-pin-host-events] +=== Spotter conversation pin and unpin -== Related resources +The following `HostEvent` members are available from ThoughtSpot Cloud 26.10.0.cl and Visual Embed SDK 1.53.0. Both events require `enablePastConversationsSidebar: true` in the embed configuration. -* See xref:EmbedEvent.adoc[EmbedEvent] and xref:HostEvent.adoc[HostEvent] SDK documentation. -* For information about triggering events on React components, see xref:react-components_lesson-04.adoc[Event listeners for React components]. +[cols="1,1,3"] +|=== +| Event | Cluster version | Description +| `HostEvent.PinSpotterConversation` +| 26.10.0.cl +| Pins a saved Spotter conversation. Accepts `{ conversationId }`. - [#spotter-pin-host-events] - === Spotter conversation pin and unpin +| `HostEvent.UnpinSpotterConversation` +| 26.10.0.cl +| Unpins a previously pinned Spotter conversation. Accepts `{ conversationId }`. +|=== - The following `HostEvent` members are available from ThoughtSpot Cloud 26.10.0.cl and Visual Embed SDK 1.53.0. Both events require `enablePastConversationsSidebar: true` in the embed configuration. +.Programmatically pin a conversation +[source,javascript] +---- +embed.trigger(HostEvent.PinSpotterConversation, { + conversationId: '{conversation-id}', +}); +---- - [cols="1,1,3"] - |=== - | Event | Cluster version | Description +[#liveboard-group-events] +=== Liveboard group and parameter events - | `HostEvent.PinSpotterConversation` - | 26.10.0.cl - | Pins a saved Spotter conversation. Accepts `{ conversationId }`. +The following `HostEvent` members are new in SDK 1.53.0 and support the scoped Liveboard filtering feature introduced in ThoughtSpot Cloud 26.10.0.cl. - | `HostEvent.UnpinSpotterConversation` - | 26.10.0.cl - | Unpins a previously pinned Spotter conversation. Accepts `{ conversationId }`. - |=== +[cols="1,1,3"] +|=== +| Event | Cluster version | Description - .Programmatically pin a conversation - [source,javascript] - ---- - embed.trigger(HostEvent.PinSpotterConversation, { - conversationId: '{conversation-id}', - }); - ---- +| `HostEvent.GetGroups` +| 26.10.0.cl +| Returns filter and parameter group details for the current Liveboard. Response includes `orderedGroupIds`, `numberOfGroups`, and `Groups`. - [#liveboard-group-events] - === Liveboard group and parameter events +| `HostEvent.OpenParameter` +| 26.10.0.cl +| Opens the parameter panel for a specific parameter on the Liveboard. Accepts an optional `applicability` object to scope the action to a tab or group. +|=== - The following `HostEvent` members are new in SDK 1.53.0 and support the scoped Liveboard filtering feature introduced in ThoughtSpot Cloud 26.10.0.cl. +Use `HostEvent.GetGroups` to retrieve the group IDs needed before scoping a filter or parameter update. The response payload has the following shape: - [cols="1,1,3"] - |=== - | Event | Cluster version | Description +[source,json] +---- +{ + "orderedGroupIds": ["{group-id-1}", "{group-id-2}"], + "numberOfGroups": 2, + "Groups": { + "{group-id-1}": { "name": "Sales Overview" }, + "{group-id-2}": { "name": "Regional Breakdown" } + } +} +---- - | `HostEvent.GetGroups` - | 26.10.0.cl - | Returns filter and parameter group details for the current Liveboard. Response includes `orderedGroupIds`, `numberOfGroups`, and `Groups`. Mirrors `HostEvent.GetTabs`. +[#applicability-host-events] +=== Scoped filter and parameter host events - | `HostEvent.OpenParameter` - | 26.10.0.cl - | Opens the parameter panel for a specific parameter on the Liveboard. Accepts an optional `applicability` object to scope the action to a tab or group. Mirrors `HostEvent.OpenFilter`. - |=== +The following existing `HostEvent` members gained an optional `applicability` attribute in SDK 1.53.0. This attribute scopes a filter or parameter operation to a specific Liveboard tab or group. - [#applicability-host-events] - === Scoped filter and parameter host events +[cols="1,3"] +|=== +| Event | Change in SDK 1.53.0 - The following existing `HostEvent` members gained an optional `applicability` attribute in SDK 1.53.0. This attribute scopes a filter or parameter operation to a specific Liveboard tab or group. +| `HostEvent.OpenFilter` +| Accepts an optional `applicability` parameter to scope which filter panel opens. - [cols="1,3"] - |=== - | Event | Change in SDK 1.53.0 +| `HostEvent.GetFilters` +| Returned Liveboard filter objects now include an optional `applicability` field. - | `HostEvent.OpenFilter` - | Accepts an optional `applicability` parameter to scope which filter panel opens. +| `HostEvent.UpdateFilters` +| Accepts an optional `applicability` value per filter to scope the update to a tab or group. - | `HostEvent.GetFilters` - | Returned Liveboard filter objects now include an optional `applicability` field. +| `HostEvent.UpdateParameters` +| Accepts an optional `applicability` value per parameter to scope the update to a tab or group. - | `HostEvent.UpdateFilters` - | Accepts an optional `applicability` value per filter to scope the update to a tab or group. +| `HostEvent.GetParameters` +| Returned parameter objects now include an optional `applicability` field. +|=== - | `HostEvent.UpdateParameters` - | Accepts an optional `applicability` value per parameter to scope the update to a tab or group. +The `applicability` object has the following shape: - | `HostEvent.GetParameters` - | Returned parameter objects now include an optional `applicability` field. - |=== +[source,json] +---- +{ + "level": "LIVEBOARD" | "TAB" | "GROUP", + "targetId": "{tab-or-group-id}" +} +---- + +`targetId` is optional. Omit it when `level` is `LIVEBOARD`. + +The following example shows the typical workflow: retrieve group IDs using `HostEvent.GetGroups`, then pass a group ID in the `applicability` attribute of `HostEvent.UpdateFilters` to scope the filter update to that group only. - The `applicability` object has the following shape: +[source,javascript] +---- +// Step 1: retrieve group details for the Liveboard +const groupsResponse = await liveboardEmbed.trigger(HostEvent.GetGroups); +const targetGroupId = groupsResponse.orderedGroupIds[0]; - [source,json] - ---- +// Step 2: apply a filter scoped to that group +liveboardEmbed.trigger(HostEvent.UpdateFilters, { + filters: [ { - "level": "LIVEBOARD" | "TAB" | "GROUP", - "targetId": "{tab-or-group-id}" - } - ---- + column: 'Region', + oper: 'IN', + values: ['West'], + applicability: { + level: 'GROUP', + targetId: targetGroupId, + }, + }, + ], +}); +---- + +[#deprecated-host-events] +=== Deprecated HostEvents - `targetId` is optional. Omit it when `level` is `LIVEBOARD`. +[cols="1,1,3"] +|=== +| Event | Status | Details - [#deprecated-host-events] - === Deprecated HostEvents +| `HostEvent.UpdatePersonalizedView` +| [.version-badge.deprecated]#Deprecated# in SDK 1.53.0 +| Use `HostEvent.SelectPersonalizedView` instead. The replacement accepts an optional `viewName` to select a view by name, resets to the original view when the payload is empty, and reports an error when the named view is not found. +|=== - [cols="1,1,3"] - |=== - | Event | Status | Details +== Related resources - | `HostEvent.UpdatePersonalizedView` - | Deprecated in SDK 1.53.0 - | Use `HostEvent.SelectPersonalizedView` instead. The replacement accepts an optional `viewName` to select a view by name, resets to the original view when the payload is empty, and reports an error when the named view is not found. - |=== - \ No newline at end of file +* See xref:EmbedEvent.adoc[EmbedEvent] and xref:HostEvent.adoc[HostEvent] SDK documentation. +* For information about triggering events on React components, see xref:react-components_lesson-04.adoc[Event listeners for React components]. diff --git a/modules/ROOT/pages/filters_overview.adoc b/modules/ROOT/pages/filters_overview.adoc index fe4672d0d..69c0d421c 100644 --- a/modules/ROOT/pages/filters_overview.adoc +++ b/modules/ROOT/pages/filters_overview.adoc @@ -36,7 +36,7 @@ xref:runtime-filters.adoc#_maximum_filter_count[Runtime filter limit] for more i ==== 4. link:https://docs.thoughtspot.com/cloud/latest/liveboard-filters[Liveboard filters, window=_blank] + -Liveboard filters apply to all visualizations on the Liveboard and are visible as UI components at the top of a Liveboard page. When a filter is clicked, a modal with filter options appropriate for the data type is displayed. + +Liveboard filters are visible as UI components at the top of a Liveboard page. By default, a Liveboard filter applies to all visualizations on the Liveboard. Starting with ThoughtSpot Cloud 26.10.0.cl, a filter can also be scoped to a specific tab or group. For more information, see <>. When a filter is clicked, a modal with filter options appropriate for the data type is displayed. + Liveboard users can add or modify filters as needed. If you are embedding a Liveboard that includes preset filters, you can programmatically update, reset, or remove filters using `HostEvent.UpdateFilters`. 5. link:https://docs.thoughtspot.com/cloud/latest/liveboard-filters-cross[Liveboard cross filters, window=_blank] + @@ -222,6 +222,37 @@ liveboardEmbed.trigger(HostEvent.UpdateFilters, { }); ---- +[#scoped-filter-updates] +=== Scoped filter and parameter updates +Starting with ThoughtSpot Cloud 26.10.0.cl and Visual Embed SDK 1.53.0, Liveboard filters and parameters can be scoped at three levels: + +* *Liveboard*: applies to all visualizations on the Liveboard. +* *Tab*: applies only to visualizations on a specific tab. +* *Group*: applies only to visualizations in a specific group on a tab. + +To enable group-level scoping in an embedded Liveboard, set `isScopedLiveboardFilteringEnabled` to `true` in the embed configuration. For more information, see xref:embed-pinboard.adoc#scoped-liveboard-filtering[Scoped Liveboard filtering]. + +To scope an update to a tab or group, pass the `applicability` attribute with `HostEvent.UpdateFilters` or `HostEvent.UpdateParameters`. Set `level` to `TAB` or `GROUP`, and set `targetId` to the ID of the tab or group. To get the group IDs on a Liveboard, use `HostEvent.GetGroups`. + +[source,JavaScript] +---- +const groups = await liveboardEmbed.trigger(HostEvent.GetGroups); + +liveboardEmbed.trigger(HostEvent.UpdateFilters, { + filter: { + column: "Region", + oper: "IN", + values: ["West"], + applicability: { + level: "GROUP", + targetId: groups.orderedGroupIds[0], + }, + }, +}); +---- + +For more information, see xref:events-hostEvents.adoc#applicability-host-events[Scoped filter and parameter host events]. + === GetFilters and GetParameters events If you want to build your own filter UI within the embedding app, you can find out details of the Liveboard and runtime filters that are defined using `HostEvent.GetFilters`. @@ -238,6 +269,8 @@ Each filter object in the `HostEvent.GetFilters` response includes two additiona * `applicable_viz`: indicates whether the filter applies to `ALL` visualizations or only `SPECIFIC` ones (with a `viz_ids` array). * `linking`: indicates whether the filter is linked to other filters, and which columns it is linked to (`is_linked`, `linked_columns`). +Starting with Visual Embed SDK 1.53.0, the filter objects returned by `HostEvent.GetFilters` and the parameter objects returned by `HostEvent.GetParameters` also include an optional `applicability` field that indicates whether the filter or parameter is scoped to the Liveboard, a tab, or a group. + For more information, see xref:events-hostEvents.adoc#_hostevent_getfilters[HostEvent.GetFilters] and xref:HostEvent.adoc#_getfilters[HostEvent reference documentation]. @@ -261,6 +294,8 @@ You can also listen for the user's interactions with the filters using the link: There is an equivalent EmbedEvent for Parameters called link:https://developers.thoughtspot.com/docs/Enumeration_EmbedEvent#_parameterchanged[EmbedEvent.ParameterChanged]. +Starting with Visual Embed SDK 1.53.0, the `EmbedEvent.FilterChanged` and `EmbedEvent.ParameterChanged` payloads include an optional `applicability` object that describes the scope of the changed filter or parameter. For more information, see xref:event-embedEvents.adoc#applicability-scope[Scoped filter and parameter events]. + === UpdateCrossFilter event You can programmatically trigger an action to update a cross filter using link:https://developers.thoughtspot.com/docs/Enumeration_HostEvent#_updatecrossfilter[HostEvent.UpdateCrossFilter]: diff --git a/modules/ROOT/pages/whats-new.adoc b/modules/ROOT/pages/whats-new.adoc index dd6fd8bbe..6d6ef2751 100644 --- a/modules/ROOT/pages/whats-new.adoc +++ b/modules/ROOT/pages/whats-new.adoc @@ -66,9 +66,17 @@ ThoughtSpot now supports programmatic feature management with new REST APIv2 end --- [discrete] -==== Scoped Liveboard filtering +==== Liveboard enhancements +*Contextual filtering in Liveboards* + +ThoughtSpot 26.10.0.cl release introduces a three-tier filter hierarchy on Liveboards: Liveboard level, tab level, and group level. You can enable this feature in embedded Liveboards using the `isScopedLiveboardFilteringEnabled` property. For more information, see xref:embed-pinboard.adoc[Embed a Liveboard]. + +*Host Events* + +The `HostEvent.GetGroups` event returns group details for the Liveboard, and the `applicability` attribute on `HostEvent.UpdateFilters` and `HostEvent.UpdateParameters` scopes filter updates to a specific tab or group. For more information, see xref:embed-events.adoc[Events and app interactions]. + +*Centralized filter modal* in Liveboards is now generally available. -ThoughtSpot 26.10.0.cl introduces a three-tier filter hierarchy on Liveboards: Liveboard level, tab level, and group level. You can enable group-level filter scoping in embedded Liveboards using the `isScopedLiveboardFilteringEnabled` property. The `HostEvent.GetGroups` event returns group details for the Liveboard, and the `applicability` attribute on `HostEvent.UpdateFilters` and `HostEvent.UpdateParameters` scopes filter updates to a specific tab or group. For more information, see xref:embed-events.adoc[Events and app interactions] and xref:embed-pinboard.adoc[Embed a Liveboard]. --- From d8dcb61557c36f2bdd0c16188b575214db06b23c Mon Sep 17 00:00:00 2001 From: Rani Gangwar Date: Wed, 23 Sep 2026 21:49:22 +0530 Subject: [PATCH 21/33] csr updates --- modules/ROOT/pages/api-changelog.adoc | 2 +- modules/ROOT/pages/data-security.adoc | 11 +++++++++++ modules/ROOT/pages/embed-pinboard.adoc | 19 +++++++++++++++++++ modules/ROOT/pages/whats-new.adoc | 8 ++++++-- 4 files changed, 37 insertions(+), 3 deletions(-) diff --git a/modules/ROOT/pages/api-changelog.adoc b/modules/ROOT/pages/api-changelog.adoc index 8461327d3..c18283a48 100644 --- a/modules/ROOT/pages/api-changelog.adoc +++ b/modules/ROOT/pages/api-changelog.adoc @@ -28,7 +28,7 @@ Pins the embed to the Analyst with this GUID. Available from cluster version 26. Enables pinning and unpinning of conversations in the sidebar. Contains `enabled` (boolean, default `false`), `pinLabel` (string), and `unpinLabel` (string). Available from cluster version 26.10.0.cl. `isScopedLiveboardFilteringEnabled` (on `LiveboardViewConfig` and `AppViewConfig`):: -Enables group-level filter and parameter scoping on Liveboards, in addition to existing Liveboard-level and tab-level scoping. Available from cluster version 26.10.0.cl. +Enables group-level and tab-level filters and parameter scoping on Liveboards, in addition to existing Liveboard level filters. `starterPrompts` (on `SpotterChatViewConfig`):: Configures which starter prompt pills are shown above the Spotter chat input. Contains keys: `enable`, `quick`, `research`, `previewData`, and `liveboard`. Available from cluster version 26.10.0.cl. diff --git a/modules/ROOT/pages/data-security.adoc b/modules/ROOT/pages/data-security.adoc index ae6adf312..427cd73f4 100644 --- a/modules/ROOT/pages/data-security.adoc +++ b/modules/ROOT/pages/data-security.adoc @@ -26,3 +26,14 @@ The OAuth workflow requires opening a new window or redirecting to the OAuth pro CLS restricts user access to specific columns of a table. When CLS is applied, users see only the columns that they are allowed to view. Object owners can configure CLS by sharing a relevant set of columns in a table with a specific user or user group. For more information on CLS, see link:https://docs.thoughtspot.com/cloud/latest/share-source-tables[Sharing tables and columns, window=_blank]. + +[#csr-liveboards] +=== #Column security rules on Liveboards# +#Starting with ThoughtSpot Cloud 26.10.0.cl, Liveboards that include columns restricted by Column Security Rules (CSR) open and work normally for users who cannot access those columns, including in embedded Liveboards. Previously, such Liveboards were blocked for these users. Column security remains fully enforced:# + +* #Filter values from columns that the user cannot access are masked instead of blocking the Liveboard.# +* #Scheduled Liveboard deliveries apply CSR separately for each recipient.# + +#To control whether masked filter chips are visible in an embedded Liveboard, use the `showMaskedFilterChip` property. For more information, see xref:embed-pinboard.adoc#masked-filter-chips[Masked filter chips].# + +#For more information, see link:https://docs.thoughtspot.com/cloud/latest/security-data-object#csr-liveboard[Column security rules on Liveboards, window=_blank].# diff --git a/modules/ROOT/pages/embed-pinboard.adoc b/modules/ROOT/pages/embed-pinboard.adoc index c375c334a..88ac63f87 100644 --- a/modules/ROOT/pages/embed-pinboard.adoc +++ b/modules/ROOT/pages/embed-pinboard.adoc @@ -264,6 +264,23 @@ When `hideIrrelevantChipsInLiveboardTabs` is `true`: * A *Show irrelevant filters* toggle button appears in the filter row when at least one chip is hidden, allowing users to temporarily reveal all chips. * When the user clicks *Show irrelevant filters*, a complementary *Hide irrelevant filters* button appears to restore the filtered view. +[#masked-filter-chips] +==== #Masked filter chips# +#If a Liveboard includes filters on columns that a user cannot access because of column-level security, the filter values are masked for that user. Use the `showMaskedFilterChip` property to control whether these masked filter chips are visible:# + +* #`true`: the filter chips for inaccessible columns are displayed as masked.# +* #`false`: the filter chips for inaccessible columns are hidden.# + +[source,JavaScript] +---- +const liveboardEmbed = new LiveboardEmbed(document.getElementById('ts-embed'), { + //... other embed config properties + showMaskedFilterChip: true, +}); +---- + +#The `showMaskedFilterChip` property is also available in full application embedding. For more information, see xref:data-security.adoc#csr-liveboards[Column security rules on Liveboards].# + [#noteTiles] === Add Note tiles You can add a link:https://docs.thoughtspot.com/cloud/latest/liveboard-notes[Liveboard Note tile, window=_blank] with custom text, images, and links on an embedded Liveboard. @@ -392,6 +409,8 @@ Starting with ThoughtSpot Cloud 26.10.0.cl release, Liveboard filters and parame * *Tab*: applies only to visualizations on a specific tab. * *Group*: applies only to visualizations in a specific group on a tab. +With contextual filtering, you can add the same filter at more than one of these levels on a Liveboard. For example, a Liveboard can have a `Region` filter at the Liveboard level and another independent `Region` filter on a specific tab or group. + [NOTE] ==== Contextual filtering in Liveboards is an Early Access feature and is disabled by default on ThoughtSpot instances. To enable this feature on your instance, set `isScopedLiveboardFilteringEnabled` to `true`. diff --git a/modules/ROOT/pages/whats-new.adoc b/modules/ROOT/pages/whats-new.adoc index 6d6ef2751..3bdf986e1 100644 --- a/modules/ROOT/pages/whats-new.adoc +++ b/modules/ROOT/pages/whats-new.adoc @@ -67,9 +67,9 @@ ThoughtSpot now supports programmatic feature management with new REST APIv2 end [discrete] ==== Liveboard enhancements -*Contextual filtering in Liveboards* +*Contextual filtering in Liveboards* [earlyAccess eaBackground]#Early Access# -ThoughtSpot 26.10.0.cl release introduces a three-tier filter hierarchy on Liveboards: Liveboard level, tab level, and group level. You can enable this feature in embedded Liveboards using the `isScopedLiveboardFilteringEnabled` property. For more information, see xref:embed-pinboard.adoc[Embed a Liveboard]. +Liveboard filters now have a three-tier filter hierarchy : Liveboard level, tab level, and group level. You can enable this feature in embedded Liveboards using the `isScopedLiveboardFilteringEnabled` parameter in the SDK. For more information, see xref:embed-pinboard.adoc[Embed a Liveboard]. *Host Events* @@ -77,6 +77,10 @@ The `HostEvent.GetGroups` event returns group details for the Liveboard, and the *Centralized filter modal* in Liveboards is now generally available. +#*Column security rules on Liveboards*# + +#Liveboards that were previously blocked by Column Security Rules (CSR) now open and work normally, with column security fully enforced, including in embedded Liveboards. Filter values from inaccessible columns are masked instead of blocking the Liveboard, and scheduled Liveboard deliveries apply CSR separately for each recipient. For more information, see xref:data-security.adoc#csr-liveboards[Column security rules on Liveboards].# + --- From 2608b784695e8d07e9af1fab33d307a7691a07c7 Mon Sep 17 00:00:00 2001 From: Rani Gangwar Date: Wed, 23 Sep 2026 22:29:45 +0530 Subject: [PATCH 22/33] lb csr --- modules/ROOT/pages/data-security.adoc | 2 +- modules/ROOT/pages/embed-pinboard.adoc | 2 +- modules/ROOT/pages/events-hostEvents.adoc | 18 +++--------------- modules/ROOT/pages/whats-new.adoc | 14 +++++++------- 4 files changed, 12 insertions(+), 24 deletions(-) diff --git a/modules/ROOT/pages/data-security.adoc b/modules/ROOT/pages/data-security.adoc index 427cd73f4..b10d14e9f 100644 --- a/modules/ROOT/pages/data-security.adoc +++ b/modules/ROOT/pages/data-security.adoc @@ -34,6 +34,6 @@ For more information on CLS, see link:https://docs.thoughtspot.com/cloud/latest/ * #Filter values from columns that the user cannot access are masked instead of blocking the Liveboard.# * #Scheduled Liveboard deliveries apply CSR separately for each recipient.# -#To control whether masked filter chips are visible in an embedded Liveboard, use the `showMaskedFilterChip` property. For more information, see xref:embed-pinboard.adoc#masked-filter-chips[Masked filter chips].# +#To control whether masked filter chips are visible in an embedded Liveboard, use the `showMaskedFilterChip` SDK property. For more information, see xref:embed-pinboard.adoc#masked-filter-chips[Masked filter chips].# #For more information, see link:https://docs.thoughtspot.com/cloud/latest/security-data-object#csr-liveboard[Column security rules on Liveboards, window=_blank].# diff --git a/modules/ROOT/pages/embed-pinboard.adoc b/modules/ROOT/pages/embed-pinboard.adoc index 88ac63f87..860f70f88 100644 --- a/modules/ROOT/pages/embed-pinboard.adoc +++ b/modules/ROOT/pages/embed-pinboard.adoc @@ -402,7 +402,7 @@ xref:runtime-filters.adoc#_maximum_filter_count[Runtime filter limit]. ==== [#contextual-liveboard-filtering] -==== Contextual filtering in Liveboards [earlyAccess eaBackground]#Early Access# +==== #Contextual filtering in Liveboards# [earlyAccess eaBackground]#Early Access# Starting with ThoughtSpot Cloud 26.10.0.cl release, Liveboard filters and parameters can be scoped at three levels: * *Liveboard*: applies to all visualizations on the Liveboard. diff --git a/modules/ROOT/pages/events-hostEvents.adoc b/modules/ROOT/pages/events-hostEvents.adoc index b8b5ba106..34c484ace 100644 --- a/modules/ROOT/pages/events-hostEvents.adoc +++ b/modules/ROOT/pages/events-hostEvents.adoc @@ -383,7 +383,7 @@ embed.trigger(HostEvent.PinSpotterConversation, { ---- [#liveboard-group-events] -=== Liveboard group and parameter events +=== #Liveboard group and parameter events# The following `HostEvent` members are new in SDK 1.53.0 and support the scoped Liveboard filtering feature introduced in ThoughtSpot Cloud 26.10.0.cl. @@ -415,9 +415,9 @@ Use `HostEvent.GetGroups` to retrieve the group IDs needed before scoping a filt ---- [#applicability-host-events] -=== Scoped filter and parameter host events +=== #Scoped filter and parameter host events# -The following existing `HostEvent` members gained an optional `applicability` attribute in SDK 1.53.0. This attribute scopes a filter or parameter operation to a specific Liveboard tab or group. +The following existing `HostEvent` members gained an optional `applicability` attribute in Visual Embed SDK 1.53.0. This attribute scopes a filter or parameter operation to a specific Liveboard tab or group. [cols="1,3"] |=== @@ -475,18 +475,6 @@ liveboardEmbed.trigger(HostEvent.UpdateFilters, { }); ---- -[#deprecated-host-events] -=== Deprecated HostEvents - -[cols="1,1,3"] -|=== -| Event | Status | Details - -| `HostEvent.UpdatePersonalizedView` -| [.version-badge.deprecated]#Deprecated# in SDK 1.53.0 -| Use `HostEvent.SelectPersonalizedView` instead. The replacement accepts an optional `viewName` to select a view by name, resets to the original view when the payload is empty, and reports an error when the named view is not found. -|=== - == Related resources * See xref:EmbedEvent.adoc[EmbedEvent] and xref:HostEvent.adoc[HostEvent] SDK documentation. diff --git a/modules/ROOT/pages/whats-new.adoc b/modules/ROOT/pages/whats-new.adoc index 3bdf986e1..b7bdfc3a8 100644 --- a/modules/ROOT/pages/whats-new.adoc +++ b/modules/ROOT/pages/whats-new.adoc @@ -67,18 +67,18 @@ ThoughtSpot now supports programmatic feature management with new REST APIv2 end [discrete] ==== Liveboard enhancements -*Contextual filtering in Liveboards* [earlyAccess eaBackground]#Early Access# - +* *Contextual filtering in Liveboards* [earlyAccess eaBackground]#Early Access# ++ Liveboard filters now have a three-tier filter hierarchy : Liveboard level, tab level, and group level. You can enable this feature in embedded Liveboards using the `isScopedLiveboardFilteringEnabled` parameter in the SDK. For more information, see xref:embed-pinboard.adoc[Embed a Liveboard]. -*Host Events* - +* *Host Events* ++ The `HostEvent.GetGroups` event returns group details for the Liveboard, and the `applicability` attribute on `HostEvent.UpdateFilters` and `HostEvent.UpdateParameters` scopes filter updates to a specific tab or group. For more information, see xref:embed-events.adoc[Events and app interactions]. -*Centralized filter modal* in Liveboards is now generally available. - -#*Column security rules on Liveboards*# +* *Centralized filter modal* in Liveboards is now generally available. +* #*Column security rules on Liveboards*# ++ #Liveboards that were previously blocked by Column Security Rules (CSR) now open and work normally, with column security fully enforced, including in embedded Liveboards. Filter values from inaccessible columns are masked instead of blocking the Liveboard, and scheduled Liveboard deliveries apply CSR separately for each recipient. For more information, see xref:data-security.adoc#csr-liveboards[Column security rules on Liveboards].# From 8340e460c0a6e216774f4b820ddebaebf65306fd Mon Sep 17 00:00:00 2001 From: Rani Gangwar Date: Wed, 23 Sep 2026 23:06:01 +0530 Subject: [PATCH 23/33] lb csr --- modules/ROOT/pages/events-hostEvents.adoc | 6 ++---- modules/ROOT/pages/filters_overview.adoc | 22 +++++++++++----------- modules/ROOT/pages/whats-new.adoc | 7 ++++--- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/modules/ROOT/pages/events-hostEvents.adoc b/modules/ROOT/pages/events-hostEvents.adoc index 34c484ace..20272105c 100644 --- a/modules/ROOT/pages/events-hostEvents.adoc +++ b/modules/ROOT/pages/events-hostEvents.adoc @@ -387,16 +387,14 @@ embed.trigger(HostEvent.PinSpotterConversation, { The following `HostEvent` members are new in SDK 1.53.0 and support the scoped Liveboard filtering feature introduced in ThoughtSpot Cloud 26.10.0.cl. -[cols="1,1,3"] +[cols="1,3"] |=== -| Event | Cluster version | Description +| Event | Description | `HostEvent.GetGroups` -| 26.10.0.cl | Returns filter and parameter group details for the current Liveboard. Response includes `orderedGroupIds`, `numberOfGroups`, and `Groups`. | `HostEvent.OpenParameter` -| 26.10.0.cl | Opens the parameter panel for a specific parameter on the Liveboard. Accepts an optional `applicability` object to scope the action to a tab or group. |=== diff --git a/modules/ROOT/pages/filters_overview.adoc b/modules/ROOT/pages/filters_overview.adoc index 69c0d421c..f618a328f 100644 --- a/modules/ROOT/pages/filters_overview.adoc +++ b/modules/ROOT/pages/filters_overview.adoc @@ -36,7 +36,7 @@ xref:runtime-filters.adoc#_maximum_filter_count[Runtime filter limit] for more i ==== 4. link:https://docs.thoughtspot.com/cloud/latest/liveboard-filters[Liveboard filters, window=_blank] + -Liveboard filters are visible as UI components at the top of a Liveboard page. By default, a Liveboard filter applies to all visualizations on the Liveboard. Starting with ThoughtSpot Cloud 26.10.0.cl, a filter can also be scoped to a specific tab or group. For more information, see <>. When a filter is clicked, a modal with filter options appropriate for the data type is displayed. + +Liveboard filters are visible as UI components at the top of a Liveboard page. #By default, a Liveboard filter applies to all visualizations on the Liveboard. Starting with ThoughtSpot Cloud 26.10.0.cl, a filter can also be scoped to a specific tab or group. For more information, see <>.# When a filter is clicked, a modal with filter options appropriate for the data type is displayed. + Liveboard users can add or modify filters as needed. If you are embedding a Liveboard that includes preset filters, you can programmatically update, reset, or remove filters using `HostEvent.UpdateFilters`. 5. link:https://docs.thoughtspot.com/cloud/latest/liveboard-filters-cross[Liveboard cross filters, window=_blank] + @@ -223,16 +223,16 @@ liveboardEmbed.trigger(HostEvent.UpdateFilters, { ---- [#scoped-filter-updates] -=== Scoped filter and parameter updates -Starting with ThoughtSpot Cloud 26.10.0.cl and Visual Embed SDK 1.53.0, Liveboard filters and parameters can be scoped at three levels: +=== #Scoped filter and parameter updates# +#Starting with ThoughtSpot Cloud 26.10.0.cl release, Liveboard filters and parameters can be scoped at three levels:# -* *Liveboard*: applies to all visualizations on the Liveboard. -* *Tab*: applies only to visualizations on a specific tab. -* *Group*: applies only to visualizations in a specific group on a tab. +* #*Liveboard*: applies to all visualizations on the Liveboard.# +* #*Tab*: applies only to visualizations on a specific tab.# +* #*Group*: applies only to visualizations in a specific group on a tab.# -To enable group-level scoping in an embedded Liveboard, set `isScopedLiveboardFilteringEnabled` to `true` in the embed configuration. For more information, see xref:embed-pinboard.adoc#scoped-liveboard-filtering[Scoped Liveboard filtering]. +#To enable group-level scoping in an embedded Liveboard, set `isScopedLiveboardFilteringEnabled` to `true` in the embed configuration. For more information, see xref:embed-pinboard.adoc#scoped-liveboard-filtering[Scoped Liveboard filtering].# -To scope an update to a tab or group, pass the `applicability` attribute with `HostEvent.UpdateFilters` or `HostEvent.UpdateParameters`. Set `level` to `TAB` or `GROUP`, and set `targetId` to the ID of the tab or group. To get the group IDs on a Liveboard, use `HostEvent.GetGroups`. +#To scope an update to a tab or group, pass the `applicability` attribute with `HostEvent.UpdateFilters` or `HostEvent.UpdateParameters`. Set `level` to `TAB` or `GROUP`, and set `targetId` to the ID of the tab or group. To get the group IDs on a Liveboard, use `HostEvent.GetGroups`.# [source,JavaScript] ---- @@ -251,7 +251,7 @@ liveboardEmbed.trigger(HostEvent.UpdateFilters, { }); ---- -For more information, see xref:events-hostEvents.adoc#applicability-host-events[Scoped filter and parameter host events]. +#For more information, see xref:events-hostEvents.adoc#applicability-host-events[Scoped filter and parameter host events].# === GetFilters and GetParameters events If you want to build your own filter UI within the embedding app, you can find out details of the Liveboard and runtime filters that are defined using `HostEvent.GetFilters`. @@ -269,7 +269,7 @@ Each filter object in the `HostEvent.GetFilters` response includes two additiona * `applicable_viz`: indicates whether the filter applies to `ALL` visualizations or only `SPECIFIC` ones (with a `viz_ids` array). * `linking`: indicates whether the filter is linked to other filters, and which columns it is linked to (`is_linked`, `linked_columns`). -Starting with Visual Embed SDK 1.53.0, the filter objects returned by `HostEvent.GetFilters` and the parameter objects returned by `HostEvent.GetParameters` also include an optional `applicability` field that indicates whether the filter or parameter is scoped to the Liveboard, a tab, or a group. +#Starting with Visual Embed SDK 1.53.0, the filter objects returned by `HostEvent.GetFilters` and the parameter objects returned by `HostEvent.GetParameters` also include an optional `applicability` field that indicates whether the filter or parameter is scoped to the Liveboard, a tab, or a group.# For more information, see xref:events-hostEvents.adoc#_hostevent_getfilters[HostEvent.GetFilters] and xref:HostEvent.adoc#_getfilters[HostEvent reference documentation]. @@ -294,7 +294,7 @@ You can also listen for the user's interactions with the filters using the link: There is an equivalent EmbedEvent for Parameters called link:https://developers.thoughtspot.com/docs/Enumeration_EmbedEvent#_parameterchanged[EmbedEvent.ParameterChanged]. -Starting with Visual Embed SDK 1.53.0, the `EmbedEvent.FilterChanged` and `EmbedEvent.ParameterChanged` payloads include an optional `applicability` object that describes the scope of the changed filter or parameter. For more information, see xref:event-embedEvents.adoc#applicability-scope[Scoped filter and parameter events]. +#Starting with Visual Embed SDK 1.53.0, the `EmbedEvent.FilterChanged` and `EmbedEvent.ParameterChanged` payloads include an optional `applicability` object that describes the scope of the changed filter or parameter. For more information, see xref:event-embedEvents.adoc#applicability-scope[Scoped filter and parameter events].# === UpdateCrossFilter event You can programmatically trigger an action to update a cross filter using link:https://developers.thoughtspot.com/docs/Enumeration_HostEvent#_updatecrossfilter[HostEvent.UpdateCrossFilter]: diff --git a/modules/ROOT/pages/whats-new.adoc b/modules/ROOT/pages/whats-new.adoc index b7bdfc3a8..2316bcfa2 100644 --- a/modules/ROOT/pages/whats-new.adoc +++ b/modules/ROOT/pages/whats-new.adoc @@ -73,13 +73,14 @@ Liveboard filters now have a three-tier filter hierarchy : Liveboard level, tab * *Host Events* + -The `HostEvent.GetGroups` event returns group details for the Liveboard, and the `applicability` attribute on `HostEvent.UpdateFilters` and `HostEvent.UpdateParameters` scopes filter updates to a specific tab or group. For more information, see xref:embed-events.adoc[Events and app interactions]. +** The `HostEvent.GetGroups` event returns group details for the Liveboard, and the `applicability` attribute on `HostEvent.UpdateFilters` and `HostEvent.UpdateParameters` scopes filter updates to a specific tab or group. For more information, see xref:embed-events.adoc[Events and app interactions]. +** The `HostEvent.OpenParameter` event opens the parameter panel for a specific parameter on the Liveboard. Accepts an optional `applicability` object to scope the action to a tab or group. * *Centralized filter modal* in Liveboards is now generally available. -* #*Column security rules on Liveboards*# +* *Column security rules on Liveboards* + -#Liveboards that were previously blocked by Column Security Rules (CSR) now open and work normally, with column security fully enforced, including in embedded Liveboards. Filter values from inaccessible columns are masked instead of blocking the Liveboard, and scheduled Liveboard deliveries apply CSR separately for each recipient. For more information, see xref:data-security.adoc#csr-liveboards[Column security rules on Liveboards].# +Liveboards that were previously blocked by Column Security Rules (CSR) now open and work normally, with column security fully enforced, including in embedded Liveboards. Filter values from inaccessible columns are masked instead of blocking the Liveboard, and scheduled Liveboard deliveries apply CSR separately for each recipient. For more information, see xref:data-security.adoc#csr-liveboards[Column security rules on Liveboards]. --- From 0374673f9807d970d0b85e0e60e839e459f5ca9c Mon Sep 17 00:00:00 2001 From: Rani Gangwar Date: Thu, 24 Sep 2026 10:18:38 +0530 Subject: [PATCH 24/33] edited whats new --- modules/ROOT/pages/whats-new.adoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/ROOT/pages/whats-new.adoc b/modules/ROOT/pages/whats-new.adoc index 2316bcfa2..1fb18e386 100644 --- a/modules/ROOT/pages/whats-new.adoc +++ b/modules/ROOT/pages/whats-new.adoc @@ -69,14 +69,14 @@ ThoughtSpot now supports programmatic feature management with new REST APIv2 end ==== Liveboard enhancements * *Contextual filtering in Liveboards* [earlyAccess eaBackground]#Early Access# + -Liveboard filters now have a three-tier filter hierarchy : Liveboard level, tab level, and group level. You can enable this feature in embedded Liveboards using the `isScopedLiveboardFilteringEnabled` parameter in the SDK. For more information, see xref:embed-pinboard.adoc[Embed a Liveboard]. +Liveboard filters now have a three-tier filter hierarchy : Liveboard level, tab level, and group level. You can enable this feature in embedded Liveboards using the `isScopedLiveboardFilteringEnabled` parameter in the SDK. For more information, see xref:embed-pinboard.adoc#contextual-liveboard-filtering[Embed a Liveboard]. * *Host Events* + ** The `HostEvent.GetGroups` event returns group details for the Liveboard, and the `applicability` attribute on `HostEvent.UpdateFilters` and `HostEvent.UpdateParameters` scopes filter updates to a specific tab or group. For more information, see xref:embed-events.adoc[Events and app interactions]. ** The `HostEvent.OpenParameter` event opens the parameter panel for a specific parameter on the Liveboard. Accepts an optional `applicability` object to scope the action to a tab or group. -* *Centralized filter modal* in Liveboards is now generally available. +* *Centralized filter modal* in Liveboards is now generally available and enabled by default on ThoughtSpot embedded instances. * *Column security rules on Liveboards* + From 1840a080baa32bbc4fbc4ba653e4c695d2ab892d Mon Sep 17 00:00:00 2001 From: Rani Gangwar Date: Mon, 28 Sep 2026 10:47:34 +0530 Subject: [PATCH 25/33] typos --- .../ROOT/pages/feature-management-api.adoc | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/modules/ROOT/pages/feature-management-api.adoc b/modules/ROOT/pages/feature-management-api.adoc index ac0b50e40..774e656e0 100644 --- a/modules/ROOT/pages/feature-management-api.adoc +++ b/modules/ROOT/pages/feature-management-api.adoc @@ -5,7 +5,7 @@ :page-pageid: feature-management :page-description: Search feature configurations, assign features to Orgs, and set feature values using the REST API -The Feature Management API lets cluster and Org admins retrieve feature configurations, assign features to Orgs, and set feature values programmatically. These endpoints replicate the feature management capabilities available in the link:https://docs.thoughtspot.com/cloud/latest/admin-portal-2#_feature_management[new Admin portal UI, window=_blank]. +The Feature Management API lets Cluster and Org admins retrieve feature configurations, assign features to Orgs, and set feature values programmatically. These endpoints replicate the feature management capabilities available in the link:https://docs.thoughtspot.com/cloud/latest/admin-portal-2#_feature_management[new Admin portal UI, window=_blank]. All endpoints are under `/api/rest/2.0/configurations/features/` and are available from ThoughtSpot Cloud 26.10.0.cl. @@ -25,7 +25,7 @@ If xref:roles.adoc[Role-Based Access Control (RBAC)] is enabled on your instance Feature configurations exist at two levels: -Cluster scope:: The cluster-level default, visible to cluster admins. Returns `assigned_orgs` and `is_org_aware` for each feature. +Cluster scope:: The Cluster-level default, visible to Cluster admins. Returns `assigned_orgs` and `is_org_aware` for each feature. Org scope:: A per-Org value override, visible to Org admins. Returns `element_type`, `element_config`, and `element_value` for each feature. === Feature identifiers @@ -59,7 +59,7 @@ A successful request returns `200 OK` and an array of feature groups. Each group | `scope` | string | Required -| `CLUSTER` returns the cluster-admin view, including `assigned_orgs` per feature, and requires the `ADMINISTRATION` privilege. `ORG` returns the Org-admin view, including `element_value` per feature. +| `CLUSTER` returns the Cluster-admin view, including `assigned_orgs` per feature, and requires the `ADMINISTRATION` privilege. `ORG` returns the Org-admin view, including `element_value` per feature. | `org_identifier` | integer @@ -72,7 +72,7 @@ A successful request returns `200 OK` and an array of feature groups. Each group | Feature availability category: `GENERAL_ACCESS` (default) or `EARLY_ACCESS`. |=== -=== Example request: cluster view +=== Example request: Cluster view [source,bash] ---- @@ -87,7 +87,7 @@ curl -X POST \ }' ---- -=== API response: cluster view +=== API response: Cluster view [source,json] ---- @@ -176,7 +176,7 @@ curl -X POST \ == Update feature assignments -The `POST /api/rest/2.0/configurations/features/assignments/update` API endpoint updates the Org assignments for a feature. Available to cluster admins only. Org admins cannot call this endpoint. Requires the `ADMINISTRATION` privilege. +The `POST /api/rest/2.0/configurations/features/assignments/update` API endpoint updates the Org assignments for a feature. Available to Cluster admins only. Org admins cannot call this endpoint. Requires the `ADMINISTRATION` privilege. A successful request returns `200 OK` and a `FeatureAssignmentResponse` object with `feature_id`, `feature_name`, and the updated `assigned_orgs` list. @@ -255,13 +255,13 @@ curl -X POST \ == Update feature value -The `POST /api/rest/2.0/configurations/features/values/update` API endpoint sets the value of a feature at the cluster or Org scope. Requires the `ADMINISTRATION` or `ORG_ADMINISTRATION` privilege. The `ORG_ADMINISTRATION` privilege applies only to Org admins. +The `POST /api/rest/2.0/configurations/features/values/update` API endpoint sets the value of a feature at the Cluster or Org scope. Requires the `ADMINISTRATION` or `ORG_ADMINISTRATION` privilege. The `ORG_ADMINISTRATION` privilege applies only to Org admins. A successful request returns `200 OK` and a `FeatureValueResponse` object with `feature_id`, `feature_name`, and the updated `feature_value`. [WARNING] ==== -Setting `reset_org_overrides` to `true` at `CLUSTER` scope removes all per-Org value overrides for this feature. All Orgs then inherit the new cluster-level value. This operation cannot be undone through the API. +Setting `reset_org_overrides` to `true` at `CLUSTER` scope removes all per-Org value overrides for this feature. All Orgs then inherit the new Cluster-level value. This operation cannot be undone through the API. ==== === Request parameters @@ -293,7 +293,7 @@ Setting `reset_org_overrides` to `true` at `CLUSTER` scope removes all per-Org v | `reset_org_overrides` | boolean | Conditional -| Applicable only when `scope` is `CLUSTER`. When `true`, any existing per-Org value overrides for this feature are also removed so that all Orgs inherit the new cluster-level value. When `false`, existing per-Org value overrides are retained. Required when `scope` is `CLUSTER` for an Org-aware feature. Must be omitted when `scope` is `ORG`; passing it at `ORG` scope returns a `400` error. +| Applicable only when `scope` is `CLUSTER`. When `true`, any existing per-Org value overrides for this feature are also removed so that all Orgs inherit the new Cluster-level value. When `false`, existing per-Org value overrides are retained. Required when `scope` is `CLUSTER` for an Org-aware feature. Must be omitted when `scope` is `ORG`; passing it at `ORG` scope returns a `400` error. |=== === Example request: set an Org-level override @@ -313,7 +313,7 @@ curl -X POST \ }' ---- -=== Example request: set cluster value and reset all Org overrides +=== Example request: set Cluster value and reset all Org overrides [source,bash] ---- @@ -330,7 +330,7 @@ curl -X POST \ }' ---- -=== API response: set cluster value and reset all Org overrides +=== API response: set Cluster value and reset all Org overrides [source,json] ---- From bb53b1b333cde6c7f81ec66d3b99b94e649f884b Mon Sep 17 00:00:00 2001 From: Rani Gangwar Date: Mon, 28 Sep 2026 17:26:31 +0530 Subject: [PATCH 26/33] Siddhant's feedback --- modules/ROOT/pages/api-changelog.adoc | 2 +- modules/ROOT/pages/data-security.adoc | 12 ++++++------ modules/ROOT/pages/embed-pinboard.adoc | 7 +++++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/modules/ROOT/pages/api-changelog.adoc b/modules/ROOT/pages/api-changelog.adoc index c18283a48..c3a38f467 100644 --- a/modules/ROOT/pages/api-changelog.adoc +++ b/modules/ROOT/pages/api-changelog.adoc @@ -88,7 +88,7 @@ Emitted when a user pins a Spotter conversation. Payload: `{ conversationId, pin `EmbedEvent.SpotterConversationUnpinned`:: Emitted when a user unpins a Spotter conversation. Payload: `{ conversationId, unpinnedAt }`. Requires `spotterChatPinConfig.enabled: true` and `enablePastConversationsSidebar: true`. -The following existing `EmbedEvent` members gained an optional `applicability` attribute for scoped filter and parameter operations: +The following existing `EmbedEvent` members gained an optional `applicability` attribute for filters and parameters: * `EmbedEvent.FilterChanged` * `EmbedEvent.ParameterChanged` diff --git a/modules/ROOT/pages/data-security.adoc b/modules/ROOT/pages/data-security.adoc index b10d14e9f..e8f25e89b 100644 --- a/modules/ROOT/pages/data-security.adoc +++ b/modules/ROOT/pages/data-security.adoc @@ -28,12 +28,12 @@ CLS restricts user access to specific columns of a table. When CLS is applied, u For more information on CLS, see link:https://docs.thoughtspot.com/cloud/latest/share-source-tables[Sharing tables and columns, window=_blank]. [#csr-liveboards] -=== #Column security rules on Liveboards# -#Starting with ThoughtSpot Cloud 26.10.0.cl, Liveboards that include columns restricted by Column Security Rules (CSR) open and work normally for users who cannot access those columns, including in embedded Liveboards. Previously, such Liveboards were blocked for these users. Column security remains fully enforced:# +=== Column security rules (CSR) on Liveboards +Starting with ThoughtSpot Cloud 26.10.0.cl, Liveboards that include columns restricted by Column Security Rules (CSR) open and work normally for users who cannot access those columns, including in embedded Liveboards. Previously, such Liveboards were blocked for these users. Column security remains fully enforced: -* #Filter values from columns that the user cannot access are masked instead of blocking the Liveboard.# -* #Scheduled Liveboard deliveries apply CSR separately for each recipient.# +* Filter chips from columns that the user cannot access are masked instead of blocking the Liveboard. Only one masked filter chip is shown, at the end of the filter bar, to indicate that one or more filters are inaccessible. For example, if five filters are inaccessible, the Liveboard still shows a single masked filter chip. +* Scheduled Liveboard deliveries apply CSR separately for each recipient. -#To control whether masked filter chips are visible in an embedded Liveboard, use the `showMaskedFilterChip` SDK property. For more information, see xref:embed-pinboard.adoc#masked-filter-chips[Masked filter chips].# +To control whether masked filter chips are visible in an embedded Liveboard, use the `showMaskedFilterChip` SDK property. For more information, see xref:embed-pinboard.adoc#masked-filter-chips[Masked filter chips]. -#For more information, see link:https://docs.thoughtspot.com/cloud/latest/security-data-object#csr-liveboard[Column security rules on Liveboards, window=_blank].# +For more information, see link:https://docs.thoughtspot.com/cloud/latest/security-data-object#csr-liveboard[Column security rules on Liveboards, window=_blank]. diff --git a/modules/ROOT/pages/embed-pinboard.adoc b/modules/ROOT/pages/embed-pinboard.adoc index 860f70f88..d7d948de5 100644 --- a/modules/ROOT/pages/embed-pinboard.adoc +++ b/modules/ROOT/pages/embed-pinboard.adoc @@ -402,14 +402,17 @@ xref:runtime-filters.adoc#_maximum_filter_count[Runtime filter limit]. ==== [#contextual-liveboard-filtering] -==== #Contextual filtering in Liveboards# [earlyAccess eaBackground]#Early Access# +==== Contextual filtering in Liveboards [earlyAccess eaBackground]#Early Access# Starting with ThoughtSpot Cloud 26.10.0.cl release, Liveboard filters and parameters can be scoped at three levels: * *Liveboard*: applies to all visualizations on the Liveboard. * *Tab*: applies only to visualizations on a specific tab. * *Group*: applies only to visualizations in a specific group on a tab. -With contextual filtering, you can add the same filter at more than one of these levels on a Liveboard. For example, a Liveboard can have a `Region` filter at the Liveboard level and another independent `Region` filter on a specific tab or group. +With contextual filtering, you can add the same filter at more than one level on a Liveboard, but not at a level directly below it in the same hierarchy. For example: + +* If a `Region` filter is set at the Liveboard level, it cannot be added again on any tab or group on that Liveboard. +* If a `City` filter is set on Tab 1, it cannot be added to a group on Tab 1. However, it can be added to a group on another tab, such as Tab 2, because that group is not in the Tab 1 hierarchy. [NOTE] ==== From d61a02c65bfc491a3b53c43cb0b1965d73698416 Mon Sep 17 00:00:00 2001 From: ShashiSubramanya Date: Wed, 30 Sep 2026 07:49:07 +0530 Subject: [PATCH 27/33] spotter analyst updates --- .../pages/common/nav-in-product-help.adoc | 1 + modules/ROOT/pages/common/nav-rest-api.adoc | 1 + .../spotter-agent-conversation-mgmt-apis.adoc | 41 +- modules/ROOT/pages/spotter-analyst-api.adoc | 437 +++++++++++------- modules/ROOT/pages/whats-new.adoc | 21 +- 5 files changed, 321 insertions(+), 180 deletions(-) diff --git a/modules/ROOT/pages/common/nav-in-product-help.adoc b/modules/ROOT/pages/common/nav-in-product-help.adoc index 5baf2043f..771b3e97a 100644 --- a/modules/ROOT/pages/common/nav-in-product-help.adoc +++ b/modules/ROOT/pages/common/nav-in-product-help.adoc @@ -236,6 +236,7 @@ REST APIs *** link:{{navprefix}}/spotter-agent-sharing-apis[Spotter agent conversation sharing APIs] *** link:{{navprefix}}/spotter-agent-instructions[Spotter AI agent instructions] *** link:{{navprefix}}/spotter-agent-conversation-mgmt-apis[APIs for managing saved conversations] +*** link:{{navprefix}}/spotter-analyst-api[Spotter Analyst APIs] *** link:{{navprefix}}/spotter-memory-migration[Spotter memory migration API] *** link:{{navprefix}}/spotter-apis-classic[AI APIs (Spotter Classic) ^BETA^] *** link:{{navprefix}}/spotter-nl-instructions[Data model instructions APIs ^BETA^] diff --git a/modules/ROOT/pages/common/nav-rest-api.adoc b/modules/ROOT/pages/common/nav-rest-api.adoc index e74ec5297..60d009d8a 100644 --- a/modules/ROOT/pages/common/nav-rest-api.adoc +++ b/modules/ROOT/pages/common/nav-rest-api.adoc @@ -38,6 +38,7 @@ REST API endpoints ** link:{{navprefix}}/spotter-agent-sharing-apis[Spotter agent conversation sharing APIs] ** link:{{navprefix}}/spotter-agent-instructions[Spotter AI agent instructions] ** link:{{navprefix}}/spotter-agent-conversation-mgmt-apis[APIs for managing saved conversations] +** link:{{navprefix}}/spotter-analyst-api[Spotter Analyst APIs] ** link:{{navprefix}}/spotter-memory-migration[Spotter memory migration API] ** link:{{navprefix}}/spotter-apis-classic[AI APIs (Spotter Classic)] ** link:{{navprefix}}/spotter-nl-instructions[Data model instructions APIs] diff --git a/modules/ROOT/pages/spotter-agent-conversation-mgmt-apis.adoc b/modules/ROOT/pages/spotter-agent-conversation-mgmt-apis.adoc index a4bc98671..da468027e 100644 --- a/modules/ROOT/pages/spotter-agent-conversation-mgmt-apis.adoc +++ b/modules/ROOT/pages/spotter-agent-conversation-mgmt-apis.adoc @@ -33,8 +33,8 @@ Use this endpoint to resolve `answer_id` references returned by the get conversa __Available on ThoughtSpot Cloud instances from 26.7.0.cl onwards.__ a|`POST /api/rest/2.0/ai/agent/conversations/{conversation_identifier}/update` + -xref:spotter-agent-conversation-mgmt-apis.adoc#update-conversation[Updates the metadata of a saved conversation], such as renaming its title. + -__Available on ThoughtSpot Cloud instances from 26.7.0.cl onwards.__ +xref:spotter-agent-conversation-mgmt-apis.adoc#update-conversation[Updates the metadata of a saved conversation], such as renaming its title or pinning it to the top of the conversation list. + +__Available on ThoughtSpot Cloud instances from 26.7.0.cl onwards. The `is_pinned` attribute is available from 26.10.0.cl onwards.__ a|`DELETE /api/rest/2.0/ai/agent/conversations/{conversation_identifier}/delete` + xref:spotter-agent-conversation-mgmt-apis.adoc#delete-conversation[Deletes a saved conversation] and all its messages. + @@ -63,6 +63,7 @@ curl -X POST \ }' ---- +=== API response If the API request is successful, ThoughtSpot returns the conversation IDs. [source,JSON] @@ -444,7 +445,12 @@ If the API request is successful, ThoughtSpot returns a response body with the a [#update-conversation] == Update a conversation -To update the metadata of an existing conversation, send a `POST` request to the `/api/rest/2.0/ai/agent/conversations/{conversation_identifier}/update` API endpoint with the conversation ID in the request URL. Currently, the API endpoint allows you to rename the conversation title only. +To update the metadata of an existing conversation, send a `POST` request to the `/api/rest/2.0/ai/agent/conversations/{conversation_identifier}/update` API endpoint with the conversation ID in the request URL. The API endpoint allows you to rename the conversation title and pin or unpin the conversation. + +[NOTE] +==== +Only conversations created with `enable_save_chat: true` can be pinned. Unsaved conversations are not persisted and cannot be retrieved. +==== === Request parameters @@ -454,6 +460,7 @@ To update the metadata of an existing conversation, send a `POST` request to the |Parameter|Description |`conversation_identifier`|__String__. Path parameter. Unique identifier of the conversation to update. |`title`|__String__. Form parameter to include in the request body. To rename the display title of the conversation, specify the title string. +|`is_pinned`|__Boolean__. When set to `true`, it pins the conversation for the user. Pinned conversations are surfaced first in `getConversationList`. Set to true to pin the conversation, false to unpin it, or omit to leave the pinned state unchanged. Applying the state the conversation is already in is a no-op success. |===== ==== API request example @@ -465,10 +472,38 @@ curl -X POST \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer {AUTH_TOKEN}' \ --data-raw '{ + "is_pinned": true, "title": "Revenue Analysis — Q1 2026" }' ---- +==== API request example: pin a conversation + +[source,cURL] +---- +curl -X POST \ + --url 'https://{ThoughtSpot-Host}/api/rest/2.0/ai/agent/conversations/0iwTDJU-tlkm/update' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {AUTH_TOKEN}' \ + --data-raw '{ + "is_pinned": true +}' +---- + +==== API request example: update title and pin state in a single request + +[source,cURL] +---- +curl -X POST \ + --url 'https://{ThoughtSpot-Host}/api/rest/2.0/ai/agent/conversations/0iwTDJU-tlkm/update' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {AUTH_TOKEN}' \ + --data-raw '{ + "title": "Revenue Analysis — Q1 2026", + "is_pinned": true +}' +---- + === API response A successful request returns the 204 response. diff --git a/modules/ROOT/pages/spotter-analyst-api.adoc b/modules/ROOT/pages/spotter-analyst-api.adoc index 5375e876f..a578213ab 100644 --- a/modules/ROOT/pages/spotter-analyst-api.adoc +++ b/modules/ROOT/pages/spotter-analyst-api.adoc @@ -1,133 +1,123 @@ = Spotter Analyst API :toc: true :toclevels: 2 - :page-title: Spotter Analyst API :page-pageid: spotter-analyst-api :page-description: Create, search, update, and delete Spotter Analysts using the REST API -// SOURCE: SCAL-317811; create-analyst.md, search-analyst.md, update-analyst.md, delete-analyst.md +ThoughtSpot Spotter Analysts are governed AI agents, each configured with a name, description, one or more data sources, and optional instructions, Model Context Protocol (MCP) connectors, and starter prompts. Users converse with an Analyst directly in the Spotter interface. -ThoughtSpot Spotter Analysts are governed AI agents, each configured with a name, description, one or more data sources, and optional instructions, MCP connectors, and starter prompts. Users converse with an Analyst directly in the Spotter interface. +== Supported endpoints -The Spotter Analyst REST API lets you create, search, update, and delete Analysts programmatically. -All endpoints are under `/api/rest/2.0/ai/agent/analysts/` and are available from ThoughtSpot Cloud 26.10.0.cl. +Use the following endpoints to create, search, update, share, or delete Analysts programmatically: -== Prerequisites +[width="100%", cols="1"] +|===== +a|`POST /api/rest/2.0/ai/agent/analysts/create` + +xref:spotter-analyst-api.adoc#create-analyst[Creates a Spotter Analyst] with a name, description, data sources, and optional instructions, MCP connectors, and starter prompts. + +__Available on ThoughtSpot Cloud instances from 26.10.0.cl onwards.__ -* Spotter must be enabled on your ThoughtSpot instance. Contact ThoughtSpot Support to enable it. -* All requests require a Bearer token. Use a token scoped to the Org in which the Analyst exists or should be created. -* Privilege requirements vary by operation. See each endpoint section for details. +a|`POST /api/rest/2.0/ai/agent/analysts/search` + +xref:spotter-analyst-api.adoc#search-analysts[Retrieves Analysts visible to the caller], either a single Analyst by identifier or a paginated list ordered by most recent access. + +__Available on ThoughtSpot Cloud instances from 26.10.0.cl onwards.__ -== Analyst object +a|`POST /api/rest/2.0/ai/agent/analysts/{analyst_identifier}/update` + +xref:spotter-analyst-api.adoc#update-analyst[Updates a Spotter Analyst]. The update is a full replace; omitted optional fields are cleared. + +__Available on ThoughtSpot Cloud instances from 26.10.0.cl onwards.__ -Each Analyst has the following fields: +a|`POST /api/rest/2.0/ai/agent/analysts/{analyst_identifier}/share` [beta betaBackground]^Beta^ + +xref:spotter-analyst-api.adoc#share-analyst[Updates share permissions on a Spotter Analyst] for one or more users or groups. Granting access also shares the Analyst's data sources with the principal. + +__Available on ThoughtSpot Cloud instances from 26.10.0.cl onwards.__ -[cols="1,1,3"] -|=== -| Field | Type | Description +a|`POST /api/rest/2.0/ai/agent/analysts/{analyst_identifier}/delete` + +xref:spotter-analyst-api.adoc#delete-analyst[Permanently deletes a Spotter Analyst]. This operation is irreversible. + +__Available on ThoughtSpot Cloud instances from 26.10.0.cl onwards.__ +|===== -| `id` -| string -| Server-assigned unique identifier. +== Analyst object -| `name` -| string -| Display name of the Analyst. +Each AI Analyst object in ThoughtSpot has the following properties: -| `description` -| string -| Description of the Analyst. Maximum 200 characters. +* `id` + +__String__. Server-assigned unique identifier. -| `instructions` -| string -| Optional natural-language behavior guidelines for the agent. +* `name` + +__String__. Display name of the Analyst. -| `sources` -| array -| Data sources the Analyst can query. Each source includes an `id`, `type`, and display `name`. Supported types: `MODEL`, `ANSWER`, `LIVEBOARD`, `CONVERSATION`. +* `description` + +__String__. Description of the Analyst. Maximum 200 characters. -| `mcp_connectors` -| array -| Linked MCP connectors. Each connector includes `id`, `name`, and `icon_url`. +* `instructions` + +__String__. Optional natural-language behavior guidelines for the agent. -| `starter_prompts` -| array -| Up to 4 suggested prompts shown on the Analyst landing page. Each entry includes `label`, `text`, `order`, and `is_ai_generated`. +* `sources` + +__Array of strings__. Data sources the Analyst can query. Each source includes an `id`, `type`, and display `name`. Supported types: `MODEL`, `ANSWER`, `LIVEBOARD`, `CONVERSATION`. -| `icon_id` -| string -| Analyst icon identifier. Analysts created via the API use the default icon until one is set in the UI. +* `mcp_connectors` + +__Array of strings__. Linked MCP connectors. Each connector includes `id`, `name`, and `icon_url`. -| `updated_time_in_millis` -| integer -| Epoch timestamp in milliseconds of the last update. +* `starter_prompts` + +__Array of strings__. Up to 4 suggested prompts shown on the Analyst landing page. Each entry includes `label`, `text`, `order`, and `is_ai_generated`. -| `last_accessed_time_in_millis` -| integer -| Epoch timestamp in milliseconds of the last access. +* `icon_id` + +__String__. Analyst icon identifier. Analysts created via the API use the default icon until one is set in the UI. -| `created_by` -| object -| User who created the Analyst. Includes `id`, `name`, and `display_name`. +* `updated_time_in_millis` + +__Integer__. Epoch timestamp in milliseconds of the last update. -| `updated_by` -| object -| User who last updated the Analyst. Includes `id`, `name`, and `display_name`. -|=== +* `last_accessed_time_in_millis` + +__Integer__. Epoch timestamp in milliseconds of the last access. -== Create Analyst +* `created_by` + +User who created the Analyst. Includes `id`, `name`, and `display_name`. -`POST /api/rest/2.0/ai/agent/analysts/create` +* `updated_by` + +User who last updated the Analyst. Includes `id`, `name`, and `display_name`. -Creates a Spotter Analyst. Analysts created via the API use the default icon until one is set in the ThoughtSpot UI. -=== Privileges required +[#create-analyst] +== Create an analyst +To create a Spotter Analyst programmatically, send a `POST` request to the `/api/rest/2.0/ai/agent/analysts/create` endpoint with the Analyst definition in the request body. The definition includes a name, a description, and at least one data source, and can optionally include instructions, MCP connectors, and starter prompts. -At least one of the following: `ADMINISTRATION`, `CAN_MANAGE_SPOTTER`, or `CAN_USE_SPOTTER`. The caller must also have view access to every data source listed in `sources`. +Use this endpoint to provision governed Analysts as part of an automated deployment workflow, or to create Analysts programmatically across environments. -=== Request parameters +[NOTE] +==== +Analysts created via the API use the default icon until one is set in the ThoughtSpot UI. +==== -[cols="1,1,1,3"] -|=== -| Parameter | Type | Required | Description - -| `name` -| string -| Required -| Display name of the Analyst. - -| `description` -| string -| Required -| Description of the Analyst. Maximum 200 characters. - -| `sources` -| array -| Required -| At least one data source. Each entry requires an `identifier` and a `type` (`MODEL`, `ANSWER`, `LIVEBOARD`, or `CONVERSATION`). The `name` field is optional. The caller must have view access to every referenced source. - -| `instructions` -| string -| Optional -| Natural-language instructions that guide the agent's behavior. Instructions that conflict with system guardrails are rejected with a `409` error. - -| `mcp_connector_identifiers` -| array -| Optional -| Identifiers of MCP connectors to link to the Analyst. - -| `starter_prompts` -| array -| Optional -| Up to 4 plain-text prompts, each between 10 and 250 characters. Display order follows list position. -|=== +=== Required privileges -=== Response +Requires at least one of the following privileges: -Returns `200 OK` and the created `Analyst` object, including the server-assigned `id`. +* `ADMINISTRATION` +* `CAN_MANAGE_SPOTTER` +* `CAN_USE_SPOTTER` -=== Example +The user must also have at least view access to the data sources specified in the API request. + +=== Request parameters + +[width="100%" cols="2,4"] +[options="header"] +|===== +| Parameter | Description +| `name` |__String__. Display name of the Analyst. +| `description` |__String__. Description of the Analyst. Maximum 200 characters. +| `sources` a|__Array of objects__. Data sources the Analyst can query. At least one source is required. The caller must have view access to every referenced source. For each source object, specify the following attributes: + +* `identifier` + +__String__. Unique ID of the data source object. +* `type` + +__String__. Type of the data source object. Valid values: `MODEL`, `ANSWER`, `LIVEBOARD`, and `CONVERSATION`. +* `name` + +__String__. Optional. Display name of the data source. +| `instructions` |__String__. Optional. Natural-language instructions that guide the agent's behavior. Instructions that conflict with system guardrails are rejected with a `409` error. +| `mcp_connector_identifiers` |__Array of strings__. Optional. Identifiers of MCP connectors to link to the Analyst. +| `starter_prompts` |__Array of strings__. Optional. Up to 4 plain-text prompts, each between 10 and 250 characters. Display order follows list position. +|===== + +=== Request example [source,bash] ---- @@ -153,6 +143,12 @@ curl -X POST \ }' ---- +=== API Response + +Returns `200 OK` and the created `Analyst` object, including the server-assigned `id`. + + +//// === Error responses [cols="1,3"] @@ -167,60 +163,42 @@ curl -X POST \ | 429 | Rate limit exceeded. | 500 | Unexpected server error. |=== +//// -== Search Analysts -`POST /api/rest/2.0/ai/agent/analysts/search` +[#search-analysts] +== Search analysts +To retrieve the Spotter Analysts visible to the authenticated user, send a `POST` request to the `/api/rest/2.0/ai/agent/analysts/search` endpoint. Use this endpoint to fetch a specific Analyst by its identifier, or to render an Analyst catalog or picker in your app. -Returns Analysts visible to the caller. This endpoint operates in two modes: +This endpoint operates in two modes: -Fetch mode:: Provide `analyst_identifier` to retrieve a single Analyst. All other filters are ignored and `total_size` is `1`. +Fetch mode:: Provide `analyst_identifier` in the request body to retrieve a single Analyst. All other filters are ignored and `total_size` is `1`. List mode:: Omit `analyst_identifier` to get a paginated list of Analysts, ordered by most recently accessed. -=== Privileges required +=== Required privileges +Requires at least one of the following privileges: -At least one of the following: `ADMINISTRATION`, `CAN_MANAGE_SPOTTER`, or `CAN_USE_SPOTTER`. +* `ADMINISTRATION` +* `CAN_MANAGE_SPOTTER` +* `CAN_USE_SPOTTER` === Request parameters -[cols="1,1,1,3"] -|=== -| Parameter | Type | Required | Description - -| `analyst_identifier` -| string -| Optional -| When provided, returns exactly this Analyst. All other filters are ignored. - -| `record_size` -| integer -| Optional -| Number of records per page. Default: `50`. Range: 1 to 500. - -| `record_offset` -| integer -| Optional -| Zero-based index of the first record. Default: `0`. Maximum: `10000`. - -| `query` -| string -| Optional -| Case-insensitive substring match on Analyst name. - -| `type` -| string -| Optional -| Ownership filter. Accepted values: `ALL` (default, returns Analysts created by or shared with the caller), `CREATED_BY_ME`, or `SHARED_TO_ME`. -|=== +[width="100%" cols="2,4"] +[options="header"] +|===== +| Parameter | Description +| `analyst_identifier` |__String__. Optional. When provided, returns exactly this Analyst. All other filters are ignored. +| `record_size` |__Integer__. Optional. Number of records per page. The default value is `50`. The supported range is 1 to 500. +| `record_offset` |__Integer__. Optional. Zero-based index of the first record. The default value is `0`. The maximum value is `10000`. +| `query` |__String__. Optional. Case-insensitive substring match on Analyst name. +| `type` |__String__. Optional. Ownership filter. Valid values are `ALL` (default, returns Analysts created by or shared with the caller), `CREATED_BY_ME`, and `SHARED_TO_ME`. +|===== -=== Response -Returns `200 OK` and an `AnalystSearchResponse` object with: +=== Request examples -* `analysts`: the current page of matching `Analyst` objects. -* `total_size`: total count of matching Analysts before pagination. - -=== Example: list all Analysts +List all Analysts:: [source,bash] ---- @@ -236,7 +214,7 @@ curl -X POST \ }' ---- -=== Example: fetch a single Analyst +Fetch a single Analyst:: [source,bash] ---- @@ -250,6 +228,14 @@ curl -X POST \ }' ---- +=== API Response + +Returns `200 OK` and an `AnalystSearchResponse` object with: + +* `analysts`: the current page of matching `Analyst` objects. +* `total_size`: total count of matching Analysts before pagination. + +//// === Error responses [cols="1,3"] @@ -260,32 +246,43 @@ curl -X POST \ | 404 | (Fetch mode) No Analyst with the given identifier exists in the caller's Org. | 422 | `record_size` or `record_offset` is out of the permitted range. |=== +//// -== Update Analyst -`POST /api/rest/2.0/ai/agent/analysts/{analyst_identifier}/update` +[#update-analyst] +== Update an analyst +To modify an existing Spotter Analyst, send a `POST` request to the `/api/rest/2.0/ai/agent/analysts/{analyst_identifier}/update` endpoint. The Analyst to update is identified by the `analyst_identifier` URL path parameter, and the new definition is passed in the request body. -Updates a Spotter Analyst. The update is a full replace: the Analyst is rewritten from the request body. Any optional field omitted from the request is cleared. Include all fields you want to retain. +The update is a full replace: the Analyst is rewritten from the request body, and any optional field omitted from the request is cleared. Include all fields you want to retain. When new sources are added, they are automatically shared with users the Analyst was previously shared with. Those users retain access to a working Analyst. -=== Privileges required -The caller must be the owner of the Analyst, or hold `ADMINISTRATION` or `CAN_MANAGE_SPOTTER` privileges. Users the Analyst is shared with can use it but cannot edit it. +=== Required privileges +Requires at least one of the following privileges: -=== Path parameter +* `ADMINISTRATION` +* `CAN_MANAGE_SPOTTER` -`analyst_identifier`: unique ID of the Analyst to update, as returned by the Create Analyst or Search Analysts endpoint. +The API endpoint doesn't allow users to edit the Analyst objects that are shared with them by another user. === Request parameters -The request body uses the same shape as Create Analyst: `name`, `description`, `sources`, `instructions`, `mcp_connector_identifiers`, and `starter_prompts`. - -=== Response +[width="100%" cols="2,2,4"] +[options="header"] +|===== +| Parameter | Type | Description +| `analyst_identifier` | Path parameter |__String__. Unique identifier of the Analyst to update, as returned by the Create an analyst or Search analysts endpoint. +| `name` | Form parameter |__String__. Display name of the Analyst. +| `description` | Form parameter |__String__. Description of the Analyst. Maximum 200 characters. +| `sources` | Form parameter |__Array of objects__. Data sources the Analyst can query. Replaces the existing list in full. When new sources are added, they are automatically shared with users the Analyst was previously shared with, so those users keep a working Analyst. +| `instructions` | Form parameter |__String__. Optional. Natural-language instructions that guide the agent's behavior. Instructions that conflict with system guardrails are rejected with a `409` error. If instructions are not specified, any existing instructions on the Analyst are removed. +| `mcp_connector_identifiers` | Form parameter |__Array of strings__. Optional. Identifiers of MCP connectors to link to the Analyst. Replaces the existing list in full. To remove the existing connectors, pass an empty array. +| `starter_prompts` | Form parameter |__Array of strings__. Optional. Up to 4 plain-text prompts, each between 10 and 250 characters. Replaces the existing list in full. To remove the existing starter prompts, pass an empty array. +|===== -Returns `200 OK` and the updated `Analyst` object, including the refreshed `updated_time_in_millis` and `updated_by` fields. -=== Example +=== Request examples [source,bash] ---- @@ -317,9 +314,14 @@ curl -X POST \ [NOTE] ==== -The update is a full replace. Omitting `instructions`, `mcp_connector_identifiers`, or `starter_prompts` clears those fields on the Analyst. Include every field you want to keep. +The update operation replaces existing properties of the Analyst object. Ensure that you include every parameter that you want to keep. ==== + +=== API Response +Returns `200 OK` and the updated `Analyst` object, including the refreshed `updated_time_in_millis` and `updated_by` fields. + +//// === Error responses [cols="1,3"] @@ -335,39 +337,110 @@ The update is a full replace. Omitting `instructions`, `mcp_connector_identifier | 429 | Rate limit exceeded. | 500 | Unexpected server error. |=== +//// -== Delete Analyst +[#share-analyst] +== Share an analyst [beta betaBackground]^Beta^ +To share a Spotter Analyst with other ThoughtSpot users and groups, or to change or revoke their access, send a `POST` request to the `/api/rest/2.0/ai/agent/analysts/{analyst_identifier}/share` endpoint. The Analyst to share is identified by the `analyst_identifier` URL path parameter, and the permission assignments are passed in the request body, one entry per principal. -`POST /api/rest/2.0/ai/agent/analysts/{analyst_identifier}/delete` +Use `READ_ONLY` or `MODIFY` to grant or change a principal's access, and `NO_ACCESS` to revoke it. When access is granted, the Analyst's data sources are automatically shared with the principal, so the Analyst keeps working for them. -Permanently deletes a Spotter Analyst. This operation is irreversible. Deleted Analysts cannot be recovered. +Users the Analyst is shared with can use it but cannot edit it. To allow editing, set `share_mode` to `MODIFY`. -=== Privileges required +=== Required privileges +Requires at least one of the following privileges: -The caller must be the owner of the Analyst, or hold `ADMINISTRATION` or `CAN_MANAGE_SPOTTER` privileges. Users the Analyst is shared with cannot delete it. +* `ADMINISTRATION` +* `CAN_MANAGE_SPOTTER` -=== Path parameter +Use a Bearer token for the Org in which the Analyst exists. -`analyst_identifier`: unique ID of the Analyst to delete, as returned by the Create Analyst or Search Analysts endpoint. +=== Request parameters -=== Request body +Specify the `analyst_identifier` as a path parameter. -None. +The request body contains a `permissions` array with one entry per principal. A principal may appear at most once per request. -=== Response +[width="100%" cols="2,2,4"] +[options="header"] +|==== +| Parameter |Type |Description +| `analyst_identifier` |Path parameter |__String__. Unique identifier of the Analyst to share, as returned by the Create an analyst or Search analysts endpoint. +| `permissions` a|Form parameter a|__Array of objects__. Permission assignments, one entry per principal. A principal may appear at most once per request. For each entry, specify the following attributes: -Returns `200 OK` and an `AnalystDeleteResponse` object containing the `id` of the deleted Analyst. +* `principal` + +__Object__. The user or group to assign access to. Specify the following attributes: + +** `identifier` + +__String__. Unique identifier of the user or group. +** `type` + +__String__. Type of principal. Valid values: `USER` and `USER_GROUP`. + +* `share_mode` + +__String__. Access level to assign. `READ_ONLY` or `MODIFY` grants or changes the principal's access. `NO_ACCESS` revokes it. +|==== + + +=== Request examples -=== Example +Share with a user and a group:: [source,bash] ---- curl -X POST \ - --url 'https://{cluster}/api/rest/2.0/ai/agent/analysts/{analyst_identifier}/delete' \ + --url 'https://{cluster}/api/rest/2.0/ai/agent/analysts/{analyst_identifier}/share' \ -H 'Accept: application/json' \ - -H 'Authorization: Bearer {token}' + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {token}' \ + --data-raw '{ + "permissions": [ + { + "principal": { + "identifier": "{user-guid}", + "type": "USER" + }, + "share_mode": "READ_ONLY" + }, + { + "principal": { + "identifier": "{group-guid}", + "type": "USER_GROUP" + }, + "share_mode": "MODIFY" + } + ] +}' ---- +Revoke access:: + +[source,bash] +---- +curl -X POST \ + --url 'https://{cluster}/api/rest/2.0/ai/agent/analysts/{analyst_identifier}/share' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {token}' \ + --data-raw '{ + "permissions": [ + { + "principal": { + "identifier": "{user-guid}", + "type": "USER" + }, + "share_mode": "NO_ACCESS" + } + ] +}' +---- + + +=== API Response + +Returns an empty `204 No Content` response on success. + + +//// === Error responses [cols="1,3"] @@ -378,9 +451,47 @@ curl -X POST \ | 401 | Bearer token is missing, expired, or invalid. | 403 | The caller is not the Analyst owner and does not hold admin or Spotter-management privileges. | 404 | No Analyst with the given identifier exists in the caller's Org. +| 422 | Validation failure: empty `permissions` array, duplicate principal, or a missing required field. | 429 | Rate limit exceeded. | 500 | Unexpected server error. |=== +//// + +[#delete-analyst] +== Delete an analyst +To permanently delete a Spotter Analyst, send a `POST` request to the `/api/rest/2.0/ai/agent/analysts/{analyst_identifier}/delete` endpoint with the Analyst's unique identifier as the URL path parameter. No request body is required. + +[WARNING] +==== +This operation is irreversible. Deleted Analysts cannot be recovered. +==== + +=== Required privileges +The owners of the Analyst object specified in the API request can delete the object. Other users require at least one of the following privileges: + +* `ADMINISTRATION` +* `CAN_MANAGE_SPOTTER` + +The API endpoint doesn't allow users to delete the Analyst objects that are shared with them by another user. + +=== Request parameter + +Specify the ID of the Analyst to delete in the `analyst_identifier` path parameter. + +=== Request example + +[source,bash] +---- +curl -X POST \ + --url 'https://{cluster}/api/rest/2.0/ai/agent/analysts/{analyst_identifier}/delete' \ + -H 'Accept: application/json' \ + -H 'Authorization: Bearer {token}' +---- + +=== API Response + +Returns `200 OK` and an `AnalystDeleteResponse` object containing the `id` of the deleted Analyst. + == Related resources diff --git a/modules/ROOT/pages/whats-new.adoc b/modules/ROOT/pages/whats-new.adoc index 1fb18e386..ced52e8fc 100644 --- a/modules/ROOT/pages/whats-new.adoc +++ b/modules/ROOT/pages/whats-new.adoc @@ -38,29 +38,24 @@ a| a| [discrete] -==== Spotter Analyst API +==== Spotter Analyst -Spotter Analysts are governed AI agents you can create, configure, and manage via the REST API. Four new endpoints are available under `/api/rest/2.0/ai/agent/analysts/` to create, search, update, and delete Analysts programmatically. Each Analyst is configured with a name, description, one or more data sources, and optional instructions, MCP connectors, and starter prompts. For more information, see xref:spotter-analyst-api.adoc[Spotter Analyst API]. +Embed Spotter Analyst:: +You can now embed a single, pinned Spotter Analyst in your application using the Visual Embed SDK. The `spotterAnalystConfig.analystId` property in `SpotterEmbed` locks the embed to one governed Analyst experience. For more information, see xref:embed-spotter-analyst.adoc[Embed Spotter Analyst]. ---- -[discrete] -==== Embed Spotter Analyst - -You can now embed a single, pinned Spotter Analyst in your application using the Visual Embed SDK. The `spotterAnalystConfig.analystId` property in `SpotterEmbed` locks the embed to one governed Analyst experience. Combined with the updated `hiddenActions` list, you can prevent users from switching to other Analysts or to the default Spotter. For more information, see xref:embed-spotter-analyst.adoc[Embed Spotter Analyst]. +REST API:: +Spotter Analysts are governed AI agents you can create, configure, and manage via the REST API. Four new endpoints are available under `/api/rest/2.0/ai/agent/analysts/` to create, search, update, and delete Analysts programmatically. Each Analyst is configured with a name, description, one or more data sources, and optional instructions, MCP connectors, and starter prompts. For more information, see xref:spotter-analyst-api.adoc[Spotter Analyst API]. --- [discrete] -==== Spotter conversation pinning - -Users can now pin Spotter conversations so they appear at the top of the conversation list for quick access. Pinning is disabled by default in embedded deployments and must be explicitly enabled using `spotterChatPinConfig` in `spotterSidebarConfig`. The SDK emits `EmbedEvent.SpotterConversationPinned` and `EmbedEvent.SpotterConversationUnpinned` when pin state changes. Use `HostEvent.PinSpotterConversation` and `HostEvent.UnpinSpotterConversation` to trigger pin state from the host application. For REST API access, the `is_pinned` field is now available on the Update Conversation endpoint. For more information, see xref:embed-spotter-analyst.adoc[Embed Spotter Analyst] and xref:rest-apiv2-changelog.adoc[REST API v2.0 changelog]. - +==== Pinning Spotter conversations +Users can now pin Spotter conversations in the embedded view and also via REST API. so they appear at the top of the conversation list for quick access. For more information, see xref:embed-spotter-analyst.adoc[Embed Spotter Analyst] and xref:spotter-agent-conversation-mgmt-apis.adoc#update-conversation[Spotter conversation APIs]. --- [discrete] ==== Feature management through APIs - ThoughtSpot now supports programmatic feature management with new REST APIv2 endpoints available under `/api/rest/2.0/configurations/features/`. Cluster and Org admins can search feature configurations, assign features to Orgs, and set feature values without using the link:https://docs.thoughtspot.com/cloud/latest/admin-portal-2#_feature_management[new Admin portal, window=_blank]. For more information, see xref:feature-management-api.adoc[Feature Management]. --- @@ -81,8 +76,6 @@ Liveboard filters now have a three-tier filter hierarchy : Liveboard level, tab * *Column security rules on Liveboards* + Liveboards that were previously blocked by Column Security Rules (CSR) now open and work normally, with column security fully enforced, including in embedded Liveboards. Filter values from inaccessible columns are masked instead of blocking the Liveboard, and scheduled Liveboard deliveries apply CSR separately for each recipient. For more information, see xref:data-security.adoc#csr-liveboards[Column security rules on Liveboards]. - - --- [discrete] From 7746470233ef9fc888a19e517e1e3a2f5db30358 Mon Sep 17 00:00:00 2001 From: Rani Gangwar Date: Wed, 30 Sep 2026 11:36:28 +0530 Subject: [PATCH 28/33] remove EA lable for lb cache --- modules/ROOT/pages/embed-pinboard.adoc | 5 ----- 1 file changed, 5 deletions(-) diff --git a/modules/ROOT/pages/embed-pinboard.adoc b/modules/ROOT/pages/embed-pinboard.adoc index d7d948de5..4c47759b8 100644 --- a/modules/ROOT/pages/embed-pinboard.adoc +++ b/modules/ROOT/pages/embed-pinboard.adoc @@ -346,11 +346,6 @@ see xref:customize-css-styles.adoc#liveboard-layout-vars[Liveboard layout CSS va === Liveboard browser cache and refresh ThoughtSpot supports browser-side data caching for Liveboards to improve load performance for users who revisit the same Liveboard within a session. Users can clear cache by clicking the refresh icon in the Liveboard header. -[NOTE] -==== -Liveboard browser cache and refresh is an Early Access feature and is disabled by default on ThoughtSpot instances. To enable this feature on your instance, contact ThoughtSpot support. -==== - To enable Liveboard data caching, set `enableLiveboardDataCache` to `true`. [source,javascript] From 56003c4d4693bbc134b741cedf5b65963ae513bd Mon Sep 17 00:00:00 2001 From: ShashiSubramanya Date: Wed, 30 Sep 2026 17:04:04 +0530 Subject: [PATCH 29/33] spotter and other updates --- modules/ROOT/pages/api-changelog.adoc | 142 +++-- modules/ROOT/pages/common/nav-embedding.adoc | 1 + .../pages/common/nav-in-product-help.adoc | 1 + .../pages/customize-spotter-analysts.adoc | 16 +- .../ROOT/pages/customize-spotter-sharing.adoc | 4 +- .../ROOT/pages/customize-spotter-sidebar.adoc | 34 +- modules/ROOT/pages/embed-spotter-analyst.adoc | 514 +++++++++++------- modules/ROOT/pages/whats-new.adoc | 1 + 8 files changed, 413 insertions(+), 300 deletions(-) diff --git a/modules/ROOT/pages/api-changelog.adoc b/modules/ROOT/pages/api-changelog.adoc index c3a38f467..95e141cfb 100644 --- a/modules/ROOT/pages/api-changelog.adoc +++ b/modules/ROOT/pages/api-changelog.adoc @@ -15,116 +15,96 @@ This page documents the changes introduced in each release of the Visual Embed S |[tag greenBackground]#NEW# a| [discrete] -===== Spotter Analyst embed (`spotterAnalystConfig`) - -You can now embed a single, pinned Spotter Analyst using `spotterAnalystConfig.analystId` in `SpotterEmbed`. Setting this property locks the embed to one governed Analyst and prevents users from navigating to other Analysts or to the default Spotter. - -New and updated configuration properties: - -`SpotterAnalystConfig.analystId` (string):: -Pins the embed to the Analyst with this GUID. Available from cluster version 26.10.0.cl. - -`spotterChatPinConfig` (on `SpotterSidebarViewConfig`):: -Enables pinning and unpinning of conversations in the sidebar. Contains `enabled` (boolean, default `false`), `pinLabel` (string), and `unpinLabel` (string). Available from cluster version 26.10.0.cl. - -`isScopedLiveboardFilteringEnabled` (on `LiveboardViewConfig` and `AppViewConfig`):: -Enables group-level and tab-level filters and parameter scoping on Liveboards, in addition to existing Liveboard level filters. - -`starterPrompts` (on `SpotterChatViewConfig`):: -Configures which starter prompt pills are shown above the Spotter chat input. Contains keys: `enable`, `quick`, `research`, `previewData`, and `liveboard`. Available from cluster version 26.10.0.cl. - -`openSpotterOnLiveboardByDefault` (on `SpotterChatViewConfig`):: -Opens the Spotter chat panel automatically when a Liveboard loads. Default: `true`. Supported on `LiveboardEmbed` and `AppEmbed`. Available from cluster version 26.10.0.cl. - +===== Spotter Analyst embed +You can now embed a single, pinned Spotter Analyst in `SpotterEmbed` by using `spotterAnalystConfig.analystId`. For more information, see xref:embed-spotter-analyst.adoc[Embed Spotter Analyst]. |[tag greenBackground]#NEW# a| [discrete] -===== New `Action` enum members - -The following `Action` enum members are added in this release: - -[cols="2,3"] -!=== -! Action ! Description - -! `Action.SpotterChatPin` -! Controls the visibility and disabled state of the pin and unpin action in the Spotter conversation edit menu. - -! `Action.SpotterAnalystList` -! Controls the visibility and disabled state of the Show all Analysts row in the Analyst interface. - -! `Action.SpotterDefaultAnalyst` -! Controls the visibility and disabled state of the default Spotter analyst entry in the Analyst interface. - -! `Action.SpotterOnLiveboard` -! Controls the Spotter button in the Liveboard header. - -! `Action.AllLiveboardFilters` -! Shows, hides, or disables all filter surfaces on a Liveboard: filter chips, parameter chips, and cross-filter chips at the Liveboard, tab, and group levels. Parameter and cross-filter chips support hide only and cannot be disabled. - -! `Action.EditInputTable` -! Edits an input table used by an Answer directly from the Liveboard. - -! `Action.QuickSearchPill` -! Controls the Basic Search starter-prompt pill in the Spotter interface. +===== Spotter embedding -! `Action.DeepAnalysisPill` -! Controls the Deep Analysis starter-prompt pill in the Spotter interface. +`spotterChatPinConfig`:: +You can now let users pin conversations in the chat history sidebar. Use the `spotterChatPinConfig` object in `spotterSidebarConfig` to turn pinning on (`enabled`) and to customize the labels of the *Pin* and *Unpin* options (`pinLabel` and `unpinLabel`). For more information, see xref:customize-spotter-sidebar.adoc#pinning-conversations[Pinning conversations]. -! `Action.DataLiteracyPill` -! Controls the Data Literacy starter-prompt pill in the Spotter interface. -!=== +`starterPrompts`:: +You can now customize the starter prompt pills in the embedded Spotter interface by using the `starterPrompts` object in `spotterChatConfig`. The object supports the `enable`, `quick`, `research`, `previewData`, and `liveboard` keys. To show or hide individual pills, use `Action.QuickSearchPill`, `Action.DeepAnalysisPill`, and `Action.DataLiteracyPill`. For more information, see xref:embed-spotter-analyst.adoc#_customizing_starter_prompt_pills[Customizing starter prompt pills]. |[tag greenBackground]#NEW# a| [discrete] -===== New `EmbedEvent` members +===== Liveboards in embedded view +The SDK includes the following enhancements for the Liveboards in your embedded app. -`EmbedEvent.SpotterConversationPinned`:: -Emitted when a user pins a Spotter conversation. Payload: `{ conversationId, pinnedAt }`. Requires `spotterChatPinConfig.enabled: true` and `enablePastConversationsSidebar: true`. +* `isScopedLiveboardFilteringEnabled` + +Enables scoping filters and parameters to a group of visualizations on a Liveboard, in addition to the Liveboard and tab levels. Supported in `AppEmbed` and `LiveboardEmbed`. +* `openSpotterOnLiveboardByDefault` + +Opens the Spotter chat panel automatically when a Liveboard loads. Set this property in `spotterChatConfig`. The default value is `true`. Supported in `AppEmbed` and `LiveboardEmbed`. +* `starterPrompts.liveboard` + +Starter prompts for the Spotter chat panel on a Liveboard. -`EmbedEvent.SpotterConversationUnpinned`:: -Emitted when a user unpins a Spotter conversation. Payload: `{ conversationId, unpinnedAt }`. Requires `spotterChatPinConfig.enabled: true` and `enablePastConversationsSidebar: true`. +|[tag greenBackground]#NEW# +a| +[discrete] +===== Action IDs for embedded Spotter and Liveboard interfaces -The following existing `EmbedEvent` members gained an optional `applicability` attribute for filters and parameters: +The following `Action` enum members are added in this release: -* `EmbedEvent.FilterChanged` -* `EmbedEvent.ParameterChanged` +* `Action.SpotterChatPin` + +Controls the visibility and enabled state of the pin and unpin action in the Spotter conversation edit menu. +* `Action.SpotterAnalystList` + +Controls the visibility and enabled state of the *Show all* Analysts entry in the Analyst interface. +* `Action.SpotterDefaultAnalyst` + +Controls the visibility and enabled state of the default Spotter entry in the Analyst interface. +* `Action.SpotterOnLiveboard` + +Controls the visibility and enabled state of the *Spotter* button in the Liveboard header. +* `Action.AllLiveboardFilters` + +Shows, hides, or greys out all filter surfaces on a Liveboard: filter chips, parameter chips, and cross-filter chips at the Liveboard, tab, and group levels. Parameter and cross-filter chips can only be hidden. +* `Action.EditInputTable` + +Controls the *Edit input table* action, which lets users edit an input table used by an Answer directly from the Liveboard. +* `Action.QuickSearchPill` + +Controls the *Basic Search* starter prompt pill in the Spotter interface. +* `Action.DeepAnalysisPill` + +Controls the *Deep Analysis* starter prompt pill in the Spotter interface. +* `Action.DataLiteracyPill` + +Controls the *Data Literacy* starter prompt pill in the Spotter interface. |[tag greenBackground]#NEW# a| [discrete] -===== New `HostEvent` members - -`HostEvent.PinSpotterConversation`:: -Pins a saved Spotter conversation. Accepts `{ conversationId }`. Requires `enablePastConversationsSidebar: true` on the instance. - -`HostEvent.UnpinSpotterConversation`:: -Unpins a previously pinned Spotter conversation. Accepts `{ conversationId }`. Requires `enablePastConversationsSidebar: true` on the instance. +===== Events -`HostEvent.GetGroups`:: -Returns filter and parameter group details for the current Liveboard. Response includes `orderedGroupIds`, `numberOfGroups`, and `Groups`. +Embed events:: +* `EmbedEvent.SpotterConversationPinned` + +Emitted when a user pins a Spotter conversation. The event payload includes the `conversationId` and `pinnedAt` values. +* `EmbedEvent.SpotterConversationUnpinned` + +Emitted when a user unpins a Spotter conversation. The event payload includes the `conversationId` and `unpinnedAt` values. -`HostEvent.OpenParameter`:: +Host events:: +* `HostEvent.PinSpotterConversation` + +Pins a saved Spotter conversation. Accepts `{ conversationId }`. +* `HostEvent.UnpinSpotterConversation` + +Unpins a previously pinned Spotter conversation. Accepts `{ conversationId }`. +* `HostEvent.GetGroups` + +Returns filter and parameter group details for the current Liveboard. The response includes `orderedGroupIds`, `numberOfGroups`, and `Groups`. +* `HostEvent.OpenParameter` + Opens the parameter panel for a specific parameter on the Liveboard. Accepts an optional `applicability` object to scope the action to a tab or group. -The following existing `HostEvent` members gained an optional `applicability` attribute for scoping to a Liveboard tab or group: +The pin and unpin events require `spotterChatPinConfig.enabled: true` and `enablePastConversationsSidebar: true` in the embed configuration. The host events also require chat history to be enabled on your ThoughtSpot instance. +Updated events:: +The following existing events now include or accept an optional `applicability` attribute, which scopes filters and parameters to a Liveboard tab or group: + +* `EmbedEvent.FilterChanged` +* `EmbedEvent.ParameterChanged` * `HostEvent.OpenFilter` * `HostEvent.GetFilters` * `HostEvent.UpdateFilters` -* `HostEvent.UpdateParameters` * `HostEvent.GetParameters` +* `HostEvent.UpdateParameters` -|[tag yellowBackground]#DEPRECATED# -a| -[discrete] -===== `HostEvent.UpdatePersonalizedView` deprecated - -`HostEvent.UpdatePersonalizedView` is deprecated in this release. Use `HostEvent.SelectPersonalizedView` instead. The replacement accepts an optional `viewName` to select a view by name, resets to the original view when the payload is empty, and reports an error when the named view is not found. - +Deprecated events:: +* `HostEvent.UpdatePersonalizedView` is deprecated. Use `HostEvent.SelectPersonalizedView` instead. `HostEvent.SelectPersonalizedView` additionally accepts an optional `viewName` to select a view by name, resets to the original view when the payload is empty, and reports an error when the named view isn't found. |==== == Version 1.52.x, September 2026 diff --git a/modules/ROOT/pages/common/nav-embedding.adoc b/modules/ROOT/pages/common/nav-embedding.adoc index dbcec8c9d..8133c24dc 100644 --- a/modules/ROOT/pages/common/nav-embedding.adoc +++ b/modules/ROOT/pages/common/nav-embedding.adoc @@ -11,6 +11,7 @@ Embed ThoughtSpot in a web app * link:{{navprefix}}/getting-started[Get started] * link:{{navprefix}}/embed-ai-search-analytics[Embed Spotter AI Analytics] ** link:{{navprefix}}/embed-spotter[Embed full Spotter experience] +** link:{{navprefix}}/embed-spotter-analyst[Embed a Spotter Analyst] ** link:{{navprefix}}/customize-spotter-embed[Customize Spotter interface] ** link:{{navprefix}}/customize-spotter-chat-experience[Customize chat experience] ** link:{{navprefix}}/customize-spotter-sidebar[Customize sidebar panel] diff --git a/modules/ROOT/pages/common/nav-in-product-help.adoc b/modules/ROOT/pages/common/nav-in-product-help.adoc index 771b3e97a..e2dfb49e3 100644 --- a/modules/ROOT/pages/common/nav-in-product-help.adoc +++ b/modules/ROOT/pages/common/nav-in-product-help.adoc @@ -30,6 +30,7 @@ Embed ThoughtSpot in a web app * link:{{navprefix}}/tsembed[Quickstart guide] * link:{{navprefix}}/embed-ai-search-analytics[Embed Spotter AI Analytics] ** link:{{navprefix}}/embed-spotter[Embed full Spotter experience] +** link:{{navprefix}}/embed-spotter-analyst[Embed a Spotter Analyst] ** link:{{navprefix}}/customize-spotter-embed[Customize Spotter interface] ** link:{{navprefix}}/customize-spotter-chat-experience[Customize chat experience] ** link:{{navprefix}}/customize-spotter-sidebar[Customize sidebar panel] diff --git a/modules/ROOT/pages/customize-spotter-analysts.adoc b/modules/ROOT/pages/customize-spotter-analysts.adoc index 2c2a8ad59..9fff0430f 100644 --- a/modules/ROOT/pages/customize-spotter-analysts.adoc +++ b/modules/ROOT/pages/customize-spotter-analysts.adoc @@ -18,7 +18,7 @@ ThoughtSpot allows users to create and manage link:https://docs.thoughtspot.com/ When Spotter Analysts are enabled on your ThoughtSpot instance and xref:customize-spotter-sidebar.adoc[sidebar] is visible in the embedded view, the Analysts panel and dashboard are visible by default. The sidebar also includes the option to view a specific Analyst or open the dashboard to view all the available Analysts. === Customizing the Analyst panel visibility -To control the visibility of the Spotter Analysts panel in the embedded sidebar, use the `SpotterAnalystSidebar` action ID in the `disabledActions` or `hiddenActions` array. +To control the visibility of the Spotter Analysts panel in the embedded sidebar, use the `Action.SpotterAnalystSidebar` action ID in the `disabledActions` or `hiddenActions` array. The following example shows how to hide the Spotter Analysts panel from the embedded view: @@ -26,7 +26,7 @@ The following example shows how to hide the Spotter Analysts panel from the embe ---- const embed = new SpotterEmbed("#embed", { // ...other Spotter embed configuration options - disabledActions: [ + hiddenActions: [ Action.SpotterAnalystSidebar, ], }); @@ -39,19 +39,19 @@ When Analysts are enabled in the embedded view, you can show or hide specific me |=== | Action ID | Description -| `Action.CreateAnalyst` +| `Action.SpotterAnalystCreate` | Action ID for the *Create new* action for creating a new Spotter Analyst. -| `Action.EditAnalyst` +| `Action.SpotterAnalystEdit` | Action ID for the edit option for an existing Analyst. -| `Action.CopyAnalyst` +| `Action.SpotterAnalystMakeACopy` | Action ID for the *Make a copy* action for duplicating an Analyst. -| `Action.ShareAnalyst` +| `Action.SpotterAnalystShare` | Action ID for the share action for sharing an Analyst with other users. -| `Action.DeleteAnalyst` +| `Action.SpotterAnalystDelete` | Action ID for the delete option for removing an Analyst. |=== @@ -60,7 +60,7 @@ When Analysts are enabled in the embedded view, you can show or hide specific me const spotterEmbed = new SpotterEmbed(document.getElementById('ts-embed'), { // ...other embed view configuration options hiddenActions: [ - Action.DeleteAnalyst, + Action.SpotterAnalystDelete, ], }); ---- diff --git a/modules/ROOT/pages/customize-spotter-sharing.adoc b/modules/ROOT/pages/customize-spotter-sharing.adoc index 07dfa6676..08400327f 100644 --- a/modules/ROOT/pages/customize-spotter-sharing.adoc +++ b/modules/ROOT/pages/customize-spotter-sharing.adoc @@ -1,8 +1,8 @@ -= Customize conversation sharing experience += Customize conversation sharing options :toc: true :toclevels: 2 -:page-title: Customizing Spotter conversation sharing +:page-title: Customizing Spotter conversation options :page-pageid: customize-spotter-sharing :page-description: You can customize the Spotter conversation sharing experience using the customization options available in the Visual Embed SDK. diff --git a/modules/ROOT/pages/customize-spotter-sidebar.adoc b/modules/ROOT/pages/customize-spotter-sidebar.adoc index 288eee572..63680f829 100644 --- a/modules/ROOT/pages/customize-spotter-sidebar.adoc +++ b/modules/ROOT/pages/customize-spotter-sidebar.adoc @@ -90,7 +90,35 @@ const spotterEmbed = new SpotterEmbed('#ts-embed', { }); ---- -For a complete list of action IDs, see xref:Action.adoc[Action reference]. +[#pinning-conversations] +=== Pinning conversations +Users can pin Spotter conversations in the chat history panel so that the conversations appear at the top of the list. This feature is available from ThoughtSpot Cloud 26.10.0.cl and Visual Embed SDK 1.53.0, and it requires the chat history panel (`enablePastConversationsSidebar: true`). + +Pinning is off by default in embedded Spotter. To turn it on, set the `enabled` property to `true` in the `spotterChatPinConfig` object of `spotterSidebarConfig`. When pinning is off, the *Pin* and *Unpin* options and the pin icon are hidden, and the `HostEvent.PinSpotterConversation` and `HostEvent.UnpinSpotterConversation` events have no effect. + +To customize the labels for the *Pin* and *Unpin* options in the conversation edit menu, set the following properties in the `spotterChatPinConfig` object: + +* `pinLabel` + +__String__. Custom label for the pin option in the conversation edit menu. +* `unpinLabel` + +__String__. Custom label for the unpin option in the conversation edit menu. + +[source,JavaScript] +---- +const spotterEmbed = new SpotterEmbed('#ts-embed', { + // ...other embed view configuration options + spotterSidebarConfig: { + enablePastConversationsSidebar: true, + spotterChatPinConfig: { + enabled: true, // Turn on pinning + pinLabel: 'Pinned', // Custom label for the pin option + unpinLabel: 'Remove Pin', // Custom label for the unpin option + }, + }, +}); +---- + +To pin or unpin conversations programmatically, or to listen for pin events, see <<_customizing_app_interactions,Customizing app interactions>>. For more information, see xref:event-embedEvents.adoc#pin-events[Spotter conversation pin events] and xref:events-hostEvents.adoc#spotter-pin-host-events[Spotter conversation pin and unpin]. === Customizing app interactions Use the following event IDs to enable interaction between the host application and the chat history panel: @@ -98,6 +126,8 @@ Use the following event IDs to enable interaction between the host application a HostEvents:: * `HostEvent.StartNewSpotterConversation` + Starts a new Spotter conversation programmatically. +* `HostEvent.PinSpotterConversation` and `HostEvent.UnpinSpotterConversation` + +Pins or unpins a saved conversation. Both events accept a `conversationId`, and require `spotterChatPinConfig.enabled` to be `true`. + [source,JavaScript] @@ -116,6 +146,8 @@ Emitted when a user renames a conversation from the chat history panel. The even Emitted when a user deletes a conversation from the chat history panel. The event payload includes the `convId` and `title`. * `EmbedEvent.SpotterConversationSelected` + Emitted when a user selects a conversation from the chat history panel. The event payload includes the `convId`, `title`, and `worksheetId`. +* `EmbedEvent.SpotterConversationPinned` and `EmbedEvent.SpotterConversationUnpinned` + +Emitted when a user pins or unpins a conversation. The event payload includes the `conversationId` and the `pinnedAt` or `unpinnedAt` timestamp in ISO 8601 date and time format. + [source,JavaScript] diff --git a/modules/ROOT/pages/embed-spotter-analyst.adoc b/modules/ROOT/pages/embed-spotter-analyst.adoc index badd322a1..ad3f5772e 100644 --- a/modules/ROOT/pages/embed-spotter-analyst.adoc +++ b/modules/ROOT/pages/embed-spotter-analyst.adoc @@ -4,297 +4,395 @@ :page-title: Embed Spotter Analyst :page-pageid: embed-spotter-analyst -:page-description: Embed a single, pinned Spotter Analyst in your application using the Visual Embed SDK +:page-description: Embed a single, pinned Spotter Analyst in your app using the Visual Embed SDK -// SOURCE: SCAL-317811, SDK-1.53.0-changelog.md, Spotter embed developer cheatsheet +ThoughtSpot Spotter Analysts are governed AI agents configured with specific data sources, instructions, and starter prompts. Using the Visual Embed SDK, you can embed a single Analyst in your app. This locks the experience to that Analyst, so users get consistent, governed answers without choosing a data source or another Analyst. -ThoughtSpot Spotter Analysts are governed AI agents configured with specific data sources, instructions, and starter prompts. Using the Visual Embed SDK, you can embed a single, pinned Analyst in your application. This locks the embed to one governed experience and prevents users from switching to other Analysts or to the default Spotter. +This page shows how to embed one Analyst using the `SpotterEmbed` component. -== Version requirements +== Before you begin -[cols="1,2"] -|=== -| Component | Minimum version +Before you embed an Analyst, make sure that you have the following: -| Visual Embed SDK | 1.51.2 -| ThoughtSpot cluster | 26.10.0.cl -|=== +* Your ThoughtSpot instance is on version 26.10.0.cl or later. Embedding a Spotter Analyst also requires Visual Embed SDK version 1.53.0 or later. +* GUID of the Analyst to embed. You can copy the GUID from the URL of the Spotter Analyst page or find the GUID using the xref:spotter-analyst-api.adoc#search-analysts[search Analysts] API endpoint. +* GUID of the data model to use for queries. You can use the model that the Analyst is already configured with. If the Analyst spans multiple models, you need the GUID of each model. +* Access for the users who see the embed. Users must have access to the Analyst and its data sources. To grant access, share the Analyst with the users or groups. To share an Analyst programmatically, see xref:spotter-analyst-api.adoc#share-analyst[Share an Analyst]. +* Your embedding app's domain in the Content Security Policy (CSP) Visual Embed hosts and Cross-Origin Resource Sharing (CORS) allowlists. For more information, see xref:security-settings.adoc[Security settings]. -[NOTE] -==== -Some controls described in this page are available on earlier cluster versions (26.3 through 26.9). The `spotterAnalystConfig.analystId` property itself requires cluster version 26.10.0.cl. Use 26.10.0.cl as the minimum version requirement when setting up the single-Analyst embed configuration. -==== +== Import the SDK components -== How it works +Import the `SpotterEmbed` SDK library and the required components into your app environment: -Use `spotterAnalystConfig.analystId` in `SpotterEmbed` to pin the embed to one Analyst. By default, with no additional configuration, the Analyst panel and a switcher rail remain visible and users can navigate to other Analysts. To create a fully locked experience, you must also hide the switcher actions. +**npm** +[source,JavaScript] +---- +import { + SpotterEmbed, + AuthType, + init, + Action, +} from '@thoughtspot/visual-embed-sdk'; +---- -== Minimal configuration +**ES6** +[source,JavaScript] +---- + +---- -The following example embeds one Analyst with the chat history sidebar disabled and the switcher hidden: +In server-side rendered frameworks such as Next.js, Nuxt, and SvelteKit, the SDK reads `window` when it's imported. To avoid window reference errors, import the SDK dynamically: -[source,javascript] +[source,JavaScript] +---- +const { init, SpotterEmbed, AuthType, Action } = + await import('@thoughtspot/visual-embed-sdk'); ---- -// In server-side rendered frameworks (Next.js, Nuxt, SvelteKit), -// import the SDK dynamically to avoid window reference errors. -const { init, SpotterEmbed, AuthType } = - await import('@thoughtspot/visual-embed-sdk'); +== Configure the host URL and authentication method + +Specify the ThoughtSpot host URL in `thoughtSpotHost` and the authentication type in `authType`. For testing purposes, you can use `AuthType.None`, which uses the browser's existing ThoughtSpot session. For information about other authentication options, see xref:embed-authentication.adoc[Authentication]. + +[source,JavaScript] +---- init({ - thoughtSpotHost: 'https://{cluster}', - authType: AuthType.None, // uses the browser's existing session + thoughtSpotHost: 'https://{cluster}', // Replace with your ThoughtSpot application URL + authType: AuthType.None, // Use the appropriate AuthType for your setup }); +---- -new SpotterEmbed(container, { - frameParams: { width: '100%', height: '100%' }, - worksheetId: '{model-guid}', - - // Pin to one Analyst. - spotterAnalystConfig: { analystId: '{analyst-guid}' }, +== Specify the Analyst and data source to embed - // Disable the chat history sidebar. - spotterSidebarConfig: { enablePastConversationsSidebar: false }, +Create an instance of the `SpotterEmbed` object, and pin it to one Analyst by using `spotterAnalystConfig.analystId`. - // Hide the switcher so users cannot navigate to a different Analyst. - hiddenActions: [ - 'spotterAnalystSidebar', - 'spotterDefaultAnalyst', - 'spotterAnalystList', - ], +The `analystId` is the GUID of the Analyst to embed. When you specify it, the embed opens with this Analyst and doesn't show the default Spotter or the *Show all* Analysts list. - hideSourceSelection: true, - disableSourceSelection: true, -}).render(); ----- +Optionally, specify the data source that Spotter queries: -== Configuration reference +* `worksheetId` + +GUID of the model to query. Include it alongside `analystId`. +* `dataSources` + +Array that contains one GUID for each model, for an Analyst that spans multiple models. If you set both `dataSources` and `worksheetId`, `dataSources` takes precedence. -=== `spotterAnalystConfig` +The following example embeds one Analyst that uses a single model: -Type: `SpotterAnalystConfig`. Available from SDK 1.53.0 and ThoughtSpot Cloud 26.10.0.cl. +[source,JavaScript] +---- +const spotterEmbed = new SpotterEmbed(document.getElementById('ts-embed'), { + frameParams: { width: '100%', height: '100%' }, + worksheetId: '{model-guid}', -Available on `SpotterEmbedViewConfig`. Pins the embed to a single Analyst. + // Specify the Analyst ID + spotterAnalystConfig: { + analystId: '{analyst-guid}', + }, +}); +---- -[cols="1,1,1,3"] -|=== -| Property | Type | Cluster version | Description +If the Analyst spans multiple models, use `dataSources` instead of `worksheetId`: -| `analystId` -| string -| 26.10.0.cl -| GUID of the Analyst to display. Obtain this value from the xref:spotter-analyst-api.adoc[Spotter Analyst API] or from the ThoughtSpot UI. -|=== +[source,JavaScript] +---- +const spotterEmbed = new SpotterEmbed(document.getElementById('ts-embed'), { + frameParams: { width: '100%', height: '100%' }, + dataSources: ['{model-guid-1}', '{model-guid-2}'], -=== `spotterSidebarConfig` + // Specify the Analyst ID + spotterAnalystConfig: { + analystId: '{analyst-guid}', + }, +}); +---- -Type: `SpotterSidebarViewConfig`. +== Customize the Analyst interface -[cols="1,1,1,3"] -|=== -| Property | Type | Cluster version | Description +You can customize the following aspects of the embedded Analyst interface: -| `enablePastConversationsSidebar` -| boolean -| 26.4.0.cl -| Shows or hides the chat history sidebar. Set this property explicitly. Leaving it unset applies the cluster default, which may be `true`. +* <<_hiding_the_analyst_switcher_and_edit_controls,Hiding the Analyst switcher and edit controls>> +* <<_customizing_sidebar_visibility,Customizing sidebar visibility>> +* <<_customizing_the_chat_interface,Customizing the chat interface>> +* <<_customizing_styles_and_themes,Customizing styles and themes>> +* <<_customizing_app_interactions,Customizing app interactions>> -| `spotterChatPinConfig` -| `SpotterChatPinConfig` -| 26.10.0.cl -| Enables pinning and unpinning conversations in the sidebar. See xref:embed-spotter-analyst.adoc#pinning-conversations[Pinning conversations]. -|=== +=== Hiding the Analyst switcher and edit controls -=== `worksheetId` and `dataSources` +To make sure that users can't switch to another Analyst or to the default Spotter, hide the relevant controls by using the following action IDs in `hiddenActions`: -[cols="1,1,3"] -|=== -| Property | Cluster version | Description +* `Action.SpotterAnalystSidebar` + +Hides the Analyst selection panel in the sidebar. +* `Action.SpotterDefaultAnalyst` + +Hides the default Spotter entry in the Analyst selection panel. +* `Action.SpotterAnalystList` + +Hides the *Show all* Analysts entry in the Analyst selection panel. -| `worksheetId` -| All -| GUID of the single model Spotter queries. Include this property alongside `spotterAnalystConfig`. Omitting it can prevent host-triggered questions from executing. +To hide the Analyst authoring controls, use the following action IDs in `hiddenActions`: -| `dataSources` -| 26.9.0.cl -| Array of model GUIDs when the Analyst spans multiple models. If both `dataSources` and `worksheetId` are set, `dataSources` takes precedence. -|=== +* `Action.SpotterAnalystCreate` + +Hides the *Create* action in the Analyst interface. +* `Action.SpotterAnalystEdit` + +Hides the *Edit* action in the Analyst interface. +* `Action.SpotterAnalystDelete` + +Hides the *Delete* action in the Analyst interface. +* `Action.SpotterAnalystMakeACopy` + +Hides the *Make a copy* action in the Analyst interface. +* `Action.SpotterAnalystShare` + +Hides the *Share* action in the Analyst interface. -=== Locking the embed with `hiddenActions` +[source,JavaScript] +---- +const spotterEmbed = new SpotterEmbed(document.getElementById('ts-embed'), { + // ...other embed view configuration options + + // Hide the controls that let users switch Analysts and edit them + hiddenActions: [ + Action.SpotterAnalystSidebar, + Action.SpotterDefaultAnalyst, + Action.SpotterAnalystList, + Action.SpotterAnalystCreate, + Action.SpotterAnalystEdit, + Action.SpotterAnalystDelete, + Action.SpotterAnalystMakeACopy, + Action.SpotterAnalystShare, + ], +}); +---- -Pinning an Analyst without hiding the switcher only changes the default selection. Users can still navigate to a different Analyst. Use the following three action IDs together to prevent this: +[IMPORTANT] +==== +Hiding a control removes it from the interface, but it doesn't restrict what users can do. To enforce data security and governance, use data security rules and object sharing permissions. +==== -[cols="1,1,1"] -|=== -| Action ID | What it hides | Cluster version +=== Customizing sidebar visibility -| `spotterAnalystSidebar` -| The Analyst selection panel -| 26.8.0.cl +To show only one Analyst without a chat history sidebar, set `enablePastConversationsSidebar` to `false` in the `spotterSidebarConfig` object. -| `spotterDefaultAnalyst` -| The default Spotter row -| 26.10.0.cl +[source,JavaScript] +---- +const spotterEmbed = new SpotterEmbed(document.getElementById('ts-embed'), { + // ...other embed view configuration options -| `spotterAnalystList` -| The Show all Analysts row -| 26.10.0.cl -|=== + // Turn the chat history sidebar off explicitly + spotterSidebarConfig: { + enablePastConversationsSidebar: false, + }, +}); +---- -[NOTE] -==== -An action ID not recognized by the cluster is silently dropped and does not cause an error. You can include all three action IDs even when targeting a cluster that does not yet support one of them. -==== +If a narrow sidebar rail remains visible, for example an expand toggle, a *New chat* icon, or a footer, hide the sidebar shell by adding the following action IDs to `hiddenActions`. These action IDs are available from ThoughtSpot Cloud 26.3.0.cl. -If a narrow sidebar rail (expand toggle, New chat icon, or footer gear icon) remains visible after hiding these three actions, add the following shell-level action IDs. These are supported from cluster version 26.3.0.cl: +* `Action.SpotterSidebarHeader` + +Hides the sidebar title and toggle button. +* `Action.SpotterSidebarToggle` + +Hides the sidebar expand and collapse button. +* `Action.SpotterNewChat` + +Hides the *New chat* button. +* `Action.SpotterSidebarFooter` + +Hides the sidebar footer, which includes the documentation link. +* `Action.SpotterDocs` + +Hides only the documentation or best practices link in the sidebar footer. -[source,javascript] +[source,JavaScript] ---- -hiddenActions: [ - 'spotterAnalystSidebar', - 'spotterDefaultAnalyst', - 'spotterAnalystList', - 'spotterSidebarOpen', - 'spotterSidebarClose', - 'spotterNewConversation', - 'spotterSidebarSettings', -], +const spotterEmbed = new SpotterEmbed(document.getElementById('ts-embed'), { + // ...other embed view configuration options + + // Hide the Analyst switcher and the sidebar shell + hiddenActions: [ + Action.SpotterAnalystSidebar, + Action.SpotterDefaultAnalyst, + Action.SpotterAnalystList, + Action.SpotterSidebarHeader, + Action.SpotterSidebarToggle, + Action.SpotterNewChat, + Action.SpotterSidebarFooter, + ], +}); ---- -=== Starter prompts +If you want to keep the chat history sidebar, with its expand toggle and *New chat* button, set `enablePastConversationsSidebar` to `true` and hide only the Analyst controls described in the previous section. + +To customize the actions available for saved chats and conversation sharing, see xref:customize-spotter-sidebar.adoc#_customizing_sidebar_menu_actions[Customizing the Spotter sidebar panel] and xref:customize-spotter-sharing.adoc[Customizing conversation sharing options]. -Use `starterPrompts` in `SpotterChatViewConfig` to customize the starter prompt pills displayed above the chat input. +=== Customizing the chat interface -[cols="1,1,1,3"] -|=== -| Property | Type | Cluster version | Description +If you want to show only the chat interface, without extra options such as starter prompts or a data source selector, use the options described in the following sections. -| `starterPrompts` -| `StarterPromptsConfig` -| 26.10.0.cl -| Top-level configuration object for Spotter starter prompts. Contains keys: `enable`, `quick`, `research`, `previewData`, and `liveboard`. +==== Hiding the data source selector -| `openSpotterOnLiveboardByDefault` -| boolean -| 26.10.0.cl -| Opens the Spotter chat panel automatically when a Liveboard loads. Default: `true`. Supported in `LiveboardEmbed` and `AppEmbed`. -|=== +To keep users on the data source that you specify, set `hideSourceSelection` to `true`. This hides the data source selector. To show the selected data source but prevent users from changing it, set `disableSourceSelection` to `true` instead. -To show or hide individual starter prompt pills, use the `Action` enum: +[source,JavaScript] +---- +const spotterEmbed = new SpotterEmbed(document.getElementById('ts-embed'), { + // ...other embed view configuration options -[cols="1,3"] -|=== -| Action | Description + // Hide the data source selector + hideSourceSelection: true, +}); +---- -| `Action.QuickSearchPill` -| The Basic Search starter-prompt pill. Opens a card of suggested questions that submit on click. +==== Hiding chat interface controls -| `Action.DeepAnalysisPill` -| The Deep Analysis pill. Fills the chat input with a suggested question without auto-submitting. +To hide other controls in the chat interface, use the following action IDs in `hiddenActions`: -| `Action.DataLiteracyPill` -| The Data Literacy pill. Submits a backend-generated prompt describing the data source. Only its label is customizable. -|=== +* `Action.SpotterChatConnectors` + +Hides the connectors in the chat interface. +* `Action.SpotterChatModeSwitcher` + +Hides the mode switcher in the chat interface. +* `Action.SpotterFeedback` + +Hides the feedback widget. -[source,javascript] ----- -hiddenActions: [ - Action.QuickSearchPill, - Action.DeepAnalysisPill, - Action.DataLiteracyPill, -], ----- +==== Customizing starter prompt pills -[NOTE] -==== -Setting `hideSampleQuestions: true` hides both the generic sample questions and the Analyst's own starter prompts, as they share the same block. This is generally not the intended behavior when embedding a governed Analyst. -==== +Starter prompts are suggested questions that appear as pills near the chat input area. You can show them, change their labels and questions as needed, or hide them from the chat interface. -=== Pre-filling the chat input +Starter prompts are off by default. To turn them on, set `enable` to `true` in the `starterPrompts` object of `spotterChatConfig`. Then use the `starterPrompts` options to customize the pills and their labels. -Use `searchOptions.searchQuery` to pre-fill the prompt. This does not submit the question. To submit it, also fire `HostEvent.SpotterSearch` with `executeSearch: true`. +To show or hide individual prompt pills, use `hiddenActions` with the following action IDs: -[source,javascript] +* `Action.QuickSearchPill` for the *Quick search* pill +* `Action.DeepAnalysisPill` for the *Deep analysis* pill +* `Action.DataLiteracyPill` for the *Know your data* pill + +[source,JavaScript] ---- -new SpotterEmbed(container, { - searchOptions: { - searchQuery: 'What was total revenue last quarter?', - }, - // ... -}).render(); +const spotterEmbed = new SpotterEmbed(document.getElementById('ts-embed'), { + // ...other embed view configuration options + spotterChatConfig: { + starterPrompts: { + enable: true, + quick: { + label: 'Common questions', + questions: [ + { + label: 'Top products', + prompt: 'What are the top products by revenue?', + }, + ], + }, + }, + }, + // Hide the Deep analysis and Know your data pills + hiddenActions: [Action.DeepAnalysisPill, Action.DataLiteracyPill], +}); ---- -[#pinning-conversations] -== Pinning conversations +For more information, see xref:customize-spotter-chat-experience.adoc#_spotter_starter_prompts[Customizing the Spotter chat experience]. + +=== Customizing styles and themes -`SpotterChatPinConfig` lets users pin Spotter conversations so they appear at the top of the sidebar for quick access. Pinning is disabled by default in embedded deployments and must be explicitly enabled. +To customize the styles and theme of the embedded Spotter Analyst to match your app's branding, use the xref:css-customization.adoc[CSS customization framework]. -[cols="1,1,1,3"] -|=== -| Property | Type | Default | Description +=== Customizing app interactions -| `enabled` -| boolean -| `false` -| Enables the pin and unpin actions in the conversation edit menu. Set to `true` to allow users to pin conversations. +To listen to the events emitted by the embedded ThoughtSpot component, use the xref:event-embedEvents.adoc[embed event] handlers. -| `pinLabel` -| string -| System default -| Custom label for the pin action in the conversation edit menu. +To allow your app to trigger actions in the embedded ThoughtSpot component, use the xref:events-hostEvents.adoc[host events]. -| `unpinLabel` -| string -| System default -| Custom label for the unpin action in the conversation edit menu. -|=== +== Render the embedded object -[source,javascript] +[source,JavaScript] ---- -new SpotterEmbed(container, { - spotterSidebarConfig: { - enablePastConversationsSidebar: true, - spotterChatPinConfig: { - enabled: true, - pinLabel: 'Save to top', - unpinLabel: 'Remove from top', - }, - }, - // ... -}).render(); +spotterEmbed.render(); ---- -To listen for pin and unpin events, or to trigger pin state programmatically from the host application, see xref:event-embedEvents.adoc#pin-events[Spotter pin and unpin events] and xref:events-hostEvents.adoc#spotter-pin-host-events[Spotter conversation pin and unpin]. +== Code sample -== New actions in SDK 1.53.0 +[source,JavaScript] +---- +import { + SpotterEmbed, + AuthType, + init, + Action, +} from '@thoughtspot/visual-embed-sdk'; + +// Initialize the ThoughtSpot Visual Embed SDK with your ThoughtSpot URL and authentication type. +init({ + thoughtSpotHost: 'https://{cluster}', // Replace with your ThoughtSpot application URL + authType: AuthType.None, // Use the appropriate AuthType for your setup +}); + +// Find the container element in your HTML where the SpotterEmbed will be rendered. +const container = document.getElementById('ts-embed'); +if (container) { + // Create and configure the SpotterEmbed + const spotterEmbed = new SpotterEmbed(container, { + frameParams: { + height: '100%', // Set the height of the embedded frame + width: '100%', // Set the width of the embedded frame + }, + + // ID of the model to query. For an Analyst that spans multiple models, + // use dataSources: ['{model-guid-1}', '{model-guid-2}'] instead. + worksheetId: '{model-guid}', + + // Specify the Analyst ID + spotterAnalystConfig: { analystId: '{analyst-guid}' }, + + // Turn the chat history sidebar off explicitly + spotterSidebarConfig: { enablePastConversationsSidebar: false }, + + // Hide the controls that switch Analysts + hiddenActions: [ + Action.SpotterAnalystSidebar, + Action.SpotterDefaultAnalyst, + Action.SpotterAnalystList, + ], + + // Hide the data source selector + hideSourceSelection: true, + }); + + // Render the SpotterEmbed in the container. + spotterEmbed.render(); +} +---- -The following `Action` enum members are new in SDK 1.53.0 and are relevant to Analyst embed: +== Verify your embed -[cols="1,3"] -|=== -| Action | Description +* Load the embedded object. + +If the embedding is successful, you'll see the Spotter page for the Analyst that you pinned. +* Verify that the Analyst switcher is hidden and that users can't open another Analyst or the default Spotter. +* Start a chat session, ask a question, and view the results. +* Verify that the customization settings are applied. -| `Action.SpotterChatPin` -| Controls visibility and disabled state of the pin and unpin action in the Spotter conversation edit menu. +If you see a blank screen or an error, see <>. -| `Action.SpotterAnalystList` -| Controls visibility and disabled state of the Show all Analysts row in the Analyst interface. +[#troubleshooting] +== Troubleshooting -| `Action.SpotterDefaultAnalyst` -| Controls visibility and disabled state of the default Spotter analyst entry in the Analyst interface. +[cols="2,3"] +|==== +| Issue | Resolution -| `Action.SpotterOnLiveboard` -| The Spotter button in the Liveboard header. +| The embed doesn't load because of a CSP or CORS error +| Add your host app origin to the CSP Visual Embed hosts and CORS allowlists. An entry matches the whole origin, including the port. For the valid domain formats, see xref:security-settings.adoc#port-protocol[Security settings]. -| `Action.AllLiveboardFilters` -| Shows, hides, or disables all filter surfaces on a Liveboard: filter chips, parameter chips, and cross-filter chips at the Liveboard, tab, and group levels. Parameter and cross-filter chips support hide only and cannot be disabled. +| A ThoughtSpot login form appears, or the embed spins with no error +| There is no session. Check the network tab for a `401` response from `/callosum/v1/session/info`. If you use `AuthType.None`, sign in to the ThoughtSpot instance in another tab. For production instances, ThoughtSpot recommends token-based trusted authentication. For more information, see xref:embed-authentication.adoc[Embed authentication]. -| `Action.EditInputTable` -| Edits an input table used by an Answer directly from the Liveboard. -|=== +| The data source or Analyst can't be found +| Check that the user is signed in to the correct Org, and that the user has view access to the Analyst and its data model. -== Related resources +| The embed doesn't open the Analyst +| Check that the embed has the correct Analyst GUID, and that your ThoughtSpot instance is on version 26.10.0.cl or later. +|==== + +== Additional resources * xref:spotter-analyst-api.adoc[Spotter Analyst API] +* xref:customize-spotter-analysts.adoc[Configure Spotter Analysts] +* xref:customize-spotter-embed.adoc[Customize Spotter embed] +* xref:customize-spotter-chat-experience.adoc[Customizing the Spotter chat experience] +* xref:customize-spotter-sidebar.adoc[Customizing the Spotter sidebar panel] * xref:event-embedEvents.adoc[Embed events reference] * xref:events-hostEvents.adoc[Host events reference] -* xref:customize-spotter-embed.adoc[Customize Spotter embed] +* xref:embed-spotter.adoc[Embed Spotter experience] diff --git a/modules/ROOT/pages/whats-new.adoc b/modules/ROOT/pages/whats-new.adoc index ced52e8fc..bf9e70a2e 100644 --- a/modules/ROOT/pages/whats-new.adoc +++ b/modules/ROOT/pages/whats-new.adoc @@ -76,6 +76,7 @@ Liveboard filters now have a three-tier filter hierarchy : Liveboard level, tab * *Column security rules on Liveboards* + Liveboards that were previously blocked by Column Security Rules (CSR) now open and work normally, with column security fully enforced, including in embedded Liveboards. Filter values from inaccessible columns are masked instead of blocking the Liveboard, and scheduled Liveboard deliveries apply CSR separately for each recipient. For more information, see xref:data-security.adoc#csr-liveboards[Column security rules on Liveboards]. + --- [discrete] From ccd1bf161591367cdaebc47562a2a688a3d83361 Mon Sep 17 00:00:00 2001 From: ShashiSubramanya Date: Thu, 1 Oct 2026 06:56:16 +0530 Subject: [PATCH 30/33] v2 changelog --- modules/ROOT/pages/rest-apiv2-changelog.adoc | 65 ++++++++------------ 1 file changed, 25 insertions(+), 40 deletions(-) diff --git a/modules/ROOT/pages/rest-apiv2-changelog.adoc b/modules/ROOT/pages/rest-apiv2-changelog.adoc index ddb60fd15..5ddf79017 100644 --- a/modules/ROOT/pages/rest-apiv2-changelog.adoc +++ b/modules/ROOT/pages/rest-apiv2-changelog.adoc @@ -10,50 +10,23 @@ This changelog lists the features and enhancements introduced in REST API v2.0. == Version 26.10.0.cl, October 2026 -=== Spotter Analyst API - -Four new endpoints are available for managing Spotter Analysts programmatically. All endpoints are under `/api/rest/2.0/ai/agent/analysts/`. - -[cols="2,4"] -|=== -| Endpoint | Description - -| `POST /api/rest/2.0/ai/agent/analysts/create` -| Creates a Spotter Analyst with a name, description, data sources, and optional instructions, MCP connectors, and starter prompts. Requires `ADMINISTRATION`, `CAN_MANAGE_SPOTTER`, or `CAN_USE_SPOTTER` privilege, plus view access to all referenced sources. Returns the created `Analyst` object including the server-assigned `id`. - -| `POST /api/rest/2.0/ai/agent/analysts/search` -| Returns Analysts visible to the caller. Operates in fetch mode (single Analyst by `analyst_identifier`) or list mode (paginated, ordered by most recently accessed). Supports filtering by ownership type: `ALL`, `CREATED_BY_ME`, or `SHARED_TO_ME`. Requires `ADMINISTRATION`, `CAN_MANAGE_SPOTTER`, or `CAN_USE_SPOTTER`. - -| `POST /api/rest/2.0/ai/agent/analysts/{analyst_identifier}/update` -| Full-replace update of a Spotter Analyst. Omitted optional fields are cleared. Requires ownership or `ADMINISTRATION`/`CAN_MANAGE_SPOTTER` privilege. When new sources are added, they are automatically shared with existing users of the Analyst. - -| `POST /api/rest/2.0/ai/agent/analysts/{analyst_identifier}/delete` -| Permanently deletes a Spotter Analyst. This operation is irreversible. Requires ownership or `ADMINISTRATION`/`CAN_MANAGE_SPOTTER` privilege. -|=== - -For full parameter details, request and response schemas, and code examples, see xref:spotter-analyst-api.adoc[Spotter Analyst API]. - -=== Feature Management API -This release introduces the following new REST API v2.0 endpoints for programmatic feature management. All endpoints are under `/api/rest/2.0/configurations/features/`. - -[cols="2,4"] -|=== -| Endpoint | Description - -| `POST /api/rest/2.0/configurations/features/search` -| Returns feature configurations grouped by feature group. - -| `POST /api/rest/2.0/configurations/features/assignments/update` -| Updates Org assignments for a feature using `ADD`, `REMOVE`, or `REPLACE` operations. +=== Spotter AI APIs -| `POST /api/rest/2.0/configurations/features/values/update` -| Sets feature value at `CLUSTER` or `ORG` scope. -|=== +Spotter Analyst APIs:: +ThoughtSpot introduces the following REST API v2.0 endpoints to manage Spotter Analysts programmatically. -For full parameter details, request and response schemas, and code examples, see xref:feature-management-api.adoc[Feature Management API]. +* `POST /api/rest/2.0/ai/agent/analysts/create` + +Creates a Spotter Analyst with a name, description, data sources, and optional instructions, MCP connectors, and starter prompts. +* `POST /api/rest/2.0/ai/agent/analysts/search` + +Returns the Spotter Analysts visible to the caller. +* `POST /api/rest/2.0/ai/agent/analysts/{analyst_identifier}/update` + +Updates a Spotter Analyst. +* `POST /api/rest/2.0/ai/agent/analysts/{analyst_identifier}/delete` + +Deletes a Spotter Analyst. -=== Update Conversation — `is_pinned` field added +For more information, see xref:spotter-analyst-api.adoc[Spotter Analyst API]. +Pin conversations in the update conversation API:: The `POST /api/rest/2.0/ai/agent/conversations/{conversation_identifier}/update` endpoint now accepts an `is_pinned` boolean field. * Set `is_pinned: true` to pin the conversation to the top of the conversation list. @@ -64,6 +37,18 @@ The `POST /api/rest/2.0/ai/agent/conversations/{conversation_identifier}/update` NOTE: The `title` field has been available since version 26.7.0.cl. The `is_pinned` field is new in version 26.10.0.cl. +=== Feature Management API +This release introduces the following new REST API v2.0 endpoints for programmatic feature management. + +* `POST /api/rest/2.0/configurations/features/search` + +Returns feature configurations grouped by feature group. +* `POST /api/rest/2.0/configurations/features/assignments/update` + +Updates Org assignments for a feature using `ADD`, `REMOVE`, or `REPLACE` operations. +* `POST /api/rest/2.0/configurations/features/values/update` + +Sets feature value at `CLUSTER` or `ORG` scope. + +For more information, see xref:feature-management-api.adoc[Feature Management API]. + == Version 26.9.0.cl, September 2026 === Answer Export API From 7e0db367d3861162aef09fd9c3a71699f566106c Mon Sep 17 00:00:00 2001 From: ShashiSubramanya Date: Thu, 1 Oct 2026 07:58:36 +0530 Subject: [PATCH 31/33] V2 changelog and API updates --- modules/ROOT/pages/authentication.adoc | 84 +++++++++++ .../ROOT/pages/intro-thoughtspot-objects.adoc | 2 + modules/ROOT/pages/rest-apiv2-changelog.adoc | 30 +++- .../ROOT/pages/semantic-integrations-api.adoc | 142 +++++++++--------- .../spotter-agent-conversation-apis.adoc | 33 +++- .../spotter-agent-conversation-mgmt-apis.adoc | 4 +- .../pages/spotter-agent-sharing-apis.adoc | 2 +- 7 files changed, 214 insertions(+), 83 deletions(-) diff --git a/modules/ROOT/pages/authentication.adoc b/modules/ROOT/pages/authentication.adoc index 106bf6c27..ad1cd816c 100644 --- a/modules/ROOT/pages/authentication.adoc +++ b/modules/ROOT/pages/authentication.adoc @@ -589,6 +589,90 @@ If the API request is successful, ThoughtSpot returns a new authentication token } ---- +[#multi-org-tokens] +=== Multi-Org token scope [beta betaBackground]^Beta^ +By default, a token authorizes API requests in a single Org. From 26.10.0.cl, ThoughtSpot users with cluster-level administration privilege can request a token authorized for multiple Orgs by including the optional `scope` object in the token request, and then select the Org for each request using the `X-Org-Selector` header. + +[NOTE] +==== +* This feature is in Beta and is disabled by default. To enable this feature, contact ThoughtSpot Support. +* Only users with cluster administration privileges can generate a multi-Org token. +==== + +==== Supported endpoints + +The `scope` request property is supported on the following token endpoints: + +* `POST /api/rest/2.0/auth/token/full` +* `POST /api/rest/2.0/auth/token/custom` (supports `SPECIFIC_ORGS` only) +* `POST /api/rest/2.0/auth/token/object` + +==== The `scope` request property + +[width="100%" cols="2,4"] +[options="header"] +|===== +|Parameter|Description +|`scope` a|__Object__. Optional. The set of Orgs the token is authorized to operate in, recorded at issuance. Applicable to Tenant Administrators only. Specify the following attributes: + +* `org_scope` + +__String__. Org scope type. Valid values: + +** `SPECIFIC_ORGS`: authorizes the token for the Orgs listed in `org_identifiers`. +** `ALL_MEMBER_ORGS`: authorizes the token for all Orgs the user is a member of. Not supported for custom (ABAC) tokens. + +* `org_identifiers` + +__Array of strings__. ID or name of the Orgs the token is authorized for. Required when `org_scope` is `SPECIFIC_ORGS`; ignored when `org_scope` is `ALL_MEMBER_ORGS`. +|===== + +==== Request example + +[source,cURL] +---- +curl -X POST \ + --url 'https://{ThoughtSpot-Host}/api/rest/2.0/auth/token/full' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + --data-raw '{ + "username": "tsAdminUser", + "secret_key": "{SECRET_KEY}", + "validity_time_in_sec": 86400, + "scope": { + "org_scope": "SPECIFIC_ORGS", + "org_identifiers": ["1", "2", "5"] + } +}' +---- + +==== Response properties + +When a multi-Org token is issued, the `scope` object in the response includes the following additional properties. The same properties appear in the `POST /api/rest/2.0/auth/token/validate` response, so API clients can inspect which Orgs an existing token is authorized for. + +[width="100%" cols="2,4"] +[options="header"] +|===== +|Property|Description +|`scope.org_scope`|__String__. Org scope the token is authorized for: `SPECIFIC_ORGS` or `ALL_MEMBER_ORGS`. This property is absent for a legacy single-Org token. +|`scope.org_ids`|__Array__. The Orgs the token is authorized for when `org_scope` is `SPECIFIC_ORGS`. +|===== + +==== Per-request Org selection + +Each API request made with a multi-Org token selects one Org from the token's authorized set using the `X-Org-Selector` request header: + +[source,cURL] +---- +curl -X POST \ + --url 'https://{ThoughtSpot-Host}/api/rest/2.0/users/search' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {AUTH_TOKEN}' \ + -H 'X-Org-Selector: 2' \ + --data-raw '{}' +---- + +The header selects an Org from the authority the token already holds; it does not grant access to any Org outside the token's scope. Selecting an Org outside the authorized set fails the request. + === Revoking a token To revoke a token, send a `POST` request with the following attributes to the `/api/rest/2.0/auth/token/revoke` endpoint. diff --git a/modules/ROOT/pages/intro-thoughtspot-objects.adoc b/modules/ROOT/pages/intro-thoughtspot-objects.adoc index e2a2d0b9e..2b9394169 100644 --- a/modules/ROOT/pages/intro-thoughtspot-objects.adoc +++ b/modules/ROOT/pages/intro-thoughtspot-objects.adoc @@ -38,6 +38,8 @@ Currently, `obj_id` is supported for the following object types: * Visualizations * Collections * Personalized Views +* Roles +* Template variables === obj_id format and constraints diff --git a/modules/ROOT/pages/rest-apiv2-changelog.adoc b/modules/ROOT/pages/rest-apiv2-changelog.adoc index 5ddf79017..f0f9d3300 100644 --- a/modules/ROOT/pages/rest-apiv2-changelog.adoc +++ b/modules/ROOT/pages/rest-apiv2-changelog.adoc @@ -27,15 +27,21 @@ Deletes a Spotter Analyst. For more information, see xref:spotter-analyst-api.adoc[Spotter Analyst API]. Pin conversations in the update conversation API:: -The `POST /api/rest/2.0/ai/agent/conversations/{conversation_identifier}/update` endpoint now accepts an `is_pinned` boolean field. +The `POST /api/rest/2.0/ai/agent/conversations/{conversation_identifier}/update` endpoint now accepts an `is_pinned` attribute. For more information, see xref:spotter-agent-conversation-mgmt-apis.adoc#update-conversation[Updating a conversation]. -* Set `is_pinned: true` to pin the conversation to the top of the conversation list. -* Set `is_pinned: false` to unpin a previously pinned conversation. -* The operation is idempotent: pinning an already-pinned conversation or unpinning an already-unpinned one succeeds with no side effects. -* Only conversations created with `enable_save_chat: true` can be pinned. -* Both `title` and `is_pinned` can be updated in a single request. +Spotter conversation enhancements:: -NOTE: The `title` field has been available since version 26.7.0.cl. The `is_pinned` field is new in version 26.10.0.cl. +* The `POST /api/rest/2.0/ai/agent/conversation/create` endpoint accepts an optional `analyst_identifier` to start the conversation from a Spotter Analyst, using the Analyst's data sources, instructions, and connectors. `metadata_context` is now required only when `analyst_identifier` is not provided; passing both or neither is rejected. The response includes the Analyst's `analyst_id` when applicable, and the `GET /api/rest/2.0/ai/agent/conversations` list response includes `analyst_id` per conversation. +* The `POST /api/rest/2.0/ai/agent/conversations/{conversation_identifier}/share` endpoint accepts an optional `notify_on_share` boolean. When `true` (default), recipients receive an in-app notification. + +=== TML and metadata type additions + +* The `TEMPLATE_VARIABLE` type is supported on `POST /api/rest/2.0/metadata/tml/export`, `POST /api/rest/2.0/metadata/update-obj-id`, and `POST /api/rest/2.0/metadata/headers/update`. +* The `ROLE` type is supported on `POST /api/rest/2.0/metadata/update-obj-id` and `POST /api/rest/2.0/metadata/headers/update`. The `POST /api/rest/2.0/template/variables/create` and `search` endpoints return `obj_id` in the response. + +=== Databricks semantic integrations + +The `POST /api/rest/2.0/semantic-integrations/create` endpoint accepts the `RDBMS_DATABRICKS` integration type, and the `search` endpoint returns it. === Feature Management API This release introduces the following new REST API v2.0 endpoints for programmatic feature management. @@ -49,6 +55,16 @@ Sets feature value at `CLUSTER` or `ORG` scope. For more information, see xref:feature-management-api.adoc[Feature Management API]. +=== Multi-Org token scope [beta betaBackground]^Beta^ + +Authentication token endpoints now support Org scope at issuance and inspection: + +* The `/api/rest/2.0/auth/token/full`, `/api/rest/2.0/auth/token/custom`, and `/api/rest/2.0/auth/token/object` endpoints accept an optional `scope` object to allow administrators to generate multi-org tokens. +* Token responses, including `POST /api/rest/2.0/auth/token/validate`, retrun `scope/org_scope` and `scope/org_ids`, indicating the Orgs the token is authorized for. +* API requests made with a multi-Org token select the target Org using the `X-Org-Selector` header. The header selects from the Orgs already authorized on the token; it does not grant new access. + +For more information, see xref:authentication.adoc#multi-org-tokens[Multi-Org token scope]. + == Version 26.9.0.cl, September 2026 === Answer Export API diff --git a/modules/ROOT/pages/semantic-integrations-api.adoc b/modules/ROOT/pages/semantic-integrations-api.adoc index 0a9f80a9e..9a232d075 100644 --- a/modules/ROOT/pages/semantic-integrations-api.adoc +++ b/modules/ROOT/pages/semantic-integrations-api.adoc @@ -18,12 +18,6 @@ You can use the semantic integration APIs to automate the following tasks: * Re-import a semantic integration to refresh the ThoughtSpot model after the source Snowflake Semantic View has changed. * Delete a semantic integration and its generated ThoughtSpot model. -[NOTE] -==== -The semantic integration APIs are available on ThoughtSpot Cloud instances from 26.9.0.cl. -Snowflake is the only supported CDW connector type (`RDBMS_SNOWFLAKE`). -==== - == Prerequisites To use these APIs, the authenticated user must have one of the following privileges: @@ -52,31 +46,35 @@ To create a new semantic integration by reading the specified Snowflake Semantic === Request parameters -[width="100%"] +[width="100%" cols="2,4"] [options="header"] |===== -| Parameter | Type | Required | Description -| `connection_identifier` | String | Yes | GUID or name of the Snowflake connection in ThoughtSpot. -| `name` | String | Yes | Display name for the semantic integration. Must be unique. -| `database_name` | String | Yes | Database name in the Snowflake CDW that contains the semantic view. -| `schema_name` | String | Yes | Schema name in the Snowflake CDW that contains the semantic view. -| `semantic_view_name` | String | Yes | Name of the Snowflake Semantic View to integrate. -| `type` | String | Yes | CDW connector type. Only accepted value: `RDBMS_SNOWFLAKE`. -| `description` | String | No | Optional description for the semantic integration. -| `tags` | Array | No | Tag GUIDs or names to associate with the integration. +| Parameter | Description +|`connection_identifier` |__String__. GUID or name of the Snowflake connection in ThoughtSpot. +|`name` |__String__. Display name for the semantic integration. Must be unique. +|`database_name` |__String__. Database name in the Snowflake CDW that contains the semantic view. +|`schema_name` |__String__. Schema name in the Snowflake CDW that contains the semantic view. +|`semantic_view_name` |__String__. Name of the Snowflake Semantic View to integrate. +|`type` a|__String__. CDW connector type. Valid values: + +* `RDBMS_SNOWFLAKE` +* `RDBMS_DATABRICKS` + +|`description` |__String__. Optional. Description of the semantic integration. +|`tags` |__Array__. Optional. Tag GUIDs or names to associate with the integration. |===== === Response fields -[width="100%"] +[width="100%" cols="2,4"] [options="header"] |===== -| Field | Type | Description -| `id` | String | GUID of the newly created semantic integration. -| `name` | String | Display name of the semantic integration. -| `model_id` | String | GUID of the ThoughtSpot data model generated for this integration. -| `model_name` | String | Display name of the generated ThoughtSpot data model. -| `semantic_report` | Object | Per-formula import report. See <<_semantic_report_fields>>. +| Field | Description +|`id` |__String__. GUID of the newly created semantic integration. +|`name` |__String__. Display name of the semantic integration. +|`model_id` |__String__. GUID of the ThoughtSpot data model generated for this integration. +|`model_name` |__String__. Display name of the generated ThoughtSpot data model. +|`semantic_report` |__Object__. Per-formula import report. See <<_semantic_report_fields>>. |===== [#semantic-report-fields] @@ -86,29 +84,29 @@ The `semantic_report` object contains a summary and a list of per-formula import `summary` fields: -[width="100%"] +[width="100%" cols="2,4"] [options="header"] |===== -| Field | Type | Description -| `total` | Integer | Total number of formulas in the Snowflake Semantic View. -| `imported` | Integer | Number of formulas successfully imported. -| `failed` | Integer | Number of formulas that failed to import. -| `skipped` | Integer | Number of formulas that were skipped. +| Field | Description +|`total` |__Integer__. Total number of formulas in the Snowflake Semantic View. +|`imported` |__Integer__. Number of formulas successfully imported. +|`failed` |__Integer__. Number of formulas that failed to import. +|`skipped` |__Integer__. Number of formulas that were skipped. |===== `formulas` array — each entry contains: -[width="100%"] +[width="100%" cols="2,4"] [options="header"] |===== -| Field | Type | Description -| `id` | String | Formula GUID in the generated ThoughtSpot model. -| `name` | String | Formula name. -| `description` | String | Formula description. -| `source_expression` | String | Original CDW expression. -| `translated_formula` | String | Equivalent ThoughtSpot formula expression. -| `import_status` | String | One of `IMPORTED`, `FAILED`, or `SKIPPED`. -| `change_status` | String | One of `NEW`, `UPDATED`, or `UNCHANGED`. Null on initial create (populated by import). +| Field | Description +|`id` |__String__. Formula GUID in the generated ThoughtSpot model. +|`name` |__String__. Formula name. +|`description` |__String__. Formula description. +|`source_expression` |__String__. Original CDW expression. +|`translated_formula` |__String__. Equivalent ThoughtSpot formula expression. +|`import_status` |__String__. One of `IMPORTED`, `FAILED`, or `SKIPPED`. +|`change_status` |__String__. One of `NEW`, `UPDATED`, or `UNCHANGED`. Null on initial create (populated by import). |===== === Example request @@ -169,51 +167,51 @@ To fetch a paginated list of semantic integrations matching the specified criter === Request parameters -[width="100%"] +[width="100%" cols="2,4"] [options="header"] |===== -| Parameter | Type | Required | Description -| `pattern` | String | No | Substring filter to narrow search results by integration name. -| `author_identifiers` | Array | No | Filter by the GUID or username of the user who created the integration. -| `connection_identifiers` | Array | No | Filter by the GUID or name of the Snowflake connection associated with the integration. -| `sort_options` | Object | No | Sort configuration. See <<_sort_options>>. -| `record_offset` | Integer | No | Number of records to skip for pagination. Minimum: 0. Default: 0. -| `record_size` | Integer | No | Maximum number of records to return. Use `0` to return all records. Default: 10. +| Parameter | Description +|`pattern` |__String__. Optional. Substring filter to narrow search results by integration name. +|`author_identifiers` |__Array__. Optional. Filter by the GUID or username of the user who created the integration. +|`connection_identifiers` |__Array__. Optional. Filter by the GUID or name of the Snowflake connection associated with the integration. +|`sort_options` |__Object__. Optional. Sort configuration. See <<_sort_options>>. +|`record_offset` |__Integer__. Optional. Number of records to skip for pagination. Minimum: 0. Default: 0. +|`record_size` |__Integer__. Optional. Maximum number of records to return. Use `0` to return all records. Default: 10. |===== [#sort-options] ==== Sort options -[width="100%"] +[width="100%" cols="2,4"] [options="header"] |===== -| Field | Type | Description -| `field_name` | String | Sort field. One of: `NAME`, `AUTHOR`, `CREATED_TIME`, `MODIFIED_TIME`. -| `order` | String | Sort direction. `ASC` for ascending, `DESC` for descending. +| Field | Description +|`field_name` |__String__. Sort field. One of: `NAME`, `AUTHOR`, `CREATED_TIME`, `MODIFIED_TIME`. +|`order` |__String__. Sort direction. `ASC` for ascending, `DESC` for descending. |===== === Response fields Returns an array of objects, each with the following fields: -[width="100%"] +[width="100%" cols="2,4"] [options="header"] |===== -| Field | Type | Description -| `id` | String | GUID of the semantic integration. -| `name` | String | Display name of the semantic integration. -| `description` | String | Description of the semantic integration. Null if not set. -| `model_id` | String | GUID of the associated ThoughtSpot data model. -| `model_name` | String | Display name of the associated ThoughtSpot data model. -| `import_type` | String | How the semantic definition was sourced. `CDW` for Snowflake Semantic View; `FILE` for file upload. -| `type` | String | CDW connector type. Currently always `RDBMS_SNOWFLAKE`. -| `connection_id` | String | GUID of the Snowflake connection. -| `connection_name` | String | Display name of the Snowflake connection. -| `author_id` | String | GUID of the user who created the integration. -| `author_name` | String | Username of the user who created the integration. -| `creation_time_in_millis` | Float | Creation time in Unix epoch milliseconds. -| `modification_time_in_millis` | Float | Last modification time in Unix epoch milliseconds. -| `tags` | Array | Tags associated with the integration, each with `id` and `name`. +| Field | Description +|`id` |__String__. GUID of the semantic integration. +|`name` |__String__. Display name of the semantic integration. +|`description` |__String__. Description of the semantic integration. Null if not set. +|`model_id` |__String__. GUID of the associated ThoughtSpot data model. +|`model_name` |__String__. Display name of the associated ThoughtSpot data model. +|`import_type` |__String__. How the semantic definition was sourced. `CDW` for Snowflake Semantic View; `FILE` for file upload. +|`type` |__String__. CDW connector type. Either `RDBMS_SNOWFLAKE` or `RDBMS_DATABRICKS`. +|`connection_id` |__String__. GUID of the Snowflake connection. +|`connection_name` |__String__. Display name of the Snowflake connection. +|`author_id` |__String__. GUID of the user who created the integration. +|`author_name` |__String__. Username of the user who created the integration. +|`creation_time_in_millis` |__Float__. Creation time in Unix epoch milliseconds. +|`modification_time_in_millis` |__Float__. Last modification time in Unix epoch milliseconds. +|`tags` |__Array__. Tags associated with the integration, each with `id` and `name`. |===== === Example request @@ -253,11 +251,11 @@ The import operation: === Path parameters -[width="100%"] +[width="100%" cols="2,4"] [options="header"] |===== -| Parameter | Type | Required | Description -| `semantic_integration_identifier` | String | Yes | GUID or name of the semantic integration to re-import. +| Parameter | Description +|`semantic_integration_identifier` |__String__. Path parameter. GUID or name of the semantic integration to re-import. |===== === Response fields @@ -336,11 +334,11 @@ Deletion is permanent and cannot be undone. If you need to restore the integrati === Path parameters -[width="100%"] +[width="100%" cols="2,4"] [options="header"] |===== -| Parameter | Type | Required | Description -| `semantic_integration_identifier` | String | Yes | GUID or name of the semantic integration to delete. +| Parameter | Description +|`semantic_integration_identifier` |__String__. Path parameter. GUID or name of the semantic integration to delete. |===== === Example request diff --git a/modules/ROOT/pages/spotter-agent-conversation-apis.adoc b/modules/ROOT/pages/spotter-agent-conversation-apis.adoc index 1e094a6aa..4aa924ef6 100644 --- a/modules/ROOT/pages/spotter-agent-conversation-apis.adoc +++ b/modules/ROOT/pages/spotter-agent-conversation-apis.adoc @@ -15,7 +15,14 @@ For information about receiving responses as a real-time event stream, see xref: The `/api/rest/2.0/ai/agent/conversation/create` API endpoint creates a new conversation session with Spotter Agent for a specific or multi-data context and returns a conversation ID. === Request parameters -The request body must include the `metadata_context`. REST API clients must have at least view access to the data source objects specified in the API request to create a conversation session and use it for subsequent queries. +The request body must include the conversation context with exactly one of the following parameters: + +* `metadata_context` to set the data context directly. +* `analyst_identifier` to start the conversation from a Spotter Analyst. + +Passing both, or neither, is rejected with a `422` error. + +REST API clients must have at least view access to the data source objects specified in the API request to create a conversation session and use it for subsequent queries. [width="100%" cols="2,4"] [options='header'] @@ -33,6 +40,8 @@ To set multi-data context, use `data_source_identifiers`. ** `data_source` [.version-badge.deprecated]#Deprecated# + This option is deprecated in 26.5.0.cl. ThoughtSpot recommends using the `DATA_SOURCE` with `data_source_context` and data source IDs instead. +|`analyst_identifier` |__String__. Optional. Unique identifier of a Spotter Analyst to start the conversation from. The conversation uses the Analyst's configuration, including its data sources, agent instructions, and connectors, so `metadata_context` must be omitted. For information about Analyst management endpoints, see xref:spotter-analyst-api.adoc[Spotter Analyst API]. + |`conversation_settings` a|__Optional__. Defines additional parameters for the conversation context. You can set any of the following attributes as needed: * `enable_contextual_change_analysis` + @@ -86,6 +95,23 @@ curl -X POST \ }' ---- +Start a conversation from a Spotter Analyst:: + +[source,cURL] +---- +curl -X POST \ + --url 'https://{ThoughtSpot-Host}/api/rest/2.0/ai/agent/conversation/create' \ + -H 'Accept: application/json' \ + -H 'Content-Type: application/json' \ + -H 'Authorization: Bearer {AUTH_TOKEN}' \ + --data-raw '{ + "analyst_identifier": "{analyst-guid}", + "conversation_settings": { + "enable_save_chat": true + } +}' +---- + For multi-data source context:: [source,cURL] @@ -119,7 +145,8 @@ If the API request is successful, the API returns the conversation ID and identi ---- { "conversation_id": "wwHQ5j8O8dQC", - "conversation_identifier": "wwHQ5j8O8dQC" + "conversation_identifier": "wwHQ5j8O8dQC", + "analyst_id": "9f8e7d6c-5b4a-3210-fedc-ba9876543210" } ---- @@ -127,6 +154,8 @@ If the API request is successful, the API returns the conversation ID and identi Use this for all subsequent message calls. * `conversation_id` [.version-badge.deprecated]#Deprecated# + Returns the same value as `conversation_identifier`. +* `analyst_id` + +If the conversation context uses a Spotter Analyst agent, the API endpoint returns the `analyst_id` in response. The value is `null` otherwise. == Send queries to a conversation session diff --git a/modules/ROOT/pages/spotter-agent-conversation-mgmt-apis.adoc b/modules/ROOT/pages/spotter-agent-conversation-mgmt-apis.adoc index da468027e..1d83c24c1 100644 --- a/modules/ROOT/pages/spotter-agent-conversation-mgmt-apis.adoc +++ b/modules/ROOT/pages/spotter-agent-conversation-mgmt-apis.adoc @@ -312,6 +312,7 @@ Each item in `conversations` represents a saved conversation. |`updated_at`|__String__. Timestamp of when the conversation was last updated. |`data_source_identifiers` a|__Array of strings__. Unique identifiers of the data sources associated with the conversation. |`data_source_names` a|`DataSourceEntry[]`. Display names and identifiers for the data sources associated with the conversation. +|`analyst_id`|__String__. Unique identifier of the Spotter Analyst the conversation was started from. The value is `null` for conversations not started from an Analyst. |===== ==== DataSourceEntry @@ -460,7 +461,8 @@ Only conversations created with `enable_save_chat: true` can be pinned. Unsaved |Parameter|Description |`conversation_identifier`|__String__. Path parameter. Unique identifier of the conversation to update. |`title`|__String__. Form parameter to include in the request body. To rename the display title of the conversation, specify the title string. -|`is_pinned`|__Boolean__. When set to `true`, it pins the conversation for the user. Pinned conversations are surfaced first in `getConversationList`. Set to true to pin the conversation, false to unpin it, or omit to leave the pinned state unchanged. Applying the state the conversation is already in is a no-op success. +|`is_pinned`|__Boolean__. When set to `true`, it pins the conversation for the user. Pinned conversations are surfaced first in `getConversationList`. +Set to `true` to pin the conversation, `false` to unpin a chat, or omit to leave the pinned state unchanged. Only conversations created with `enable_save_chat: true` can be pinned. |===== ==== API request example diff --git a/modules/ROOT/pages/spotter-agent-sharing-apis.adoc b/modules/ROOT/pages/spotter-agent-sharing-apis.adoc index 961315f26..caaac29e4 100644 --- a/modules/ROOT/pages/spotter-agent-sharing-apis.adoc +++ b/modules/ROOT/pages/spotter-agent-sharing-apis.adoc @@ -58,7 +58,7 @@ Do not include the same principal identifiers in both `grant` and `revoke` array | `grant` |__Array of strings__. Array of principals to grant access to the conversation specified in the request. Specify `principal_identifier` and `principal_type`. Specify the principal type, name or GUID of the intended recipients. All recipients are granted a `READ_ONLY` access. | `revoke` |__Array of strings__. Principals to revoke access from. Specify `principal_identifier` and `principal_type`. Specify the principal type, name or GUID of the recipients to revoke access from. | `refresh_shared_content` |__Boolean__. When set to `true`, ThoughtSpot regenerates the shared view from the latest conversation state, even if a shared view already exists. When `false`, reuses the existing shared view. Default is `false`. -//| `notify_on_share` |__Boolean__. When set to `true`, ThoughtSpot sends an in-app notification to the recipients of the shared content. Default is `true`. Available from 26.10.0.cl. +| `notify_on_share` |__Boolean__. When set to `true`, ThoughtSpot sends an in-app notification to the recipients of the shared content. Default is `true`. |===== === Request examples From 9bbfc2fe73199a65677ea1a01a009ab50068ceb7 Mon Sep 17 00:00:00 2001 From: ShashiSubramanya Date: Thu, 1 Oct 2026 11:00:57 +0530 Subject: [PATCH 32/33] changelog, multi-org token and other edits --- modules/ROOT/pages/authentication.adoc | 114 ++++++++++++------ modules/ROOT/pages/rest-api-csharp-sdk.adoc | 1 + modules/ROOT/pages/rest-api-java-sdk.adoc | 1 + modules/ROOT/pages/rest-api-python-sdk.adoc | 1 + .../ROOT/pages/rest-api-sdk-typescript.adoc | 1 + modules/ROOT/pages/rest-apiv2-changelog.adoc | 4 +- 6 files changed, 81 insertions(+), 41 deletions(-) diff --git a/modules/ROOT/pages/authentication.adoc b/modules/ROOT/pages/authentication.adoc index ad1cd816c..6e72126ab 100644 --- a/modules/ROOT/pages/authentication.adoc +++ b/modules/ROOT/pages/authentication.adoc @@ -153,6 +153,7 @@ __Optional__ |__Nullable__. `ENABLE` or `DISABLE` authentication for a particular Org. When enabled, a new org-level access token is generated if one does not exist. When disabled, the existing org-level access token is revoked. |`org_identifier` +|__String__. Name or ID of the Org for which to enable or disable trusted authentication. Specify this attribute within the `org_preferences` array. |===== @@ -556,42 +557,9 @@ curl -X POST \ If `auto_create` is set to `true` and the username specified in the API request already exists in ThoughtSpot, the `/api/rest/2.0/auth/token/custom` API does not update user properties such as display name, email, Org, or group assignments. ==== -=== Generating a session token -To generate a new authentication token for an existing authenticated session, send a `GET` request to `/api/rest/2.0/auth/session/token`. This endpoint mints a fresh bearer token valid for 24 hours. It does not return the token currently held by the caller's session, but issues a new token derived from the authenticated session context. - -[NOTE] -==== -Use this endpoint when your integration needs a new token without requiring the user to re-authenticate. If you need a token with a specific expiry or security scope, use the `POST /api/rest/2.0/auth/token/full`, `POST /api/rest/2.0/auth/token/custom`, or `POST /api/rest/2.0/auth/token/object` endpoints instead. -==== - -==== Example request - -.cURL -[source,cURL] ----- -curl -X GET \ - --url 'https://{ThoughtSpot-host}/api/rest/2.0/auth/session/token' \ - -H 'Accept: application/json' ----- - -==== Example response - -If the API request is successful, ThoughtSpot returns a new authentication token. The `expiration_time_in_millis` value reflects the 24-hour validity of the newly issued token from the time of the request. - -[source,JSON] ----- -{ - "token": "{AUTH_TOKEN}", - "creation_time_in_millis": 1704471154477, - "expiration_time_in_millis": 1704557554477, - "valid_for_user_id": "59481331-ee53-42be-a548-bd87be6ddd4a", - "valid_for_username": "tsadmin" -} ----- - [#multi-org-tokens] -=== Multi-Org token scope [beta betaBackground]^Beta^ -By default, a token authorizes API requests in a single Org. From 26.10.0.cl, ThoughtSpot users with cluster-level administration privilege can request a token authorized for multiple Orgs by including the optional `scope` object in the token request, and then select the Org for each request using the `X-Org-Selector` header. +=== Multi-Org tokens [beta betaBackground]^Beta^ +By default, a token authorizes API requests in a single Org. From 26.10.0.cl, ThoughtSpot users with cluster administration privileges can request a token authorized for multiple Orgs by including the optional `scope` object in the token request, and then select the Org for each request using the `X-Org-Selector` header. [NOTE] ==== @@ -613,7 +581,7 @@ The `scope` request property is supported on the following token endpoints: [options="header"] |===== |Parameter|Description -|`scope` a|__Object__. Optional. The set of Orgs the token is authorized to operate in, recorded at issuance. Applicable to Tenant Administrators only. Specify the following attributes: +|`scope` a|__Object__. Optional. The set of Orgs the token is authorized to operate in, recorded at issuance. Requires cluster administration privileges. Specify the following attributes: * `org_scope` + __String__. Org scope type. Valid values: @@ -626,11 +594,12 @@ __Array of strings__. ID or name of the Orgs the token is authorized for. Requir |===== ==== Request example +A multi-Org token request replaces `org_id` with the `scope` object. The issued token is authorized for every Org in the requested set, and each API request selects its target Org with the `X-Org-Selector` header. [source,cURL] ---- curl -X POST \ - --url 'https://{ThoughtSpot-Host}/api/rest/2.0/auth/token/full' \ + --url 'https://{ThoughtSpot-Host}/api/rest/2.0/auth/token/full' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ --data-raw '{ @@ -644,9 +613,44 @@ curl -X POST \ }' ---- +[NOTE] +The `scope` object in a single-Org token response carries no `org_scope` or `org_ids` properties. API requests made with this token always execute in the Org the token was issued for; the `X-Org-Selector` header is not required. + ==== Response properties +When a multi-Org token is issued, the `scope` object in the response includes the following additional properties. + +[source,JSON] +---- +{ + "token": "{AUTH_TOKEN}", + "creation_time_in_millis": 1675129264089, + "expiration_time_in_millis": 1675129564089, + "scope": { + "access_type": "FULL", + "org_id": 1, + "metadata_id": null, + "org_scope": "SPECIFIC_ORGS", + "org_ids": [ + { + "id": 1, + "name": "Org-Finance" + }, + { + "id": 2, + "name": "Org-Sales" + }, + { + "id": 5, + "name": "Org-Marketing" + } + ] + }, + "valid_for_user_id": "59a122dc0-38d7-43e7-bb90-86f724c7b602", + "valid_for_username": "tsAdminUser" +} +---- -When a multi-Org token is issued, the `scope` object in the response includes the following additional properties. The same properties appear in the `POST /api/rest/2.0/auth/token/validate` response, so API clients can inspect which Orgs an existing token is authorized for. +The same properties appear in the `POST /api/rest/2.0/auth/token/validate` response, so API clients can inspect which Orgs an existing token is authorized for. [width="100%" cols="2,4"] [options="header"] @@ -657,7 +661,6 @@ When a multi-Org token is issued, the `scope` object in the response includes th |===== ==== Per-request Org selection - Each API request made with a multi-Org token selects one Org from the token's authorized set using the `X-Org-Selector` request header: [source,cURL] @@ -673,6 +676,39 @@ curl -X POST \ The header selects an Org from the authority the token already holds; it does not grant access to any Org outside the token's scope. Selecting an Org outside the authorized set fails the request. +=== Generating a session token +To generate a new authentication token for an existing authenticated session, send a `GET` request to `/api/rest/2.0/auth/session/token`. This endpoint mints a fresh bearer token valid for 24 hours. It does not return the token currently held by the caller's session, but issues a new token derived from the authenticated session context. + +[NOTE] +==== +Use this endpoint when your integration needs a new token without requiring the user to re-authenticate. If you need a token with a specific expiry or security scope, use the `POST /api/rest/2.0/auth/token/full`, `POST /api/rest/2.0/auth/token/custom`, or `POST /api/rest/2.0/auth/token/object` endpoints instead. +==== + +==== Example request + +.cURL +[source,cURL] +---- +curl -X GET \ + --url 'https://{ThoughtSpot-host}/api/rest/2.0/auth/session/token' \ + -H 'Accept: application/json' +---- + +==== Example response + +If the API request is successful, ThoughtSpot returns a new authentication token. The `expiration_time_in_millis` value reflects the 24-hour validity of the newly issued token from the time of the request. + +[source,JSON] +---- +{ + "token": "{AUTH_TOKEN}", + "creation_time_in_millis": 1704471154477, + "expiration_time_in_millis": 1704557554477, + "valid_for_user_id": "59481331-ee53-42be-a548-bd87be6ddd4a", + "valid_for_username": "tsadmin" +} +---- + === Revoking a token To revoke a token, send a `POST` request with the following attributes to the `/api/rest/2.0/auth/token/revoke` endpoint. diff --git a/modules/ROOT/pages/rest-api-csharp-sdk.adoc b/modules/ROOT/pages/rest-api-csharp-sdk.adoc index ce6832f20..30ff3fd77 100644 --- a/modules/ROOT/pages/rest-api-csharp-sdk.adoc +++ b/modules/ROOT/pages/rest-api-csharp-sdk.adoc @@ -323,6 +323,7 @@ await api.ApplyConfigurationAsync(newConfig); [options="header"] |==== |ThoughtSpot release|Recommended SDK version +|ThoughtSpot Cloud: 26.10.0.cl|v2.29.0 or later |ThoughtSpot Cloud: 26.9.0.cl|v2.28.0 or later |ThoughtSpot Cloud 26.8.0.cl|v2.27.1 or later |==== diff --git a/modules/ROOT/pages/rest-api-java-sdk.adoc b/modules/ROOT/pages/rest-api-java-sdk.adoc index 31ef6730b..b9060e5b6 100644 --- a/modules/ROOT/pages/rest-api-java-sdk.adoc +++ b/modules/ROOT/pages/rest-api-java-sdk.adoc @@ -281,6 +281,7 @@ Note the recommendation of Java SDK: [options='header'] |==== |ThoughtSpot release version|Supported SDK version +a|ThoughtSpot Cloud: 26.10.0.cl|v2.29.0 or later |ThoughtSpot Cloud: 26.9.0.cl|v2.28.0 or later |ThoughtSpot Cloud: 26.8.0.cl|v2.27.1 or later |ThoughtSpot Cloud: 26.7.0.cl|v2.26.0 or later diff --git a/modules/ROOT/pages/rest-api-python-sdk.adoc b/modules/ROOT/pages/rest-api-python-sdk.adoc index 6a1cf354b..0e13c5903 100644 --- a/modules/ROOT/pages/rest-api-python-sdk.adoc +++ b/modules/ROOT/pages/rest-api-python-sdk.adoc @@ -373,6 +373,7 @@ on every request. [options='header'] |==== |ThoughtSpot release version|Recommended SDK version +a|ThoughtSpot Cloud: 26.10.0.cl|v2.29.0 or later a|ThoughtSpot Cloud: 26.9.0.cl|v2.28.0 or later a|ThoughtSpot Cloud: 26.8.0.cl | v2.27.1 or later a|ThoughtSpot Cloud: 26.7.0.cl | v2.26.0 or later diff --git a/modules/ROOT/pages/rest-api-sdk-typescript.adoc b/modules/ROOT/pages/rest-api-sdk-typescript.adoc index ddcae33f9..24e8eef4a 100644 --- a/modules/ROOT/pages/rest-api-sdk-typescript.adoc +++ b/modules/ROOT/pages/rest-api-sdk-typescript.adoc @@ -201,6 +201,7 @@ const test = async () => { [options='header'] |==== |ThoughtSpot release version|Recommended SDK version +|ThoughtSpot Cloud: 26.10.0.cl|v2.29.0 or later |ThoughtSpot Cloud: 26.9.0.cl|v2.28.0 or later |ThoughtSpot Cloud: 26.8.0.cl|v2.27.1 or later |ThoughtSpot Cloud: 26.7.0.cl|v2.26.0 or later diff --git a/modules/ROOT/pages/rest-apiv2-changelog.adoc b/modules/ROOT/pages/rest-apiv2-changelog.adoc index f0f9d3300..91b0afe7c 100644 --- a/modules/ROOT/pages/rest-apiv2-changelog.adoc +++ b/modules/ROOT/pages/rest-apiv2-changelog.adoc @@ -55,7 +55,7 @@ Sets feature value at `CLUSTER` or `ORG` scope. For more information, see xref:feature-management-api.adoc[Feature Management API]. -=== Multi-Org token scope [beta betaBackground]^Beta^ +=== Multi-Org tokens [beta betaBackground]^Beta^ Authentication token endpoints now support Org scope at issuance and inspection: @@ -63,7 +63,7 @@ Authentication token endpoints now support Org scope at issuance and inspection: * Token responses, including `POST /api/rest/2.0/auth/token/validate`, retrun `scope/org_scope` and `scope/org_ids`, indicating the Orgs the token is authorized for. * API requests made with a multi-Org token select the target Org using the `X-Org-Selector` header. The header selects from the Orgs already authorized on the token; it does not grant new access. -For more information, see xref:authentication.adoc#multi-org-tokens[Multi-Org token scope]. +For more information, see xref:authentication.adoc#multi-org-tokens[Multi-Org tokens]. == Version 26.9.0.cl, September 2026 From c7fa74f3fdfa83b8defd1816b0bc2d8f6d2e4508 Mon Sep 17 00:00:00 2001 From: Rani Gangwar Date: Thu, 1 Oct 2026 11:15:10 +0530 Subject: [PATCH 33/33] changed deprecation for IAMv1 --- modules/ROOT/pages/deprecated-features.adoc | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/modules/ROOT/pages/deprecated-features.adoc b/modules/ROOT/pages/deprecated-features.adoc index a6f33608b..b5b15af48 100644 --- a/modules/ROOT/pages/deprecated-features.adoc +++ b/modules/ROOT/pages/deprecated-features.adoc @@ -14,6 +14,7 @@ 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#IAMv1[IAMv1] a| ThoughtSpot Cloud 26.12.0.cl and later |December 2026 | December 2026 a|xref:deprecated-features.adoc#liveboardDiscoverable[Liveboard and answer discoverability] a|ThoughtSpot Cloud 26.2.0.cl and later | February 2026 | August 2026 a|xref:deprecated-features.adoc#everynmins[Minute-level schedule frequency] @@ -42,11 +43,6 @@ a|REST API v2 + * ThoughtSpot Cloud 10.4.0.cl and later|November 2024 a| September 2025 -|xref:deprecated-features.adoc#IAMv1[IAMv1] a| - -* ThoughtSpot Cloud 10.8.0.cl and later - -|November 2024 | June 2025 __(tentative)__ |xref:deprecated-features.adoc#_search_assist[Search Assist] a| * Application UI and Visual Embed Playground + @@ -274,10 +270,10 @@ Note that the `connection_identifier` in both these endpoints is a path paramete [#IAMv1] == IAMv1 -Identity and Access Management (IAMv1) will be deprecated for all ThoughtSpot embedded customers tentatively in 10.8.0.cl. IAMv2 will be enabled on ThoughtSpot instances during maintenance windows from 10.4.0.cl onwards. +Identity and Access Management (IAMv1) will be deprecated for all ThoughtSpot embedded customers. Effective from:: -* ThoughtSpot Cloud 10.8.0.cl +* ThoughtSpot Cloud 26.12.0.cl === Recommended action