Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
f457426
docs(26.10.0.cl): add Spotter Analyst API reference page [SCAL-317811]
ShashiSubramanya Sep 15, 2026
f67361a
docs(26.10.0.cl): add Feature Management API reference page [SCAL-319…
ShashiSubramanya Sep 15, 2026
9dd6ea8
docs(26.10.0.cl): add Embed Spotter Analyst page [SCAL-317811]
ShashiSubramanya Sep 15, 2026
21a16ab
docs(26.10.0.cl): add October 2026 What's New section [SCAL-317811, S…
ShashiSubramanya Sep 15, 2026
bd6b44b
docs(26.10.0.cl): add SDK v1.53.0 changelog entry [SCAL-317811, SCAL-…
ShashiSubramanya Sep 15, 2026
4e1b2ff
docs(26.10.0.cl): add SDK v1.53.0 changelog entry [SCAL-317811, SCAL-…
ShashiSubramanya Sep 15, 2026
edc0da1
docs(26.10.0.cl): add REST API v2.0 changelog entry [SCAL-317811, SCA…
ShashiSubramanya Sep 15, 2026
805eb3e
docs(26.10.0.cl): add REST API v2.0 changelog entry [SCAL-317811, SCA…
ShashiSubramanya Sep 15, 2026
790df80
docs(26.10.0.cl): add Spotter pin EmbedEvents and scoped filter event…
ShashiSubramanya Sep 15, 2026
a986982
docs(26.10.0.cl): add Spotter pin HostEvents, GetGroups, OpenParamete…
ShashiSubramanya Sep 15, 2026
c51df1f
docs(26.10.0.cl): add Spotter pin EmbedEvents and scoped filter event…
ShashiSubramanya Sep 15, 2026
d7ffb9b
docs(26.10.0.cl): add Spotter pin HostEvents, GetGroups, OpenParamete…
ShashiSubramanya Sep 15, 2026
0adf76e
docs(26.10.0.cl): fix whats-new truncation — write full merged file w…
ShashiSubramanya Sep 15, 2026
4595b14
whats new edit
ShashiSubramanya Sep 15, 2026
e02731f
indentation issue fix
ShashiSubramanya Sep 15, 2026
55c78b6
edits
rani2655 Sep 23, 2026
1f75842
more edits
rani2655 Sep 23, 2026
4d49906
review edits
rani2655 Sep 23, 2026
093f7a0
updates to lb filters
rani2655 Sep 23, 2026
ad96d81
updates to lb filters
rani2655 Sep 23, 2026
d8dcb61
csr updates
rani2655 Sep 23, 2026
2608b78
lb csr
rani2655 Sep 23, 2026
8340e46
lb csr
rani2655 Sep 23, 2026
0374673
edited whats new
rani2655 Sep 24, 2026
1840a08
typos
rani2655 Sep 28, 2026
bb53b1b
Siddhant's feedback
rani2655 Sep 28, 2026
d61a02c
spotter analyst updates
ShashiSubramanya Sep 30, 2026
7746470
remove EA lable for lb cache
rani2655 Sep 30, 2026
56003c4
spotter and other updates
ShashiSubramanya Sep 30, 2026
ccd1bf1
v2 changelog
ShashiSubramanya Oct 1, 2026
7e0db36
V2 changelog and API updates
ShashiSubramanya Oct 1, 2026
9bbfc2f
changelog, multi-org token and other edits
ShashiSubramanya Oct 1, 2026
c7fa74f
changed deprecation for IAMv1
rani2655 Oct 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 99 additions & 0 deletions modules/ROOT/pages/api-changelog.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,105 @@

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

[width="100%", cols="1,4"]
|====
|[tag greenBackground]#NEW#
a|
[discrete]
===== 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]
===== Spotter embedding

`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].

`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]
===== Liveboards in embedded view
The SDK includes the following enhancements for the Liveboards in your embedded app.

* `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.

|[tag greenBackground]#NEW#
a|
[discrete]
===== Action IDs for embedded Spotter and Liveboard interfaces

The following `Action` enum members are added in this release:

* `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]
===== Events

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.

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 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.GetParameters`
* `HostEvent.UpdateParameters`

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

[width="100%" cols="1,4"]
Expand Down
120 changes: 120 additions & 0 deletions modules/ROOT/pages/authentication.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -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.

|=====

Expand Down Expand Up @@ -556,6 +557,125 @@ 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.
====

[#multi-org-tokens]
=== 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]
====
* 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. Requires cluster administration privileges. 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
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' \
-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"]
}
}'
----

[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"
}
----

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.

=== 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.

Expand Down
1 change: 1 addition & 0 deletions modules/ROOT/pages/common/nav-embedding.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down
2 changes: 2 additions & 0 deletions modules/ROOT/pages/common/nav-in-product-help.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down Expand Up @@ -236,6 +237,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^]
Expand Down
2 changes: 2 additions & 0 deletions modules/ROOT/pages/common/nav-rest-api.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand All @@ -37,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]
Expand Down
16 changes: 8 additions & 8 deletions modules/ROOT/pages/customize-spotter-analysts.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@ 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:

[source,JavaScript]
----
const embed = new SpotterEmbed("#embed", {
// ...other Spotter embed configuration options
disabledActions: [
hiddenActions: [
Action.SpotterAnalystSidebar,
],
});
Expand All @@ -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.
|===

Expand All @@ -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,
],
});
----
Expand Down
4 changes: 2 additions & 2 deletions modules/ROOT/pages/customize-spotter-sharing.adoc
Original file line number Diff line number Diff line change
@@ -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.

Expand Down
34 changes: 33 additions & 1 deletion modules/ROOT/pages/customize-spotter-sidebar.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -90,14 +90,44 @@ 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:

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]
Expand All @@ -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]
Expand Down
Loading