diff --git a/.env.sample b/.env.sample index f21de7484..79dd000ed 100644 --- a/.env.sample +++ b/.env.sample @@ -3,3 +3,5 @@ GATSBY_ALGOLIA_SEARCH_KEY= ALGOLIA_ADMIN_KEY= GATSBY_CLOUDFLARE_URL= BUILD_ENV=LOCAL + + diff --git a/modules/ROOT/pages/abac_rls-variables.adoc b/modules/ROOT/pages/abac_rls-variables.adoc index 66bf24e44..deb0c734b 100644 --- a/modules/ROOT/pages/abac_rls-variables.adoc +++ b/modules/ROOT/pages/abac_rls-variables.adoc @@ -413,7 +413,7 @@ Set the `response_content` parameter to `METADATA_AND_VALUES` to see the values ---- { "record_offset": 0, - "record_size": -1, + "record_size": 50, "response_content": "METADATA_AND_VALUES" } ---- diff --git a/modules/ROOT/pages/api-changelog.adoc b/modules/ROOT/pages/api-changelog.adoc index e37854c94..cb2867e9c 100644 --- a/modules/ROOT/pages/api-changelog.adoc +++ b/modules/ROOT/pages/api-changelog.adoc @@ -40,6 +40,8 @@ Enables the xref:embed-pinboard.adoc#_liveboard_grouping_and_styling[Liveboard s * `isEnhancedFilterInteractivityEnabled` + Enables interactive filter chips that allow users to add, update, or remove filters in an embedded Liveboard. +For more information, see xref:embed-pinboard.adoc#common-customizations[Common customization options in Liveboard embedding]. + |[tag greenBackground]#NEW FEATURE# a| [discrete] diff --git a/modules/ROOT/pages/api-user-management.adoc b/modules/ROOT/pages/api-user-management.adoc index c5624f897..d327af112 100644 --- a/modules/ROOT/pages/api-user-management.adoc +++ b/modules/ROOT/pages/api-user-management.adoc @@ -2,7 +2,7 @@ :toc: true :toclevels: 3 -:page-title: Users and group privileges +:page-title: Users and groups :page-pageid: api-user-management :page-description: You can manage users and user groups using REST APIs @@ -84,7 +84,7 @@ To create a user in the `SUSPENDED` state, use one of the following API endpoint To update user status from `ACTIVE` or `PENDING` to `SUSPENDED`, or reactivate a `SUSPENDED` user to the ACTIVE or PENDING state, use one of the following API endpoints: -* +++POST /api/rest/2.0/users/{user_identifier}/update+++ (Rest API v2) +* +++POST /api/rest/2.0/users/{user_identifier}/update+++ (Rest API v2) * xref:user-api.adoc#update-user[PUT /tspublic/v1/user/{userid}] (Rest API v1) To deactivate an `ACTIVE` user, use one of these API endpoints: @@ -101,12 +101,12 @@ To activate an `INACTIVE` user account, use one of these API endpoints: //// There is also a *Unsuspend user* button on the *Users* dashboard of the *Admin* page. This button is available for all users in the SUSPENDED state. -The user’s state will transition from SUSPENDED to ACTIVE or PENDING on clicking *Unsuspend user*. +The user's state will transition from SUSPENDED to ACTIVE or PENDING on clicking *Unsuspend user*. image::./images/unsuspend.png[Unsuspended state] //// -=== User migration to IAMv2 +== User migration to IAMv2 ThoughtSpot is gradually migrating its users to link:https://docs.thoughtspot.com/cloud/latest/okta-iam[Identity and Access Management v2 (IAMv2), window=_blank] to provide a more secure login and authentication experience through internal authentication with Okta. The following are some of the important points to note with this upgrade: @@ -121,7 +121,6 @@ To create a user: * +++POST /api/rest/2.0/users/create+++ (Rest API v2) * xref:user-api.adoc#create-user[POST /tspublic/v1/user] (Rest API v1) - To update user details: * +++POST /api/rest/2.0/users/{user_identifier}/update+++ (Rest API v2) @@ -135,40 +134,20 @@ If you rename an SSO user through the REST API and that user then logs in throug * If Just-in-Time (JIT) provisioning is enabled, ThoughtSpot creates a new duplicate account. The duplicate account does not inherit the original user's content, groups, or permissions. * If JIT provisioning is disabled, the user cannot log in. - -To safely update the username of an SSO user: - -. Update the username in your IdP. -. Before the user logs in again, update the username in ThoughtSpot to match the new value using the REST API or Admin UI. - -Both updates must be complete before the user's next SSO login. -The order of the two steps can be reversed — you may update ThoughtSpot first and the IdP second — provided the user does not log in during the interval between the two changes. - -For SSO users, ThoughtSpot derives email address and display name directly from the IdP. Update these attributes in your IdP only. -ThoughtSpot automatically reflects the new values when the user next logs in through SSO. -Do not use the REST API or the Admin UI to update the email address or display name of an SSO user. - -[NOTE] ==== -Updating the username of an SSO user, `account_type` set to `SAML_USER` or `OIDC_USER`, requires changes in both the IdP and ThoughtSpot. -If you rename an SSO user through the REST API and that user then logs in through the IdP: - -* If Just-in-Time (JIT) provisioning is enabled, ThoughtSpot creates a new duplicate account. The duplicate account does not inherit the original user's content, groups, or permissions. -* If JIT provisioning is disabled, the user cannot log in. - -To safely update the username of an SSO user: +To update the username of an SSO user: . Update the username in your IdP. . Before the user logs in again, update the username in ThoughtSpot to match the new value using the REST API or Admin UI. Both updates must be complete before the user's next SSO login. -The order of the two steps can be reversed — you may update ThoughtSpot first and the IdP second — provided the user does not log in during the interval between the two changes. +The order of the two steps can be reversed. You may update ThoughtSpot first and the IdP second, provided the user does not log in during the interval between the two changes. For SSO users, ThoughtSpot derives email address and display name directly from the IdP. Update these attributes in your IdP only. ThoughtSpot automatically reflects the new values when the user next logs in through SSO. Do not use the REST API or the Admin UI to update the email address or display name of an SSO user. - +==== For users who authenticate directly with ThoughtSpot (not through an external IdP), you can update username, email address, and display name using the REST API or Admin UI. No IdP coordination is required for local users. @@ -237,7 +216,7 @@ ThoughtSpot also has a default group called `All`. When you create new users in == Roles If Role-Based Access Control (RBAC) is enabled on your instance, administrators can define role privileges and assign them to users via groups. Roles are always scoped to an Org; a role created in one Org cannot be assigned in another. -=== Assign roles to groups via REST API +=== Role assignment to groups via REST API When creating or updating a group using the REST API v2 endpoints, use the `role_identifiers` parameter to assign one or more roles to the group. The parameter accepts an array of role GUIDs or role names. For more information, see: * link:{{navprefix}}/restV2-playground?apiResourceId=http%2Fapi-endpoints%2Fgroups%2Fcreate-user-group[`POST /api/rest/2.0/groups/create`]: include `role_identifiers` in the request body. @@ -248,4 +227,4 @@ When creating or updating a group using the REST API v2 endpoints, use the `role Roles must be available before they can be assigned. Use the xref:roles-api.adoc[Roles API] to create roles programmatically before calling the group create or update endpoints. ==== -For a complete list of available privileges and role categories, see xref:roles.adoc[Role-based access control]. \ No newline at end of file +For a complete list of available privileges and role categories, see xref:roles.adoc[Role-based access control]. diff --git a/modules/ROOT/pages/authentication.adoc b/modules/ROOT/pages/authentication.adoc index eb70d5729..106bf6c27 100644 --- a/modules/ROOT/pages/authentication.adoc +++ b/modules/ROOT/pages/authentication.adoc @@ -556,9 +556,13 @@ 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. ==== -=== Retrieving token information +=== 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. -To get the authentication token assigned to the current session of the logged-in user, send a request to `/api/rest/2.0/auth/session/token`. You can also use this API to get the token issued for the logged-in user for trusted authentication. +[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 @@ -572,15 +576,17 @@ curl -X GET \ ==== 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" - } +{ + "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 diff --git a/modules/ROOT/pages/collections.adoc b/modules/ROOT/pages/collections.adoc index 2c4e7c00c..53dfbd7a6 100644 --- a/modules/ROOT/pages/collections.adoc +++ b/modules/ROOT/pages/collections.adoc @@ -9,11 +9,6 @@ ThoughtSpot now provides REST APIs that enable developers to organize different ThoughtSpot objects into an organizational container called *Collections*. These objects can be Liveboards, Answers, data models, tables, and even other Collections. Collections provide a powerful way to manage your data assets, making discovery and collaboration easier, while ensuring the integrity of embedded workflows. -[NOTE] -==== -The Collections APIs are in Beta and disabled by default on ThoughtSpot instances. To enable these APIs on your instance, contact ThoughtSpot Support. -==== - == Before you begin * For REST API v2 operations, the Org context is determined based on the authentication token used in your API requests. Ensure you log in to the appropriate Org context from which you want to send API requests. @@ -97,7 +92,7 @@ In your `POST` request body, include the following parameters: |`name_pattern` a|__String__. Optional. Specify any case agnostic pattern to match the name of a Collection. Use `%` to perform a wildcard search by name. |`record_offset` a|__Number__. Optional. The index of the first record to be included. Default value is 0. -|`record_size` a|__Number__. Optional. The total number of records to be searched. Default value is 10. Set to -1 to search across all available collections. +|`record_size` a|__Number__. Optional. The total number of records to be searched. Default value is 10. Do not set this to `-1`; specify an explicit `record_size` and iterate through pages programmatically. |`collection_identifiers` a|__Array__. Optional. GUID of the Collection(s) to be searched. `name_pattern` takes precedence over the `collection_identifiers`. |`created_by_user_identifiers` a|__Array__. Optional. Searches for Collections by the name of the author. |`include_metadata` a|__Boolean__. Optional. When set to `true`, includes the metadata objects within each Collection in the response. diff --git a/modules/ROOT/pages/common/nav-embedding.adoc b/modules/ROOT/pages/common/nav-embedding.adoc index 347aa02bb..c65bdd872 100644 --- a/modules/ROOT/pages/common/nav-embedding.adoc +++ b/modules/ROOT/pages/common/nav-embedding.adoc @@ -124,6 +124,8 @@ Customize and integrate Embedding tutorials * link:{{navprefix}}/tutorials/tutorials-overview[Embedding tutorials] + +//// * link:{{navprefix}}/tutorials/tse-fundamentals/intro[Embedding Fundamentals] ** link:{{navprefix}}/tutorials/tse-fundamentals/lesson-01[01 - Overview] ** link:{{navprefix}}/tutorials/tse-fundamentals/lesson-02[02 - Set up for course] @@ -142,8 +144,16 @@ Embedding tutorials ** link:{{navprefix}}/tutorials/react-components/lesson-02[02 - ThoughtSpot component pages] ** link:{{navprefix}}/tutorials/react-components/lesson-03[03 - Menus and navigation elements] ** link:{{navprefix}}/tutorials/react-components/lesson-04[04 - Event handling] -* link:{{navprefix}}/tutorials/spotter/integrate-into-chatbot[Integrate Spotter into your Chatbot] +//* link:{{navprefix}}/tutorials/spotter/integrate-into-chatbot[Integrate Spotter into your Chatbot] + +* link:{{navprefix}}/tutorials/react-components/intro[Introduction] +** link:{{navprefix}}/tutorials/react-components/lesson-01[Initializing ThoughtSpot Embed SDK] +** link:{{navprefix}}/tutorials/react-components/lesson-02[ThoughtSpot component pages] +** link:{{navprefix}}/tutorials/react-components/lesson-03[Menus and other navigation elements] +** link:{{navprefix}}/tutorials/react-components/lesson-04[Event handling] +* link:{{navprefix}}/tutorials/spotter/integrate-into-chatbot[Integrate Spotter into your chatbot] +//// [.sidebar-title] Reference guides and changelog diff --git a/modules/ROOT/pages/common/nav-in-product-help.adoc b/modules/ROOT/pages/common/nav-in-product-help.adoc index a90cc2ead..51fa57b74 100644 --- a/modules/ROOT/pages/common/nav-in-product-help.adoc +++ b/modules/ROOT/pages/common/nav-in-product-help.adoc @@ -232,7 +232,7 @@ REST APIs ** link:{{navprefix}}/style-customization-apis[Style customization APIs] ** link:{{navprefix}}/audit-logs[Audit logs] ** link:{{navprefix}}/tml[TML] -** link:{{navprefix}}/collections[Collections ^BETA^] +** link:{{navprefix}}/collections[Collections] ** link:{{navprefix}}/connections[Connections] ** link:{{navprefix}}/connection-config[Connection configuration] ** link:{{navprefix}}/runtime-sort[Runtime sorting] diff --git a/modules/ROOT/pages/common/nav-mcp-server.adoc b/modules/ROOT/pages/common/nav-mcp-server.adoc index 7f98f2117..e1be3a313 100644 --- a/modules/ROOT/pages/common/nav-mcp-server.adoc +++ b/modules/ROOT/pages/common/nav-mcp-server.adoc @@ -8,8 +8,8 @@ ThoughtSpot Spotter MCP Server * link:{{navprefix}}/mcp-integration[Overview] -** link:{{navprefix}}/mcp-server-spotter3[MCP Server with Spotter 3] -** link:{{navprefix}}/mcp-server-legacy[Legacy MCP Server architecture and tools] +* link:{{navprefix}}/mcp-server-spotter3[MCP Server with Spotter 3] +* link:{{navprefix}}/mcp-server-legacy[Legacy MCP Server architecture and tools] * link:{{navprefix}}/connect-mcp-server-to-clients[Connecting MCP Server to clients] * link:{{navprefix}}/custom-chatbot-integration-mcp[Integrating MCP Server in a custom app] diff --git a/modules/ROOT/pages/common/nav-release-notes.adoc b/modules/ROOT/pages/common/nav-release-notes.adoc new file mode 100644 index 000000000..061b9ec4d --- /dev/null +++ b/modules/ROOT/pages/common/nav-release-notes.adoc @@ -0,0 +1,17 @@ + +:page-pageid: nav-release-notes +:page-description: Release notes and changelogs + +[navSection] + +[.sidebar-title] +Release notes and changelogs + +* link:{{navprefix}}/whats-new[What's new] +* Changelog +** link:{{navprefix}}/embed-sdk-changelog[Visual Embed SDK changelog] +** link:{{navprefix}}/mobile-sdk-changelog[Mobile Embed SDK changelog] +** link:{{navprefix}}/rest-v2-changelog[REST API v2 changelog] +** link:{{navprefix}}/mcp-server-changelog[Spotter MCP Server changelog] +* link:{{navprefix}}/deprecated-features[Deprecation announcements] + diff --git a/modules/ROOT/pages/common/nav-rest-api.adoc b/modules/ROOT/pages/common/nav-rest-api.adoc index b81241013..88e4749eb 100644 --- a/modules/ROOT/pages/common/nav-rest-api.adoc +++ b/modules/ROOT/pages/common/nav-rest-api.adoc @@ -30,7 +30,7 @@ REST APIs *** link:{{navprefix}}/spotter-nl-instructions[Data model instructions APIs ^BETA^] ** link:{{navprefix}}/audit-logs[Audit logs] ** link:{{navprefix}}/tml[TML] -** link:{{navprefix}}/collections[Collections ^BETA^] +** link:{{navprefix}}/collections[Collections] ** link:{{navprefix}}/connections[Connections] ** link:{{navprefix}}/connection-config[Connection configuration] ** link:{{navprefix}}/manual-translation-api[Manual translations] @@ -38,8 +38,6 @@ REST APIs ** link:{{navprefix}}/webhooks-rest-api[Webhook APIs] - - [.sidebar-title] REST API SDK @@ -50,14 +48,19 @@ REST API SDK * link:{{navprefix}}/rest-api-sdk-csharp[C# SDK] * link:{{navprefix}}/rest-apiv2-js[REST API v2.0 in JavaScript] + [.sidebar-title] REST API Tutorials * link:{{navprefix}}/tutorials/rest-api/intro[REST API Tutorials] + +//// * link:{{navprefix}}/tutorials/rest-api/lesson-01[01 - REST API overview] * link:{{navprefix}}/tutorials/rest-api/lesson-02[02 - Simple Python implementation] * link:{{navprefix}}/tutorials/rest-api/lesson-03[03 - Complex REST API workflows] +//// + [.sidebar-title] REST API v1 (DEPRECATED) diff --git a/modules/ROOT/pages/common/nav-tutorials.adoc b/modules/ROOT/pages/common/nav-tutorials.adoc new file mode 100644 index 000000000..5ebf5d5b7 --- /dev/null +++ b/modules/ROOT/pages/common/nav-tutorials.adoc @@ -0,0 +1,51 @@ + +:page-pageid: nav-tutorials +:page-description: Tutorials navigation + +[navSection] + +[.sidebar-title] +Embedding fundamentals + +* link:{{navprefix}}/tutorials/tse-fundamentals/intro[Introduction] +* link:{{navprefix}}/tutorials/tse-fundamentals/lesson-01[Overview of ThoughtSpot Embedded] +* link:{{navprefix}}/tutorials/tse-fundamentals/lesson-02[Setting up for the course] +* link:{{navprefix}}/tutorials/tse-fundamentals/lesson-03[Security Setting] +* link:{{navprefix}}/tutorials/tse-fundamentals/lesson-04[Start Coding] +* link:{{navprefix}}/tutorials/tse-fundamentals/lesson-05[Embed Search] +* link:{{navprefix}}/tutorials/tse-fundamentals/lesson-06[Embed Natural Language Search] +* link:{{navprefix}}/tutorials/tse-fundamentals/lesson-07[Embed Liveboard] +* link:{{navprefix}}/tutorials/tse-fundamentals/lesson-08[Embed Liveboard Visualization] +* link:{{navprefix}}/tutorials/tse-fundamentals/lesson-09[Embed Application] +* link:{{navprefix}}/tutorials/tse-fundamentals/lesson-10[Styling ThoughtSpot] +* link:{{navprefix}}/tutorials/tse-fundamentals/lesson-11[Summary and Next Steps] + +[.sidebar-title] +UI elements and style customization + +* link:{{navprefix}}/tutorials/style-customization/intro[Introduction] +* link:{{navprefix}}/tutorials/style-customization/step-01[Getting started] +* link:{{navprefix}}/tutorials/style-customization/step-02[Large component elements] +* link:{{navprefix}}/tutorials/style-customization/step-03[CSS styles] +* link:{{navprefix}}/tutorials/style-customization/step-04[Text strings and icon replacement] +* link:{{navprefix}}/tutorials/style-customization/step-05[Menu items] +* link:{{navprefix}}/tutorials/style-customization/step-06[Conclusion] + +[.sidebar-title] +REST API tutorials + +** link:{{navprefix}}/tutorials/rest-api/intro[Introduction] +** link:{{navprefix}}/tutorials/rest-api/lesson-01[REST API overview] +** link:{{navprefix}}/tutorials/rest-api/lesson-02[Simple Python implementation] +** link:{{navprefix}}/tutorials/rest-api/lesson-03[Complex REST API workflows] +** link:{{navprefix}}/tutorials/rest-api/lesson-04[Browser JavaScript REST API implementation] + +[.sidebar-title] +React Components Tutorial + +* link:{{navprefix}}/tutorials/react-components/intro[Introduction] +* link:{{navprefix}}/tutorials/react-components/lesson-01[Initializing ThoughtSpot Embed SDK] +* link:{{navprefix}}/tutorials/react-components/lesson-02[ThoughtSpot component pages] +* link:{{navprefix}}/tutorials/react-components/lesson-03[Menus and other navigation elements] +* link:{{navprefix}}/tutorials/react-components/lesson-04[Event handling] +//* link:{{navprefix}}/tutorials/spotter/integrate-into-chatbot[Integrate Spotter into your chatbot] diff --git a/modules/ROOT/pages/common/nav-walkthroughs.adoc b/modules/ROOT/pages/common/nav-walkthroughs.adoc new file mode 100644 index 000000000..53846edb8 --- /dev/null +++ b/modules/ROOT/pages/common/nav-walkthroughs.adoc @@ -0,0 +1,50 @@ + +:page-pageid: nav-walkthroughs +:page-description: Guided Walkthroughs navigation + +// +// HOW TO ADD A NEW WALKTHROUGH/TUTORIAL GROUP +// --------------------------------------------------------------------- +// Each tutorial below MUST be a two-level list: +// * Tutorial group name (no link — this line is just the heading) +// ** link:...[Step 1] +// ** link:...[Step 2] +// ... +// +// Do NOT flatten this to a single level (all "*", no "**"). The nesting +// is load-bearing, not cosmetic — the left nav (LeftSidebar/index.scss, +// ".tutorialsNavWrapper" rules) relies on exactly this two-level shape to: +// 1. Number each step with a circular badge (counter-reset/increment +// on the nested