diff --git a/api-spec/openapiSpecv3-2_0.json b/api-spec/openapiSpecv3-2_0.json index b5749df90..58583d0f9 100644 --- a/api-spec/openapiSpecv3-2_0.json +++ b/api-spec/openapiSpecv3-2_0.json @@ -21,6 +21,22 @@ ], "description": "Roles for version 10.4.0.cl" }, + { + "name": "26.7.0.cl", + "id": "26.7.0.cl", + "tags": [ + "26.7.0.cl" + ], + "description": "Roles for version 26.7.0.cl" + }, + { + "name": "26.6.0.cl", + "id": "26.6.0.cl", + "tags": [ + "26.6.0.cl" + ], + "description": "Roles for version 26.6.0.cl" + }, { "name": "10.15.0.cl", "id": "10.15.0.cl", @@ -53,14 +69,6 @@ ], "description": "Roles for version 26.5.0.cl" }, - { - "name": "26.6.0.cl", - "id": "26.6.0.cl", - "tags": [ - "26.6.0.cl" - ], - "description": "Roles for version 26.6.0.cl" - }, { "name": "9.0.0.cl", "id": "9.0.0.cl", @@ -133,6 +141,14 @@ ], "description": "Roles for version 10.10.0.cl" }, + { + "name": "26.8.0.cl", + "id": "26.8.0.cl", + "tags": [ + "26.8.0.cl" + ], + "description": "Roles for version 26.8.0.cl" + }, { "name": "10.6.0.cl", "id": "10.6.0.cl", @@ -390,45 +406,28 @@ } } }, - "/api/rest/2.0/ai/data-source-suggestions": { - "post": { - "operationId": "getDataSourceSuggestions", - "description": "\nBeta Version: 10.15.0.cl or later\n\nSuggests the most relevant data sources for a given natural language query, ranked by confidence with LLM-generated reasoning.\n\nRequires `CAN_USE_SPOTTER` privilege and at least view-level access to the underlying metadata entities referenced in the response.\n\n#### Usage guidelines\n\nThe request must include:\n- `query`: the natural language question to find relevant data sources for\n\nIf the request is successful, the API returns a ranked list of suggested data sources, each containing:\n- `confidence`: a float score indicating the model's confidence in the relevance of the suggestion\n- `details`: metadata about the data source\n - `data_source_identifier`: the unique ID of the data source\n - `data_source_name`: the display name of the data source\n - `description`: a description of the data source\n- `reasoning`: LLM-generated rationale explaining why the data source was recommended\n\n#### Error responses\n\n| Code | Description |\n|------|--------------------------------------------------------------------------------------------------------------------------------------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks view permission on the underlying metadata entities. |\n\n> ###### Note:\n> * This endpoint is currently in Beta. Breaking changes may be introduced before it is made Generally Available.\n> * This endpoint requires Spotter — please contact ThoughtSpot Support to enable Spotter on your cluster.\n\n\n\n\n#### Endpoint URL\n", + "/api/rest/2.0/ai/agent/conversations/{conversation_identifier}/delete": { + "delete": { + "operationId": "deleteConversation", + "description": "\nDeletes an existing agent conversation.
Version: 26.7.0.cl or later\n\nPermanently deletes an existing saved agent conversation and all its associated messages. This operation is irreversible — deleted conversations cannot be recovered.\n\nRequires `CAN_USE_SPOTTER` privilege and ownership of the conversation being deleted.\n\n#### Usage guidelines\n\nThe request must include:\n\n- `conversation_identifier` *(path parameter)*: the unique ID of the conversation to delete, as returned by `createAgentConversation` or `getConversationList`\n\nA successful request returns an empty `204 No Content` response. The deleted conversation no longer appears in `getConversationList`.\n\n#### Example request\n\n```bash\nDELETE /api/rest/2.0/ai/agent/conversations/{conversation_identifier}/delete\n```\n\n#### Error responses\n\n| Code | Description |\n|------|-------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or does not own the specified conversation. |\n| 404 | Not Found — no conversation exists with the given `conversation_identifier` for the authenticated user. |\n\n> ###### Note:\n>\n> - Deletion is permanent and cannot be undone. Ensure the correct `conversation_identifier` is used before calling this endpoint.\n> - Only conversations created with `enable_save_chat: true` are persisted and can be deleted via this endpoint.\n> - Available from version 26.7.0.cl and later.\n> - This endpoint requires Spotter — please contact ThoughtSpot Support to enable Spotter on your cluster.\n\n\n\n\n#### Endpoint URL\n", "tags": [ "AI", - "10.15.0.cl" + "26.7.0.cl" + ], + "parameters": [ + { + "in": "path", + "name": "conversation_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the conversation to delete." + } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetDataSourceSuggestionsRequest" - } - } - }, - "required": true - }, - "parameters": [], "responses": { - "200": { - "description": "Common successful response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/eureka_DataSourceSuggestionResponse" - } - } - } - }, - "201": { - "description": "Common error response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/eureka_DataSourceSuggestionResponse" - } - } - } + "204": { + "description": "Successfully deleted the agent conversation." }, "400": { "description": "Operation failed", @@ -473,24 +472,14 @@ } } }, - "/api/rest/2.0/ai/instructions/get": { - "post": { - "operationId": "getNLInstructions", - "description": "\nBeta Version: 10.15.0.cl or later\n\nRetrieves existing natural language (NL) instructions configured for a specific data model. These instructions guide the AI system in understanding data context and generating more accurate responses.\n\nRequires `CAN_USE_SPOTTER` privilege, at least view access on the data model, and a bearer token corresponding to the org where the data model exists.\n\n#### Usage guidelines\n\nThe request must include:\n\n- `data_source_identifier`: the unique ID of the data model to retrieve instructions for\n\nIf the request is successful, the API returns:\n\n- `nl_instructions_info`: an array of instruction objects, each containing:\n - `instructions`: the configured text instructions for AI processing\n - `scope`: the scope of the instruction — currently only `GLOBAL` is supported\n\n#### Instructions scope\n\n- **GLOBAL**: Instructions that apply globally across the system on the given data-model (currently only global instructions are supported)\n\n#### Error responses\n\n| Code | Description |\n|------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege, lacks view access on the data model, or the bearer token does not correspond to the org where the data model exists. |\n\n> ###### Note:\n>\n> - To use this API, the user needs at least view access on the data model, and must use the bearer token corresponding to the org where the data model exists.\n> - This endpoint is currently in Beta. Breaking changes may be introduced before the endpoint is made Generally Available.\n> - Available from version 10.15.0.cl and later.\n> - This endpoint requires Spotter — please contact ThoughtSpot Support to enable Spotter on your cluster.\n> - Use this API to review currently configured instructions before modifying them with `setNLInstructions`.\n\n\n\n\n#### Endpoint URL\n", + "/api/rest/2.0/ai/agent/instructions/get": { + "get": { + "operationId": "getAgentInstructions", + "description": "\nBeta Version: 26.6.0.cl or later\n\nRetrieves the admin instructions currently configured for the AI agent (Spotter). Admin instructions are tenant- and org-scoped text that guide agent behavior across all conversations.\n\nRequires admin privileges. Only users with org admin access can retrieve agent instructions.\n\n#### Usage guidelines\n\nNo input parameters are required. The API returns the stored `AgentInstructions` record for the caller's tenant and org.\n\nIf no instructions have been configured yet, the API returns a record with an empty `instructions` field and `null` values for `id`, `created_at`, `updated_at`, and `last_updated_by`.\n\nIf the request is successful, the response includes:\n\n- `id`: unique identifier of the instructions record\n- `instructions`: the configured instructions text\n- `created_at`: ISO timestamp when the instructions were first saved\n- `updated_at`: ISO timestamp when the instructions were last updated\n- `last_updated_by`: user ID of the admin who last updated the instructions (may be `null` for older records)\n\n#### Error responses\n\n| Code | Description |\n|------|-------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have org admin privileges required to read agent instructions. |\n\n> ###### Note:\n>\n> - Use `setAgentInstructions` to create or update agent instructions.\n> - Available from version 26.6.0.cl and later.\n\n\n\n\n#### Endpoint URL\n", "tags": [ "AI", - "10.15.0.cl" + "26.6.0.cl" ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetNLInstructionsRequest" - } - } - }, - "required": true - }, "parameters": [], "responses": { "200": { @@ -498,7 +487,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/eureka_GetNLInstructionsResponse" + "$ref": "#/components/schemas/AgentInstructions" } } } @@ -508,7 +497,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/eureka_GetNLInstructionsResponse" + "$ref": "#/components/schemas/AgentInstructions" } } } @@ -556,32 +545,32 @@ } } }, - "/api/rest/2.0/ai/relevant-questions/": { - "post": { - "operationId": "getRelevantQuestions", - "description": "\nBeta Version: 10.13.0.cl or later\n\nBreaks down a natural language query into a series of smaller analytical sub-questions, each mapped to a relevant data source.\n\nRequires `CAN_USE_SPOTTER` privilege and at least view-level access to the referenced metadata objects.\n\n#### Usage guidelines\n\nThe request must include:\n- `query`: the natural language question to decompose into analytical sub-questions\n- `metadata_context`: at least one of the following context identifiers to guide question generation:\n - `conversation_identifier` — an existing conversation session ID\n - `answer_identifiers` — a list of Answer GUIDs\n - `liveboard_identifiers` — a list of Liveboard GUIDs\n - `data_source_identifiers` — a list of data source GUIDs\n\nOptional parameters for refining the output:\n- `ai_context`: additional context to improve response quality\n - `content` — supplementary text or CSV data as string input\n - `instructions` — custom text instructions for the AI system\n- `limit_relevant_questions`: maximum number of questions to return (default: `5`)\n- `bypass_cache`: if `true`, forces fresh computation instead of returning cached results\n\nIf the request is successful, the API returns a list of relevant analytical questions, each containing:\n- `query`: the generated sub-question\n- `data_source_identifier`: the unique ID of the data source the question targets\n- `data_source_name`: the display name of the corresponding data source\n\n#### Error responses\n\n| Code | Description |\n|------|---------------------------------------------------------------------------------------------------------------------------------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks view access to the referenced metadata objects. |\n\n> ###### Note:\n> * This endpoint is currently in Beta. Breaking changes may be introduced before the endpoint is made Generally Available.\n> * This endpoint requires Spotter - please contact ThoughtSpot support to enable Spotter on your cluster.\n\n\n\n\n#### Endpoint URL\n", + "/api/rest/2.0/ai/agent/conversations/{conversation_identifier}/messages": { + "get": { + "operationId": "getConversation", + "description": "\nRetrieves the full public-safe content of a saved agent conversation: ordered\nturns (user messages and agent response items) and sanitized code-execution\nfile metadata. Internal graph or branch state, Azure file identifiers, and\nmessages with a `SYSTEM` source are omitted. The full answer payload is not\nembedded; fetch it separately via `loadAnswer` using the `answer_id` on each\n`answer` response item.\nRequires `CAN_USE_SPOTTER` privilege and access to the specified conversation.
Version: 26.7.0.cl or later\n\nRetrieves the full public-safe content of a saved agent conversation. Returns ordered conversation messages — each carrying an optional user prompt (the user's message and any attachments) and the agent response items produced for that turn — plus sanitized metadata for any files generated by the code-execution tool. \n\nUse this endpoint to render a persisted conversation in a UI, build an audit trail, or post-process a completed conversation. The full answer payload is not embedded — fetch it separately via `loadAnswer` using the `answer_id` on each `answer` response item.\n\nRequires `CAN_USE_SPOTTER` privilege and access to the specified conversation.\n\n#### Usage guidelines\n\nThe request must include:\n\n- `conversation_identifier` _(path parameter)_: the unique ID of the conversation, as returned by `createAgentConversation` or `getConversationList`.\n\nIf the request is successful, the response contains two top-level fields:\n\n| Field | Type | Description |\n| ---------------------- | ------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `messages` | `ConversationMessage[]` | Ordered oldest to newest. Empty array when the conversation has no messages. |\n| `code_execution_files` | `CodeExecutionFileMetadata[]` | List of sanitized file metadata entries (one per `file_id`). Covers all code-execution-generated files referenced anywhere in the conversation. Empty array when there are none. |\n\nNo other top-level fields are returned.\n\n#### ConversationMessage fields\n\n| Field | Type | Description |\n| --------------------- | ---------------------------- | -------------------------------------------------------------------------------------------------------------- |\n| `message_id` | `String` | Stable identifier for the turn. For liveboard-started synthetic first turns, this is the root node identifier. |\n| `timestamp_in_millis` | `Long` | Milliseconds since Unix epoch for the turn. |\n| `user_prompt` | `UserPrompt` | User-authored prompt that started the turn (message and attachments). `null` for liveboard-started synthetic first turns. |\n| `response_items` | `ConversationResponseItem[]` | Agent-side output produced in response to this turn. Empty array for in-progress turns. |\n\n#### UserPrompt fields\n\n| Field | Type | Description |\n| ------------- | ---------------------- | ---------------------------------------------------------------------------------------------------- |\n| `message` | `UserMessage` | User query that started the turn. `null` for liveboard-started synthetic first turns. |\n| `attachments` | `UserAttachmentItem[]` | Files or connector resources attached to the user message. Empty array when there are no attachments. |\n\n#### UserMessage fields\n\n| Field | Type | Description |\n| ------------ | -------- | --------------------------------------------- |\n| `message_id` | `String` | Unique identifier of the user-source message. |\n| `content` | `String` | Text body of the user query. |\n\n#### UserAttachmentItem fields\n\nDiscriminated by `type`. Only `\"file\"` or `\"resource\"` are valid values. Only the fields for the indicated variant are populated. See `ConversationResponseItem` below for the field definitions of the `file` and `resource` variants — `UserAttachmentItem` uses the same fields.\n\n#### ConversationResponseItem fields\n\nEvery item carries a `type` discriminator and these shared fields:\n\n| Field | Type | Description |\n| --------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------ |\n| `type` | `String` | Discriminator. One of `\"text\"`, `\"tool_call\"`, `\"tool_result\"`, `\"answer\"`, `\"file\"`, `\"resource\"`, `\"search_datasets\"`. |\n| `timestamp_in_millis` | `Long` | Milliseconds since Unix epoch when this item was produced. |\n| `is_thinking` | `Boolean` | `true` when the item represents internal agent reasoning rather than user-facing output. Consumers may hide or collapse these. |\n| `step_title` | `String` | Human-readable label for the agent step producing this item (e.g. `\"Searching\"`, `\"Visualising\"`). |\n\nVariant-specific fields:\n\n- **`text`** — agent text output: `content` (String), `content_type` (`ContentMimeType` enum), `file_reference` (FileReference).\n- **`tool_call`** — agent invoked a tool: `tool_call_id` (String), `tool_name` (String), `arguments` (JSON object).\n- **`tool_result`** — result returned from a tool invocation: `tool_call_id`, `tool_name`, `content`, `content_type` (`ContentMimeType` enum), `success` (Boolean).\n- **`answer`** — slim reference to a saved answer: `answer_id` (String), `tool_call_id`, `tool_name`.\n- **`file`** — uploaded or generated files: `files` (`PublicFileInfo[]`).\n- **`resource`** — MCP connector resource: `title`, `uri`, `name`, `mime_type`, `description`, `size` (Int), `connector_id`, `connector_name`, `connector_slug`, `transport_type` (`TransportType` enum).\n- **`search_datasets`** — dataset discovery result: `text` (String), `data_sources` (`DataSourceInfo[]`).\n\nClients should switch on `type` and ignore unknown variants for forward-compatibility.\n\n#### content_type values\n\n`content_type` is the `ContentMimeType` enum. The following values are defined:\n\n| Value | Wire MIME | Meaning |\n| --------------------------- | --------------------------- | ---------------------------------------------------- |\n| `TEXT_PLAIN` | `text/plain` | Plain text. Default for `tool_result`. |\n| `TEXT_MARKDOWN` | `text/markdown` | Markdown. Default for `text`. |\n| `TEXT_X_MARKDOWN_WITH_CODE` | `text/x-markdown-with-code` | Markdown whose body starts with a fenced code block. |\n| `TEXT_HTML` | `text/html` | Raw HTML. |\n\n#### transport_type values\n\n`transport_type` is the `TransportType` enum used on the `resource` variant.\n\n| Value | Meaning |\n| ------------------ | --------------------------------------------- |\n| `STREAMABLE_HTTP` | Streamable HTTP transport (default for MCP). |\n| `SSE` | Server-sent events transport. |\n\n#### FileReference fields\n\n| Field | Type | Description |\n| ------------------------ | -------- | ------------------------------------------------------------ |\n| `file_id` | `String` | Unique identifier of the code-execution-generated file. |\n| `display_name` | `String` | Human-readable file name. |\n| `created_time_in_millis` | `Long` | Milliseconds since Unix epoch when the file was created. |\n\nCross-reference `file_id` against `code_execution_files` to retrieve full metadata including the `expired` flag before attempting a download.\n\n#### PublicFileInfo fields\n\n| Field | Type | Description |\n| ------------------------ | -------- | -------------------------------------------------------- |\n| `file_id` | `String` | Unique identifier of the file. |\n| `display_name` | `String` | Human-readable file name. |\n| `file_type` | `String` | File type such as `csv`, `pdf`, or `png`. |\n| `created_time_in_millis` | `Long` | Milliseconds since Unix epoch when the file was created. |\n| `size_bytes` | `Int` | File size in bytes. |\n\n#### CodeExecutionFileMetadata fields\n\nEach entry in the `code_execution_files` array contains:\n\n| Field | Type | Description |\n| ------------------------ | --------- | ------------------------------------------------------------------------------------------------------------------------------- |\n| `file_id` | `String` | Unique identifier of the file. |\n| `display_name` | `String` | Human-readable file name. |\n| `file_type` | `String` | File type such as `csv`, `pdf`, or `png`. |\n| `created_time_in_millis` | `Long` | Milliseconds since Unix epoch when the file was created. |\n| `expired` | `Boolean` | When `true`, the underlying file is no longer retrievable from code-execution storage; UIs should disable download and preview. |\n\n#### Loading answer payloads\n\nEach `AnswerResponseItem` in the response contains an `answer_id` field. Pass this value as the `answer_identifier` parameter to `loadAnswer` to retrieve the full answer payload (TML tokens, visualization metadata) for that item.\n\n#### Example request\n\n```bash\nGET /api/rest/2.0/ai/agent/conversations/{conversation_identifier}/messages\n```\n\n#### Example response\n\n```json\n{\n \"messages\": [\n {\n \"message_id\": \"node_u_01\",\n \"timestamp_in_millis\": 1744000000000,\n \"user_prompt\": {\n \"message\": {\n \"message_id\": \"msg_u_01\",\n \"content\": \"Show me revenue by region as a chart.\"\n },\n \"attachments\": []\n },\n \"response_items\": [\n {\n \"type\": \"tool_call\",\n \"tool_call_id\": \"toolu_01ABC\",\n \"tool_name\": \"search_datasets\",\n \"step_title\": \"Searching datasets\",\n \"arguments\": { \"query\": \"revenue\" },\n \"timestamp_in_millis\": 1744000001000,\n \"is_thinking\": false\n },\n {\n \"type\": \"answer\",\n \"answer_id\": \"ans_01XYZ\",\n \"tool_call_id\": \"toolu_02DEF\",\n \"tool_name\": \"fetch_and_visualize\",\n \"step_title\": \"Visualising\",\n \"timestamp_in_millis\": 1744000004000,\n \"is_thinking\": false\n },\n {\n \"type\": \"text\",\n \"content\": \"Revenue is highest in APAC.\",\n \"content_type\": \"TEXT_MARKDOWN\",\n \"timestamp_in_millis\": 1744000005000,\n \"is_thinking\": false,\n \"step_title\": null,\n \"file_reference\": {\n \"file_id\": \"revenue_by_region.csv\",\n \"display_name\": \"revenue_by_region.csv\",\n \"created_time_in_millis\": 1744027200000\n }\n }\n ]\n }\n ],\n \"code_execution_files\": [\n {\n \"file_id\": \"revenue_by_region.csv\",\n \"display_name\": \"revenue_by_region.csv\",\n \"file_type\": \"csv\",\n \"created_time_in_millis\": 1744027200000,\n \"expired\": false\n }\n ]\n}\n```\n\n#### Example: liveboard-started conversation\n\nWhen a conversation is initiated from a saved liveboard visualization rather than a user query, the first turn is synthetic. `user_prompt` is `null`, and `response_items` contains a single `answer` item referencing the seed visualization.\n\n```json\n{\n \"messages\": [\n {\n \"message_id\": \"ROOT_NODE\",\n \"timestamp_in_millis\": 1743999000000,\n \"user_prompt\": null,\n \"response_items\": [\n {\n \"type\": \"answer\",\n \"answer_id\": \"lb_seed_01\",\n \"tool_call_id\": null,\n \"tool_name\": null,\n \"step_title\": null,\n \"timestamp_in_millis\": 1743999000000,\n \"is_thinking\": false\n }\n ]\n }\n ],\n \"code_execution_files\": []\n}\n```\n\nSubsequent turns follow the normal user-to-agent pattern.\n\n#### Error responses\n\n| Code | Description |\n| ---- | --------------------------------------------------------------------------------------------------------------------------- |\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks access to the specified conversation. |\n| 404 | Not Found — no conversation exists with the given identifier for the authenticated user. |\n\n> ###### Note:\n>\n> - Messages with an internal `SYSTEM` source are always dropped from the response.\n> - In-progress turns are still returned with an empty `response_items` array so clients can render the user message immediately.\n> - Do not assume every `tool_call` has a paired `tool_result` or `answer` — an interrupted conversation can leave a dangling call.\n> - Available from version 26.7.0.cl and later.\n> - This endpoint requires Spotter — please contact ThoughtSpot Support to enable Spotter on your cluster.\n\n\n\n\n#### Endpoint URL\n", "tags": [ "AI", - "10.13.0.cl" + "26.7.0.cl" + ], + "parameters": [ + { + "in": "path", + "name": "conversation_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the conversation to load." + } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetRelevantQuestionsRequest" - } - } - }, - "required": true - }, - "parameters": [], "responses": { "200": { "description": "Common successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/eureka_GetRelevantQuestionsResponse" + "$ref": "#/components/schemas/ConversationMessageResponse" } } } @@ -591,7 +580,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/eureka_GetRelevantQuestionsResponse" + "$ref": "#/components/schemas/ConversationMessageResponse" } } } @@ -639,33 +628,55 @@ } } }, - "/api/rest/2.0/ai/analytical-questions": { - "post": { - "operationId": "queryGetDecomposedQuery", - "description": "\nBeta Version: 10.7.0.cl or later\n\nVersion: 10.7.0.cl or later\n\n**Deprecated** — Use `getRelevantQuestions` instead (available from 10.13.0.cl).\n\nBreaks down a topical or goal-oriented natural language question into smaller, actionable analytical sub-questions, each mapped to a relevant data source for independent execution.\n\nRequires `CAN_USE_SPOTTER` privilege and at least view-level access to the referenced metadata objects.\n\n#### Usage guidelines\n\nThe request accepts the following parameters:\n\n- `nlsRequest`: contains the user `query` to decompose, along with optional `instructions` and `bypassCache` flag\n- `worksheetIds`: list of data source identifiers to scope the decomposition\n- `answerIds`: list of Answer GUIDs whose data guides the response\n- `liveboardIds`: list of Liveboard GUIDs whose data guides the response\n- `conversationId`: an existing conversation session ID for context continuity\n- `content`: supplementary text or CSV data to improve response quality\n- `maxDecomposedQueries`: maximum number of sub-questions to return (default: `5`)\n\nIf the request is successful, the API returns a `decomposedQueryResponse` containing a list of `decomposedQueries`, each with:\n- `query`: the generated analytical sub-question\n- `worksheetId`: the unique ID of the data source the question targets\n- `worksheetName`: the display name of the corresponding data source\n\n#### Error responses\n\n| Code | Description |\n|------|---------------------------------------------------------------------------------------------------------------------------------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks view access to the referenced metadata objects. |\n\n> ###### Note:\n> * This endpoint is deprecated since 10.13.0.cl. Use `getRelevantQuestions` for new integrations.\n> * This endpoint is currently in Beta. Breaking changes may be introduced before the endpoint is made Generally Available.\n> * This endpoint requires Spotter — please contact ThoughtSpot support to enable Spotter on your cluster.\n\n\n\n\n#### Endpoint URL\n", - "deprecated": true, + "/api/rest/2.0/ai/agent/conversations": { + "get": { + "operationId": "getConversationList", + "description": "\nRetrieves the list of saved agent conversations for the currently authenticated user.\nOnly conversations created with `enable_save_chat: true` are returned.
Version: 26.7.0.cl or later\n\nRetrieves a paginated list of saved agent conversations for the currently authenticated user. Only conversations that were created with `enable_save_chat: true` in `createAgentConversation` are returned.\n\nRequires `CAN_USE_SPOTTER` privilege.\n\n#### Usage guidelines\n\nThe request supports the following optional query parameters:\n\n- `limit`: maximum number of conversations to return. Use this together with `offset` for pagination.\n- `offset`: number of conversations to skip before returning results. Defaults to `0`.\n- `skip_empty`: when `true` (default), conversations with no messages are excluded from the results. Set to `false` to include empty conversations.\n\nIf the request is successful, the response includes a `conversations` array. Each entry contains:\n\n- `conversation_identifier`: the unique ID of the conversation, used as input to `sendAgentConversationMessage`, `updateConversation`, `deleteConversation`, `stopConversation`, and `loadAnswer`\n- `conversation_title`: the display name of the conversation\n- `created_at`: ISO 8601 timestamp of when the conversation was created\n- `updated_at`: ISO 8601 timestamp of the most recent update to the conversation\n- `data_source_identifiers`: list of unique IDs of the data sources associated with the conversation\n- `data_source_names`: array of `{ id, name }` objects for the data sources associated with the conversation\n\n#### Pagination\n\nUse `limit` and `offset` to page through large result sets:\n\n```\nGET /api/rest/2.0/ai/agent/conversations?limit=20&offset=0 → first page\nGET /api/rest/2.0/ai/agent/conversations?limit=20&offset=20 → second page\n```\n\n#### Pagination and `has_more`\n\nThe response includes a `has_more: Boolean` field. When `true`, there are additional conversations beyond the current page — increment `offset` by `limit` to fetch the next page. When `has_more` is `false`, the current page is the last. Note that `total_count` is not returned; use `has_more` to drive paging controls.\n\n#### Example response\n\n```json\n{\n \"conversations\": [\n {\n \"conversation_identifier\": \"abc123\",\n \"conversation_title\": \"Sales by Region Q1\",\n \"created_at\": \"2026-03-01T10:00:00Z\",\n \"updated_at\": \"2026-03-05T14:23:00Z\",\n \"data_source_identifiers\": [\"ds-001\"],\n \"data_source_names\": [{ \"id\": \"ds-001\", \"name\": \"Retail Sales\" }]\n }\n ],\n \"has_more\": false\n}\n```\n\n#### Error responses\n\n| Code | Description |\n|------|-------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege. |\n\n> ###### Note:\n>\n> - Only conversations created with `enable_save_chat: true` appear in this list. Conversations created with `enable_save_chat: false` (the default) are not persisted and cannot be retrieved.\n> - Available from version 26.7.0.cl and later.\n> - This endpoint requires Spotter — please contact ThoughtSpot Support to enable Spotter on your cluster.\n\n\n\n\n#### Endpoint URL\n", "tags": [ "AI", - "10.7.0.cl" + "26.7.0.cl" ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/QueryGetDecomposedQueryRequest" - } - } + "parameters": [ + { + "in": "query", + "name": "limit", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + }, + "description": "Maximum number of conversations to return. Used for pagination.", + "default": 30 }, - "required": true - }, - "parameters": [], + { + "in": "query", + "name": "offset", + "required": false, + "schema": { + "type": "integer", + "format": "int32" + }, + "description": "Number of conversations to skip before returning results. Used for pagination.", + "default": 0 + }, + { + "in": "query", + "name": "skip_empty", + "required": false, + "schema": { + "type": "boolean" + }, + "description": "When true, excludes conversations with no messages. Defaults to true.", + "default": true + } + ], "responses": { "200": { "description": "Common successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/eureka_DecomposeQueryResponse" + "$ref": "#/components/schemas/AgentConversationHistoryResponse" } } } @@ -675,7 +686,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/eureka_DecomposeQueryResponse" + "$ref": "#/components/schemas/AgentConversationHistoryResponse" } } } @@ -723,105 +734,32 @@ } } }, - "/api/rest/2.0/ai/agent/conversation/{conversation_identifier}/send": { + "/api/rest/2.0/ai/data-source-suggestions": { "post": { - "operationId": "sendAgentConversationMessage", - "description": "\n Version: 26.5.0.cl or later\n\nVersion: 26.5.0.cl or later\n\nSends natural language messages to an existing Spotter agent conversation and returns the complete response synchronously.\n\nRequires `CAN_USE_SPOTTER` privilege and access to the metadata object associated with the conversation. The user must have access to the conversation session referenced by `conversation_identifier`. A conversation must first be created using the `createAgentConversation` API.\n\n#### Usage guidelines\n\nThe request must include:\n\n- `conversation_identifier`: the unique session ID returned by `createAgentConversation`, used for context continuity and message tracking\n- `messages`: an array of one or more text messages to send to the agent\n\nThe API returns an array of response objects, each containing:\n\n- `type`: the kind of response — `text`, `answer`, or `error`\n- `message`: the main content of the response\n- `metadata`: additional information depending on the message type (e.g., answer metadata includes analytics and visualization details)\n\n#### Error responses\n\n| Code | Description |\n|------|----------------------------------------------------------------------------------------------------------------------------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks permission on the referenced conversation. |\n\n> ###### Note:\n>\n> - This endpoint is Generally Available from version 26.5.0.cl.\n> - This endpoint requires Spotter - please contact ThoughtSpot support to enable Spotter on your cluster.\n> - For real-time streamed responses, use `sendAgentConversationMessageStreaming` instead.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "getDataSourceSuggestions", + "description": "\nBeta Version: 10.15.0.cl or later\n\nSuggests the most relevant data sources for a given natural language query, ranked by confidence with LLM-generated reasoning.\n\nRequires `CAN_USE_SPOTTER` privilege and at least view-level access to the underlying metadata entities referenced in the response.\n\n#### Usage guidelines\n\nThe request must include:\n- `query`: the natural language question to find relevant data sources for\n\nIf the request is successful, the API returns a ranked list of suggested data sources, each containing:\n- `confidence`: a float score indicating the model's confidence in the relevance of the suggestion\n- `details`: metadata about the data source\n - `data_source_identifier`: the unique ID of the data source\n - `data_source_name`: the display name of the data source\n - `description`: a description of the data source\n- `reasoning`: LLM-generated rationale explaining why the data source was recommended\n\n#### Error responses\n\n| Code | Description |\n|------|--------------------------------------------------------------------------------------------------------------------------------------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks view permission on the underlying metadata entities. |\n\n> ###### Note:\n> * This endpoint is currently in Beta. Breaking changes may be introduced before it is made Generally Available.\n> * This endpoint requires Spotter — please contact ThoughtSpot Support to enable Spotter on your cluster.\n\n\n\n\n#### Endpoint URL\n", "tags": [ "AI", - "26.5.0.cl" + "10.15.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SendAgentConversationMessageRequest" + "$ref": "#/components/schemas/GetDataSourceSuggestionsRequest" } } }, "required": true }, - "parameters": [ - { - "in": "path", - "name": "conversation_identifier", - "required": true, - "schema": { - "type": "string" - }, - "description": "Unique identifier for the conversation (used to track context)" - } - ], + "parameters": [], "responses": { "200": { "description": "Common successful response", "content": { "application/json": { "schema": { - "type": "object" - }, - "examples": { - "example_1": { - "summary": "Send a message to an existing agent conversation", - "value": { - "messages": [ - { - "metadata": {}, - "internal": {}, - "type": "text", - "text": "\n\nI'll compare sales between 2025 and 2024. First, let me get the dataset context to identify the relevant sales and date columns.", - "agent_context": "" - }, - { - "metadata": {}, - "internal": {}, - "type": "text", - "text": "```json\n{\"search_mode\": \"semantic\", \"dataset_name\": \"(Sample) Retail - Apparel\", \"columns\": [{\"name\": \"sales\", \"type\": \"MEASURE\", \"data_type\": \"double\"}, {\"name\": \"date\", \"type\": \"ATTRIBUTE\", \"data_type\": \"date\", \"sample_values\": [\"2025\", \"2024\"]}]}\n```", - "agent_context": "" - }, - { - "metadata": {}, - "internal": {}, - "type": "text", - "text": "\n\nPerfect! I found the sales and date columns. I can see the dataset contains sales data for both 2025 and 2024. Now I'll create a comparison query to show sales for 2025 versus 2024.", - "agent_context": "" - }, - { - "metadata": { - "output": "", - "worksheet_id": "cd252e5c-b552-49a8-821d-3eadaa049cca", - "assumptions": "", - "chart_type": "KPI", - "interrupted": false, - "data_awareness_enabled": true - }, - "internal": {}, - "type": "answer", - "title": "Compare total sales for 2025 vs 2024", - "description": "", - "session_id": "842bb67a-e08e-4861-97e8-8db9538db51d", - "gen_no": 2, - "sage_query": "[sales] [date] = '2025' vs [date] = '2024'", - "tml_tokens": [ - "[sales]", - "[date] = '2025' vs [date] = '2024'" - ], - "formulas": [], - "parameters": [], - "subqueries": [], - "viz_suggestion": "CAEQIBomEiQ2NjE5NzI0Yy1kMjVlLTU4MDItOWNjOC1jNDA3MWY3OWY5MzAoATIA", - "ac_state": null - }, - { - "metadata": {}, - "internal": {}, - "type": "text", - "text": "\n\nThe visualization shows the side-by-side comparison of total sales (in USD) between the two years, allowing you to see the year-over-year performance. You can see the sales figures for both 2024 and 2025, making it easy to identify growth or decline trends in your retail apparel business.", - "agent_context": "" - } - ] - } - } + "$ref": "#/components/schemas/eureka_DataSourceSuggestionResponse" } } } @@ -831,7 +769,7 @@ "content": { "application/json": { "schema": { - "type": "object" + "$ref": "#/components/schemas/eureka_DataSourceSuggestionResponse" } } } @@ -879,88 +817,32 @@ } } }, - "/api/rest/2.0/ai/agent/conversation/{conversation_identifier}/send/stream": { + "/api/rest/2.0/ai/instructions/get": { "post": { - "operationId": "sendAgentConversationMessageStreaming", - "description": "\n Version: 26.5.0.cl or later\n\nVersion: 26.5.0.cl or later\n\nSends one or more natural language messages to an existing Spotter agent conversation and returns the response as a real-time Server-Sent Events stream.\n\nRequires `CAN_USE_SPOTTER` privilege and access to the metadata object associated with the conversation. The user must have access to the conversation session referenced by `conversation_identifier`. A conversation must first be created using the `createAgentConversation` API.\n\n#### Usage guidelines\n\nThe request must include:\n\n- `conversation_identifier`: the unique session ID returned by `createAgentConversation`, used for context continuity and message tracking\n- `messages`: an array of one or more text messages to send to the agent\n\nIf the request is valid, the API returns a Server-Sent Events (SSE) stream. Each line has the form `data: [{\"type\": \"...\", ...}]` — a JSON array of event objects. Event types include:\n\n- `ack`: confirms receipt of the request (`node_id`)\n- `conv_title`: conversation title (`title`, `conv_id`)\n- `notification`: status updates on operations (`group_id`, `metadata`, `code` — e.g. `TOOL_CALL_NOTIFICATION`, `nls_start`, `FINAL_RESPONSE_NOTIFICATION`)\n- `text-chunk`: incremental content chunks (`id`, `group_id`, `metadata` with `format` and `type` such as `thinking` or `text`, `content`)\n- `text`: full text block with same structure as `text-chunk`\n- `answer`: structured answer with metadata (`id`, `group_id`, `metadata` with `sage_query`, `session_id`, `title`, etc., `title`)\n- `error`: if a failure occurs\n\n#### Error responses\n\n| Code | Description |\n| ---- | -------------------------------------------------------------------------------------------------------------------------------- |\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks permission on the referenced conversation. |\n\n> ###### Note:\n>\n> - This endpoint is Generally Available from version 26.5.0.cl.\n> - This endpoint requires Spotter - please contact ThoughtSpot support to enable Spotter on your cluster.\n> - The streaming protocol uses Server-Sent Events (SSE).\n> - For the complete response in a single payload, use `sendAgentConversationMessage` instead.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "getNLInstructions", + "description": "\nBeta Version: 10.15.0.cl or later\n\nRetrieves existing natural language (NL) instructions configured for a specific data model. These instructions guide the AI system in understanding data context and generating more accurate responses.\n\nRequires `CAN_USE_SPOTTER` privilege, at least view access on the data model, and a bearer token corresponding to the org where the data model exists.\n\n#### Usage guidelines\n\nThe request must include:\n\n- `data_source_identifier`: the unique ID of the data model to retrieve instructions for\n\nIf the request is successful, the API returns:\n\n- `nl_instructions_info`: an array of instruction objects, each containing:\n - `instructions`: the configured text instructions for AI processing\n - `scope`: the scope of the instruction — currently only `GLOBAL` is supported\n\n#### Instructions scope\n\n- **GLOBAL**: Instructions that apply globally across the system on the given data-model (currently only global instructions are supported)\n\n#### Error responses\n\n| Code | Description |\n|------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege, lacks view access on the data model, or the bearer token does not correspond to the org where the data model exists. |\n\n> ###### Note:\n>\n> - To use this API, the user needs at least view access on the data model, and must use the bearer token corresponding to the org where the data model exists.\n> - This endpoint is currently in Beta. Breaking changes may be introduced before the endpoint is made Generally Available.\n> - Available from version 10.15.0.cl and later.\n> - This endpoint requires Spotter — please contact ThoughtSpot Support to enable Spotter on your cluster.\n> - Use this API to review currently configured instructions before modifying them with `setNLInstructions`.\n\n\n\n\n#### Endpoint URL\n", "tags": [ "AI", - "26.5.0.cl" + "10.15.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SendAgentConversationMessageStreamingRequest" + "$ref": "#/components/schemas/GetNLInstructionsRequest" } } }, "required": true }, - "parameters": [ - { - "in": "path", - "name": "conversation_identifier", - "required": true, - "schema": { - "type": "string" - }, - "description": "Unique identifier for the conversation (used to track context)" - } - ], + "parameters": [], "responses": { "200": { "description": "Common successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SendAgentMessageResponse" - }, - "examples": { - "example_1": { - "summary": "SSE stream — each line is data: [{\"type\": \"...\", ...}]. Events arrive over time; this example shows a minimal sequence.", - "value": [ - { - "type": "ack", - "node_id": "aGxzcFVrtom8" - }, - { - "type": "conv_title", - "title": "Sales 2025 vs 2024", - "conv_id": "-XIi04l5rrof" - }, - { - "type": "notification", - "group_id": "cDEsAQbSnd3J", - "metadata": { - "type": "thinking", - "tool_title": "Analyzing Sales Performance: 2025 vs 2024" - }, - "code": "TOOL_CALL_NOTIFICATION" - }, - { - "id": "mNAdvy-NK2l6", - "type": "text-chunk", - "group_id": "cDEsAQbSnd3J", - "metadata": { - "format": "markdown", - "type": "thinking" - }, - "content": "\n\nI need to compare sales performance between 2025 and 2024." - }, - { - "id": "hxWMDP-pgR3B", - "type": "answer", - "group_id": "m1MTvttEUa7o", - "metadata": { - "sage_query": "[sales] [date] = '2025' vs [date] = '2024'", - "session_id": "431adcf9-1328-4d8c-81a1-0faa7fa37ba6", - "title": "Compare sales for 2025 vs 2024" - }, - "title": "Compare sales for 2025 vs 2024" - } - ] - } + "$ref": "#/components/schemas/eureka_GetNLInstructionsResponse" } } } @@ -970,7 +852,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SendAgentMessageResponse" + "$ref": "#/components/schemas/eureka_GetNLInstructionsResponse" } } } @@ -1018,43 +900,32 @@ } } }, - "/api/rest/2.0/ai/agent/{conversation_identifier}/converse": { + "/api/rest/2.0/ai/relevant-questions/": { "post": { - "operationId": "sendAgentMessage", - "description": "\nBeta Version: 26.2.0.cl or later\n\n**Deprecated** — Use `sendAgentConversationMessage` instead.\n\nSend natural language messages to an existing Spotter agent conversation and returns the complete response synchronously.\n\nRequires `CAN_USE_SPOTTER` privilege and access to the metadata object associated with the conversation. The user must have access to the conversation session referenced by `conversation_identifier`.\nA conversation must first be created using the `createAgentConversation` API.\n\n#### Usage guidelines\n\nThe request must include:\n\n- `conversation_identifier`: the unique session ID returned by `createAgentConversation`, used for context continuity and message tracking\n- `messages`: an array of one or more text messages to send to the agent\n\nThe API returns an array of response objects, each containing:\n\n- `type`: the kind of response — `text`, `answer`, or `error`\n- `message`: the main content of the response\n- `metadata`: additional information depending on the message type (e.g., answer metadata includes analytics and visualization details)\n\n#### Error responses\n\n| Code | Description |\n|------|----------------------------------------------------------------------------------------------------------------------------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks permission on the referenced conversation. |\n\n> ###### Note:\n>\n> - This endpoint is deprecated. Use `sendAgentConversationMessage` for new integrations.\n> - This endpoint is currently in Beta. Breaking changes may be introduced before the endpoint is made Generally Available.\n> - This endpoint requires Spotter - please contact ThoughtSpot support to enable Spotter on your cluster.\n\n\n\n\n#### Endpoint URL\n", - "deprecated": true, + "operationId": "getRelevantQuestions", + "description": "\nBeta Version: 10.13.0.cl or later\n\nBreaks down a natural language query into a series of smaller analytical sub-questions, each mapped to a relevant data source.\n\nRequires `CAN_USE_SPOTTER` privilege and at least view-level access to the referenced metadata objects.\n\n#### Usage guidelines\n\nThe request must include:\n- `query`: the natural language question to decompose into analytical sub-questions\n- `metadata_context`: at least one of the following context identifiers to guide question generation:\n - `conversation_identifier` — an existing conversation session ID\n - `answer_identifiers` — a list of Answer GUIDs\n - `liveboard_identifiers` — a list of Liveboard GUIDs\n - `data_source_identifiers` — a list of data source GUIDs\n\nOptional parameters for refining the output:\n- `ai_context`: additional context to improve response quality\n - `content` — supplementary text or CSV data as string input\n - `instructions` — custom text instructions for the AI system\n- `limit_relevant_questions`: maximum number of questions to return (default: `5`)\n- `bypass_cache`: if `true`, forces fresh computation instead of returning cached results\n\nIf the request is successful, the API returns a list of relevant analytical questions, each containing:\n- `query`: the generated sub-question\n- `data_source_identifier`: the unique ID of the data source the question targets\n- `data_source_name`: the display name of the corresponding data source\n\n#### Error responses\n\n| Code | Description |\n|------|---------------------------------------------------------------------------------------------------------------------------------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks view access to the referenced metadata objects. |\n\n> ###### Note:\n> * This endpoint is currently in Beta. Breaking changes may be introduced before the endpoint is made Generally Available.\n> * This endpoint requires Spotter - please contact ThoughtSpot support to enable Spotter on your cluster.\n\n\n\n\n#### Endpoint URL\n", "tags": [ "AI", - "26.2.0.cl" + "10.13.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SendAgentMessageRequest" + "$ref": "#/components/schemas/GetRelevantQuestionsRequest" } } }, "required": true }, - "parameters": [ - { - "in": "path", - "name": "conversation_identifier", - "required": true, - "schema": { - "type": "string" - }, - "description": "Unique identifier for the conversation (used to track context)" - } - ], + "parameters": [], "responses": { "200": { "description": "Common successful response", "content": { "application/json": { "schema": { - "type": "object" + "$ref": "#/components/schemas/eureka_GetRelevantQuestionsResponse" } } } @@ -1064,7 +935,7 @@ "content": { "application/json": { "schema": { - "type": "object" + "$ref": "#/components/schemas/eureka_GetRelevantQuestionsResponse" } } } @@ -1112,33 +983,41 @@ } } }, - "/api/rest/2.0/ai/agent/converse/sse": { - "post": { - "operationId": "sendAgentMessageStreaming", - "description": "\nBeta Version: 26.2.0.cl or later\n\n**Deprecated** — Use `sendAgentConversationMessageStreaming` instead.\n\nSends one or more natural language messages to an existing Spotter agent conversation and returns the response as a real-time Server-Sent Events stream.\n\nRequires `CAN_USE_SPOTTER` privilege and access to the metadata object associated with the conversation. The user must have access to the conversation session referenced by `conversation_identifier`. A conversation must first be created using the `createAgentConversation` API.\n\n#### Usage guidelines\n\nThe request must include:\n\n- `conversation_identifier`: the unique session ID returned by `createAgentConversation`, used for context continuity and message tracking\n- `messages`: an array of one or more text messages to send to the agent\n\nIf the request is valid, the API returns a Server-Sent Events (SSE) stream. Each line has the form `data: [{\"type\": \"...\", ...}]` — a JSON array of event objects. Event types include:\n\n- `ack`: confirms receipt of the request (`node_id`)\n- `conv_title`: conversation title (`title`, `conv_id`)\n- `notification`: status updates on operations (`group_id`, `metadata`, `code` — e.g. `TOOL_CALL_NOTIFICATION`, `nls_start`, `FINAL_RESPONSE_NOTIFICATION`)\n- `text-chunk`: incremental content chunks (`id`, `group_id`, `metadata` with `format` and `type` such as `thinking` or `text`, `content`)\n- `text`: full text block with same structure as `text-chunk`\n- `answer`: structured answer with metadata (`id`, `group_id`, `metadata` with `sage_query`, `session_id`, `title`, etc., `title`)\n- `error`: if a failure occurs\n\n#### Error responses\n\n| Code | Description |\n|------|----------------------------------------------------------------------------------------------------------------------------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks permission on the referenced conversation. |\n\n> ###### Note:\n>\n> - This endpoint is deprecated. Use `sendAgentConversationMessageStreaming` for new integrations.\n> - This endpoint is currently in Beta. Breaking changes may be introduced before the endpoint is made Generally Available.\n> - This endpoint requires Spotter - please contact ThoughtSpot support to enable Spotter on your cluster.\n> - The streaming protocol uses Server-Sent Events (SSE).\n\n\n\n\n#### Endpoint URL\n", - "deprecated": true, + "/api/rest/2.0/ai/agent/conversations/{conversation_identifier}/answers/{answer_identifier}/details": { + "get": { + "operationId": "loadAnswer", + "description": "\nLoads the full answer payload for a specific answer item in an agent\nconversation. Returns structured answer data including the TML query, token\nbreakdown, visualization metadata, and agent context state.\nPass the `answer_id` from an `AnswerResponseItem` in the `getConversation`\nresponse as the `answer_identifier` parameter.\nRequires `CAN_USE_SPOTTER` privilege and access to the specified conversation.
Version: 26.7.0.cl or later\n\nLoads the answer details for a specific answer item in an agent conversation. Returns structured answer data including the TML token list, visualization metadata, and agent context state. Use this endpoint to retrieve the full answer representation for an answer item — for example, to re-render a chart, export a query, or inspect the generated TML.\n\nRequires `CAN_USE_SPOTTER` privilege and access to the specified conversation.\n\n#### Usage guidelines\n\nThe request must include:\n\n- `conversation_identifier` *(path parameter)*: the unique ID of the conversation, as returned by `createAgentConversation`\n- `answer_identifier` *(path parameter)*: the `answer_id` field from an `AnswerResponseItem` in the `getConversation` response\n\nIf the request is successful, the response contains an `answer` object with the following fields:\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `title` | `String` | Display title of the generated answer (e.g., `\"sales by month\"`). |\n| `description` | `String` | Optional description of the answer. |\n| `session_identifier` | `String` | Unique identifier of the session in which this answer was generated. |\n| `generation_number` | `Int` | Generation sequence number of this answer within the session. |\n| `tokens` | `[String]` | Ordered list of TML token strings that make up the answer query (e.g., `[\"[sales]\", \"[date].'monthly'\"]`). |\n| `visualization_type` | `VizType` | Suggested visualization type: `Chart`, `Table`, or `Undefined`. `null` if no suggestion is available. |\n| `formulas` | `[String]` | List of formula names referenced in the answer. Empty if none are used. |\n| `parameters` | `[String]` | List of parameter names applied to the answer. Empty if none are used. |\n| `sub_queries` | `[JSON]` | List of sub-query objects used in the answer. Empty if none are present. |\n| `ac_state` | `ACState` | Agent context state, including `transaction_identifier` and `generation_number`, used to correlate this answer with a specific agent turn. |\n\n#### ACState fields\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `transaction_identifier` | `String` | Unique identifier of the agent transaction that produced this answer. |\n| `generation_number` | `Int` | Generation number within the transaction. |\n\n#### Example request\n\n```bash\nGET /api/rest/2.0/ai/agent/conversations/{conversation_identifier}/answers/{answer_identifier}/details\n```\n\n#### Example response\n\n```json\n{\n \"answer\": {\n \"title\": \"sales by month\",\n \"description\": \"\",\n \"session_identifier\": \"7b00b801-73f4-4639-af5e-e775584ceba6\",\n \"generation_number\": 1,\n \"tokens\": [\"[sales]\", \"[date].'monthly'\"],\n \"visualization_type\": null,\n \"formulas\": [],\n \"parameters\": [],\n \"sub_queries\": [],\n \"ac_state\": {\n \"transaction_identifier\": \"7f6c9948-b4c7-4098-bb1f-6c67bc0e5699\",\n \"generation_number\": 1\n }\n }\n}\n```\n\n#### Typical usage scenario\n\n1. Call `getConversation` to retrieve the full conversation history.\n2. Locate an `AnswerResponseItem` in `response_items` — note its `answer_id` field.\n3. Call `loadAnswer` with the `conversation_identifier` and `answer_id` as `answer_identifier`.\n4. The returned `tokens` array can be used to open the answer in the ThoughtSpot search interface or rendered as pill chips in the UI.\n\n#### Error responses\n\n| Code | Description |\n|------|-------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks access to the specified conversation. |\n| 404 | Not Found — no conversation or message exists with the given identifiers for the authenticated user. |\n| 422 | Unprocessable Entity — the message does not contain an answer of the expected type. |\n\n> ###### Note:\n>\n> - This endpoint only loads answer-type messages. Other message types are not supported.\n> - `visualization_type` may be `null` if the agent did not produce a visualization suggestion for this answer.\n> - `formulas`, `parameters`, and `sub_queries` are returned as empty arrays when not applicable — they are never `null`.\n> - Available from version 26.7.0.cl and later.\n> - This endpoint requires Spotter — please contact ThoughtSpot Support to enable Spotter on your cluster.\n\n\n\n\n#### Endpoint URL\n", "tags": [ "AI", - "26.2.0.cl" + "26.7.0.cl" ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SendAgentMessageStreamingRequest" - } - } + "parameters": [ + { + "in": "path", + "name": "conversation_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the conversation." }, - "required": true - }, - "parameters": [], + { + "in": "path", + "name": "answer_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the answer to load. Use the `answer_id` field from an\n`AnswerResponseItem` returned by `getConversation`." + } + ], "responses": { "200": { "description": "Common successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SendAgentMessageResponse" + "$ref": "#/components/schemas/LoadAnswerResponse" } } } @@ -1148,7 +1027,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SendAgentMessageResponse" + "$ref": "#/components/schemas/LoadAnswerResponse" } } } @@ -1196,45 +1075,33 @@ } } }, - "/api/rest/2.0/ai/conversation/{conversation_identifier}/converse": { + "/api/rest/2.0/ai/analytical-questions": { "post": { - "operationId": "sendMessage", - "description": "\nBeta Version: 10.4.0.cl or later\n\nSends a follow-up message to an existing conversation within the context of a data model.\n\nRequires `CAN_USE_SPOTTER` privilege and at least view access to the metadata object specified in the request. A conversation must first be created using the `createConversation` API.\n\n#### Usage guidelines\n\nThe request must include:\n- `conversation_identifier`: the unique session ID returned by `createConversation`\n- `metadata_identifier`: the unique ID of the data source used for the conversation\n- `message`: a natural language string with the follow-up question\n\nIf the request is successful, the API returns an array of response messages, each containing:\n- `session_identifier`: the unique ID of the generated response\n- `generation_number`: the generation number of the response\n- `message_type`: the type of the response (e.g., `TSAnswer`)\n- `visualization_type`: the generated visualization type (`Chart`, `Table`, or `Undefined`)\n- `tokens` / `display_tokens`: the search tokens and user-friendly display tokens for the response\n\n#### Error responses\n\n| Code | Description |\n|------|-----------------------------------------------------------------------------------------------------------------------------------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks view permission on the specified metadata object. |\n\n> ###### Note:\n> * This endpoint is currently in Beta. Breaking changes may be introduced before the endpoint is made Generally Available.\n> * This endpoint requires Spotter - please contact ThoughtSpot support to enable Spotter on your cluster.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "queryGetDecomposedQuery", + "description": "\nBeta Version: 10.7.0.cl or later\n\nVersion: 10.7.0.cl or later\n\n**Deprecated** — Use `getRelevantQuestions` instead (available from 10.13.0.cl).\n\nBreaks down a topical or goal-oriented natural language question into smaller, actionable analytical sub-questions, each mapped to a relevant data source for independent execution.\n\nRequires `CAN_USE_SPOTTER` privilege and at least view-level access to the referenced metadata objects.\n\n#### Usage guidelines\n\nThe request accepts the following parameters:\n\n- `nlsRequest`: contains the user `query` to decompose, along with optional `instructions` and `bypassCache` flag\n- `worksheetIds`: list of data source identifiers to scope the decomposition\n- `answerIds`: list of Answer GUIDs whose data guides the response\n- `liveboardIds`: list of Liveboard GUIDs whose data guides the response\n- `conversationId`: an existing conversation session ID for context continuity\n- `content`: supplementary text or CSV data to improve response quality\n- `maxDecomposedQueries`: maximum number of sub-questions to return (default: `5`)\n\nIf the request is successful, the API returns a `decomposedQueryResponse` containing a list of `decomposedQueries`, each with:\n- `query`: the generated analytical sub-question\n- `worksheetId`: the unique ID of the data source the question targets\n- `worksheetName`: the display name of the corresponding data source\n\n#### Error responses\n\n| Code | Description |\n|------|---------------------------------------------------------------------------------------------------------------------------------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks view access to the referenced metadata objects. |\n\n> ###### Note:\n> * This endpoint is deprecated since 10.13.0.cl. Use `getRelevantQuestions` for new integrations.\n> * This endpoint is currently in Beta. Breaking changes may be introduced before the endpoint is made Generally Available.\n> * This endpoint requires Spotter — please contact ThoughtSpot support to enable Spotter on your cluster.\n\n\n\n\n#### Endpoint URL\n", + "deprecated": true, "tags": [ "AI", - "10.4.0.cl" + "10.7.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SendMessageRequest" + "$ref": "#/components/schemas/QueryGetDecomposedQueryRequest" } } }, "required": true }, - "parameters": [ - { - "in": "path", - "name": "conversation_identifier", - "required": true, - "schema": { - "type": "string" - }, - "description": "Unique identifier of the conversation." - } - ], + "parameters": [], "responses": { "200": { "description": "Common successful response", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ResponseMessage" - } + "$ref": "#/components/schemas/eureka_DecomposeQueryResponse" } } } @@ -1244,10 +1111,7 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ResponseMessage" - } + "$ref": "#/components/schemas/eureka_DecomposeQueryResponse" } } } @@ -1295,32 +1159,105 @@ } } }, - "/api/rest/2.0/ai/instructions/set": { + "/api/rest/2.0/ai/agent/conversation/{conversation_identifier}/send": { "post": { - "operationId": "setNLInstructions", - "description": "\nBeta Version: 10.15.0.cl or later\n\nThis API allows users to set natural language (NL) instructions for a specific data-model to improve AI-generated answers and query processing. These instructions help guide the AI system to better understand the data context and provide more accurate responses.\n\nRequires `CAN_USE_SPOTTER` privilege, either edit access or `SPOTTER_COACHING_PRIVILEGE` on the data model, and a bearer token corresponding to the org where the data model exists.\n\n#### Usage guidelines\n\nTo set NL instructions for a data-model, the request must include:\n\n- `data_source_identifier`: The unique ID of the data-model for which to set NL instructions\n- `nl_instructions_info`: An array of instruction objects, each containing:\n - `instructions`: Array of text instructions for the LLM\n - `scope`: The scope of the instruction (`GLOBAL`). Currently only `GLOBAL` is supported. It can be extended to data-model-user scope in future.\n\n#### Instructions scope\n\n- **GLOBAL**: instructions that apply to all users querying this data model\n\nIf the request is successful, the API returns:\n\n- `success`: a boolean indicating whether the operation completed successfully\n\n#### Error responses\n\n| Code | Description |\n|------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege, lacks edit access or `SPOTTER_COACHING_PRIVILEGE` on the data model, or the bearer token does not correspond to the org where the data model exists. |\n\n> ###### Note:\n>\n> - To use this API, the user needs either edit access or `SPOTTER_COACHING_PRIVILEGE` on the data model, and must use the bearer token corresponding to the org where the data model exists.\n> - This endpoint is currently in Beta. Breaking changes may be introduced before the endpoint is made Generally Available.\n> - Available from version 10.15.0.cl and later.\n> - This endpoint requires Spotter — please contact ThoughtSpot Support to enable Spotter on your cluster.\n> - Instructions help improve the accuracy and relevance of AI-generated responses for the specified data-model.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "sendAgentConversationMessage", + "description": "\n Version: 26.5.0.cl or later\n\nVersion: 26.5.0.cl or later\n\nSends natural language messages to an existing Spotter agent conversation and returns the complete response synchronously.\n\nRequires `CAN_USE_SPOTTER` privilege and access to the metadata object associated with the conversation. The user must have access to the conversation session referenced by `conversation_identifier`. A conversation must first be created using the `createAgentConversation` API.\n\n#### Usage guidelines\n\nThe request must include:\n\n- `conversation_identifier`: the unique session ID returned by `createAgentConversation`, used for context continuity and message tracking\n- `messages`: an array of one or more text messages to send to the agent\n\nThe API returns an array of response objects, each containing:\n\n- `type`: the kind of response — `text`, `answer`, or `error`\n- `message`: the main content of the response\n- `metadata`: additional information depending on the message type (e.g., answer metadata includes analytics and visualization details)\n\n#### Error responses\n\n| Code | Description |\n|------|----------------------------------------------------------------------------------------------------------------------------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks permission on the referenced conversation. |\n\n> ###### Note:\n>\n> - This endpoint is Generally Available from version 26.5.0.cl.\n> - This endpoint requires Spotter - please contact ThoughtSpot support to enable Spotter on your cluster.\n> - For real-time streamed responses, use `sendAgentConversationMessageStreaming` instead.\n\n\n\n\n#### Endpoint URL\n", "tags": [ "AI", - "10.15.0.cl" + "26.5.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SetNLInstructionsRequest" + "$ref": "#/components/schemas/SendAgentConversationMessageRequest" } } }, "required": true }, - "parameters": [], + "parameters": [ + { + "in": "path", + "name": "conversation_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the conversation (used to track context)" + } + ], "responses": { "200": { "description": "Common successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/eureka_SetNLInstructionsResponse" + "type": "object" + }, + "examples": { + "example_1": { + "summary": "Send a message to an existing agent conversation", + "value": { + "messages": [ + { + "metadata": {}, + "internal": {}, + "type": "text", + "text": "\n\nI'll compare sales between 2025 and 2024. First, let me get the dataset context to identify the relevant sales and date columns.", + "agent_context": "" + }, + { + "metadata": {}, + "internal": {}, + "type": "text", + "text": "```json\n{\"search_mode\": \"semantic\", \"dataset_name\": \"(Sample) Retail - Apparel\", \"columns\": [{\"name\": \"sales\", \"type\": \"MEASURE\", \"data_type\": \"double\"}, {\"name\": \"date\", \"type\": \"ATTRIBUTE\", \"data_type\": \"date\", \"sample_values\": [\"2025\", \"2024\"]}]}\n```", + "agent_context": "" + }, + { + "metadata": {}, + "internal": {}, + "type": "text", + "text": "\n\nPerfect! I found the sales and date columns. I can see the dataset contains sales data for both 2025 and 2024. Now I'll create a comparison query to show sales for 2025 versus 2024.", + "agent_context": "" + }, + { + "metadata": { + "output": "", + "worksheet_id": "cd252e5c-b552-49a8-821d-3eadaa049cca", + "assumptions": "", + "chart_type": "KPI", + "interrupted": false, + "data_awareness_enabled": true + }, + "internal": {}, + "type": "answer", + "title": "Compare total sales for 2025 vs 2024", + "description": "", + "session_id": "842bb67a-e08e-4861-97e8-8db9538db51d", + "gen_no": 2, + "sage_query": "[sales] [date] = '2025' vs [date] = '2024'", + "tml_tokens": [ + "[sales]", + "[date] = '2025' vs [date] = '2024'" + ], + "formulas": [], + "parameters": [], + "subqueries": [], + "viz_suggestion": "CAEQIBomEiQ2NjE5NzI0Yy1kMjVlLTU4MDItOWNjOC1jNDA3MWY3OWY5MzAoATIA", + "ac_state": null + }, + { + "metadata": {}, + "internal": {}, + "type": "text", + "text": "\n\nThe visualization shows the side-by-side comparison of total sales (in USD) between the two years, allowing you to see the year-over-year performance. You can see the sales figures for both 2024 and 2025, making it easy to identify growth or decline trends in your retail apparel business.", + "agent_context": "" + } + ] + } + } } } } @@ -1330,7 +1267,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/eureka_SetNLInstructionsResponse" + "type": "object" } } } @@ -1378,32 +1315,88 @@ } } }, - "/api/rest/2.0/ai/answer/create": { + "/api/rest/2.0/ai/agent/conversation/{conversation_identifier}/send/stream": { "post": { - "operationId": "singleAnswer", - "description": "\nBeta Version: 10.4.0.cl or later\n\nProcesses a natural language query against a specified data model and returns a single AI-generated answer without requiring a conversation session.\n\nRequires `CAN_USE_SPOTTER` privilege and at least view access to the metadata object specified in the request.\n\n#### Usage guidelines\n\nThe request must include:\n- `query`: a natural language question (e.g., \"What were total sales last quarter?\")\n- `metadata_identifier`: the unique ID of the data source to query against\n\nIf the request is successful, the API returns a response message containing:\n- `session_identifier`: the unique ID of the generated response\n- `generation_number`: the generation number of the response\n- `message_type`: the type of the response (e.g., `TSAnswer`)\n- `visualization_type`: the generated visualization type (`Chart`, `Table`, or `Undefined`)\n- `tokens` / `display_tokens`: the search tokens and user-friendly display tokens for the response\n\n#### Error responses\n\n| Code | Description |\n|------|-----------------------------------------------------------------------------------------------------------------------------------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks view permission on the specified metadata object. |\n\n> ###### Note:\n> * This endpoint is currently in Beta. Breaking changes may be introduced before the endpoint is made Generally Available.\n> * This endpoint requires Spotter - please contact ThoughtSpot support to enable Spotter on your cluster.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "sendAgentConversationMessageStreaming", + "description": "\n Version: 26.5.0.cl or later\n\nVersion: 26.5.0.cl or later\n\nSends one or more natural language messages to an existing Spotter agent conversation and returns the response as a real-time Server-Sent Events stream.\n\nRequires `CAN_USE_SPOTTER` privilege and access to the metadata object associated with the conversation. The user must have access to the conversation session referenced by `conversation_identifier`. A conversation must first be created using the `createAgentConversation` API.\n\n#### Usage guidelines\n\nThe request must include:\n\n- `conversation_identifier`: the unique session ID returned by `createAgentConversation`, used for context continuity and message tracking\n- `messages`: an array of one or more text messages to send to the agent\n\nIf the request is valid, the API returns a Server-Sent Events (SSE) stream. Each line has the form `data: [{\"type\": \"...\", ...}]` — a JSON array of event objects. Event types include:\n\n- `ack`: confirms receipt of the request (`node_id`)\n- `conv_title`: conversation title (`title`, `conv_id`)\n- `notification`: status updates on operations (`group_id`, `metadata`, `code` — e.g. `TOOL_CALL_NOTIFICATION`, `nls_start`, `FINAL_RESPONSE_NOTIFICATION`)\n- `text-chunk`: incremental content chunks (`id`, `group_id`, `metadata` with `format` and `type` such as `thinking` or `text`, `content`)\n- `text`: full text block with same structure as `text-chunk`\n- `answer`: structured answer with metadata (`id`, `group_id`, `metadata` with `sage_query`, `session_id`, `title`, etc., `title`)\n- `error`: if a failure occurs\n\n#### Error responses\n\n| Code | Description |\n| ---- | -------------------------------------------------------------------------------------------------------------------------------- |\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks permission on the referenced conversation. |\n\n> ###### Note:\n>\n> - This endpoint is Generally Available from version 26.5.0.cl.\n> - This endpoint requires Spotter - please contact ThoughtSpot support to enable Spotter on your cluster.\n> - The streaming protocol uses Server-Sent Events (SSE).\n> - For the complete response in a single payload, use `sendAgentConversationMessage` instead.\n\n\n\n\n#### Endpoint URL\n", "tags": [ "AI", - "10.4.0.cl" + "26.5.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SingleAnswerRequest" + "$ref": "#/components/schemas/SendAgentConversationMessageStreamingRequest" } } }, "required": true }, - "parameters": [], - "responses": { - "200": { - "description": "Common successful response", - "content": { - "application/json": { + "parameters": [ + { + "in": "path", + "name": "conversation_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier for the conversation (used to track context)" + } + ], + "responses": { + "200": { + "description": "Common successful response", + "content": { + "application/json": { "schema": { - "$ref": "#/components/schemas/ResponseMessage" + "$ref": "#/components/schemas/SendAgentMessageResponse" + }, + "examples": { + "example_1": { + "summary": "SSE stream — each line is data: [{\"type\": \"...\", ...}]. Events arrive over time; this example shows a minimal sequence.", + "value": [ + { + "type": "ack", + "node_id": "aGxzcFVrtom8" + }, + { + "type": "conv_title", + "title": "Sales 2025 vs 2024", + "conv_id": "-XIi04l5rrof" + }, + { + "type": "notification", + "group_id": "cDEsAQbSnd3J", + "metadata": { + "type": "thinking", + "tool_title": "Analyzing Sales Performance: 2025 vs 2024" + }, + "code": "TOOL_CALL_NOTIFICATION" + }, + { + "id": "mNAdvy-NK2l6", + "type": "text-chunk", + "group_id": "cDEsAQbSnd3J", + "metadata": { + "format": "markdown", + "type": "thinking" + }, + "content": "\n\nI need to compare sales performance between 2025 and 2024." + }, + { + "id": "hxWMDP-pgR3B", + "type": "answer", + "group_id": "m1MTvttEUa7o", + "metadata": { + "sage_query": "[sales] [date] = '2025' vs [date] = '2024'", + "session_id": "431adcf9-1328-4d8c-81a1-0faa7fa37ba6", + "title": "Compare sales for 2025 vs 2024" + }, + "title": "Compare sales for 2025 vs 2024" + } + ] + } } } } @@ -1413,7 +1406,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ResponseMessage" + "$ref": "#/components/schemas/SendAgentMessageResponse" } } } @@ -1461,14 +1454,25 @@ } } }, - "/api/rest/2.0/ai/agent/conversation/{conversation_identifier}/stop-response": { + "/api/rest/2.0/ai/agent/{conversation_identifier}/converse": { "post": { - "operationId": "stopConversation", - "description": "\nStops an in-progress agent conversation response.
Version: 26.6.0.cl or later\n\nVersion: 26.6.0.cl or later\n\nStops an in-progress agent response for the specified conversation. Use this endpoint to cancel a response that is actively being generated — for example, when the user navigates away, reformulates their question, or no longer needs the current result.\n\nRequires `CAN_USE_SPOTTER` privilege and access to the specified conversation.\n\n#### Usage guidelines\n\nThe request must include:\n\n- `conversation_identifier` *(path parameter)*: the unique ID of the conversation whose active response should be stopped, as returned by `createAgentConversation`\n\nA successful request returns an empty `204 No Content` response. If there is no active response in progress at the time of the call, the request is still treated as successful.\n\nAfter stopping a response, the conversation session remains active. You can continue sending messages using `sendAgentConversationMessage` or `sendAgentConversationMessageStreaming`.\n\n#### Example request\n\n```bash\nPOST /api/rest/2.0/ai/agent/conversation/{conversation_identifier}/stop-response\n```\n\n#### Typical usage scenario\n\nThis endpoint is useful when integrating Spotter into a chat UI where users can cancel a long-running query. For example:\n\n1. User sends a message via `sendAgentConversationMessageStreaming`.\n2. User clicks a \"Stop generating\" button while the response is streaming.\n3. Your client calls `stopConversation` with the active `conversation_identifier`.\n4. The stream is terminated and the user can ask a new question.\n\n#### Error responses\n\n| Code | Description |\n|------|-------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks access to the specified conversation. |\n\n> ###### Note:\n>\n> - Calling this endpoint when no response is in progress does not return an error.\n> - The conversation context is preserved after stopping — previous messages and answers remain accessible.\n> - Available from version 26.6.0.cl and later.\n> - This endpoint requires Spotter — please contact ThoughtSpot Support to enable Spotter on your cluster.\n> - This feature is available only for **Spotter 3** (`SPOTTER3`) version.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "sendAgentMessage", + "description": "\nBeta Version: 26.2.0.cl or later\n\n**Deprecated** — Use `sendAgentConversationMessage` instead.\n\nSend natural language messages to an existing Spotter agent conversation and returns the complete response synchronously.\n\nRequires `CAN_USE_SPOTTER` privilege and access to the metadata object associated with the conversation. The user must have access to the conversation session referenced by `conversation_identifier`.\nA conversation must first be created using the `createAgentConversation` API.\n\n#### Usage guidelines\n\nThe request must include:\n\n- `conversation_identifier`: the unique session ID returned by `createAgentConversation`, used for context continuity and message tracking\n- `messages`: an array of one or more text messages to send to the agent\n\nThe API returns an array of response objects, each containing:\n\n- `type`: the kind of response — `text`, `answer`, or `error`\n- `message`: the main content of the response\n- `metadata`: additional information depending on the message type (e.g., answer metadata includes analytics and visualization details)\n\n#### Error responses\n\n| Code | Description |\n|------|----------------------------------------------------------------------------------------------------------------------------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks permission on the referenced conversation. |\n\n> ###### Note:\n>\n> - This endpoint is deprecated. Use `sendAgentConversationMessage` for new integrations.\n> - This endpoint is currently in Beta. Breaking changes may be introduced before the endpoint is made Generally Available.\n> - This endpoint requires Spotter - please contact ThoughtSpot support to enable Spotter on your cluster.\n\n\n\n\n#### Endpoint URL\n", + "deprecated": true, "tags": [ "AI", - "26.6.0.cl" + "26.2.0.cl" ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SendAgentMessageRequest" + } + } + }, + "required": true + }, "parameters": [ { "in": "path", @@ -1477,12 +1481,29 @@ "schema": { "type": "string" }, - "description": "Unique identifier of the conversation to stop." + "description": "Unique identifier for the conversation (used to track context)" } ], "responses": { - "204": { - "description": "Successfully stopped the in-progress agent conversation response for the given." + "200": { + "description": "Common successful response", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + }, + "201": { + "description": "Common error response", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } }, "400": { "description": "Operation failed", @@ -1527,19 +1548,20 @@ } } }, - "/api/rest/2.0/auth/configure": { + "/api/rest/2.0/ai/agent/converse/sse": { "post": { - "operationId": "configureAuthSettings", - "description": "\n Version: 26.6.0.cl or later\n\nVersion: 26.6.0.cl or later\n\nEnables or disables authentication at cluster or org level for the specified auth type. Currently supports `TRUSTED_AUTH`.\n\n#### Required privileges\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `CONTROL_TRUSTED_AUTH` (**Can Enable or Disable Trusted Authentication**) privilege. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled, the `CONTROL_TRUSTED_AUTH` privilege is required.\n\n#### Usage guidelines\n\nUse `cluster_preferences` to enable or disable authentication at the cluster level. Cluster-level settings can only be configured from the Primary Org.\n- `ENABLED` — Generates a new access token if one does not exist. An existing token is preserved.\n- `DISABLED` — Revokes the existing cluster-level access token.\n\nUse `org_preferences` to enable or disable authentication for one or more Orgs. Each entry must include an `org_identifier` (unique ID or name) and an `auth_status`. Org-level configuration requires the per-Org authentication feature to be enabled on your instance.\n- `ENABLED` — Generates a new org-level access token if one does not exist.\n- `DISABLED` — Revokes the existing org-level access token for that Org.\n\nBoth `cluster_preferences` and `org_preferences` are optional. Omitting a field leaves the corresponding settings unchanged. If both are omitted, the API returns `204 No Content` without making any changes.\n\n**Note**: Cluster-level and org-level settings are independent of each other. Enabling or disabling one does not affect the other.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "sendAgentMessageStreaming", + "description": "\nBeta Version: 26.2.0.cl or later\n\n**Deprecated** — Use `sendAgentConversationMessageStreaming` instead.\n\nSends one or more natural language messages to an existing Spotter agent conversation and returns the response as a real-time Server-Sent Events stream.\n\nRequires `CAN_USE_SPOTTER` privilege and access to the metadata object associated with the conversation. The user must have access to the conversation session referenced by `conversation_identifier`. A conversation must first be created using the `createAgentConversation` API.\n\n#### Usage guidelines\n\nThe request must include:\n\n- `conversation_identifier`: the unique session ID returned by `createAgentConversation`, used for context continuity and message tracking\n- `messages`: an array of one or more text messages to send to the agent\n\nIf the request is valid, the API returns a Server-Sent Events (SSE) stream. Each line has the form `data: [{\"type\": \"...\", ...}]` — a JSON array of event objects. Event types include:\n\n- `ack`: confirms receipt of the request (`node_id`)\n- `conv_title`: conversation title (`title`, `conv_id`)\n- `notification`: status updates on operations (`group_id`, `metadata`, `code` — e.g. `TOOL_CALL_NOTIFICATION`, `nls_start`, `FINAL_RESPONSE_NOTIFICATION`)\n- `text-chunk`: incremental content chunks (`id`, `group_id`, `metadata` with `format` and `type` such as `thinking` or `text`, `content`)\n- `text`: full text block with same structure as `text-chunk`\n- `answer`: structured answer with metadata (`id`, `group_id`, `metadata` with `sage_query`, `session_id`, `title`, etc., `title`)\n- `error`: if a failure occurs\n\n#### Error responses\n\n| Code | Description |\n|------|----------------------------------------------------------------------------------------------------------------------------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks permission on the referenced conversation. |\n\n> ###### Note:\n>\n> - This endpoint is deprecated. Use `sendAgentConversationMessageStreaming` for new integrations.\n> - This endpoint is currently in Beta. Breaking changes may be introduced before the endpoint is made Generally Available.\n> - This endpoint requires Spotter - please contact ThoughtSpot support to enable Spotter on your cluster.\n> - The streaming protocol uses Server-Sent Events (SSE).\n\n\n\n\n#### Endpoint URL\n", + "deprecated": true, "tags": [ - "Authentication", - "26.6.0.cl" + "AI", + "26.2.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ConfigureAuthSettingsRequest" + "$ref": "#/components/schemas/SendAgentMessageStreamingRequest" } } }, @@ -1547,11 +1569,28 @@ }, "parameters": [], "responses": { - "204": { - "description": "Trusted authentication settings configured successfully." + "200": { + "description": "Common successful response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SendAgentMessageResponse" + } + } + } + }, + "201": { + "description": "Common error response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SendAgentMessageResponse" + } + } + } }, "400": { - "description": "Invalid request.", + "description": "Operation failed", "content": { "application/json": { "schema": { @@ -1581,7 +1620,7 @@ } }, "500": { - "description": "Unexpected error", + "description": "Operation failed", "content": { "application/json": { "schema": { @@ -1593,28 +1632,64 @@ } } }, - "/api/rest/2.0/auth/session/user": { - "get": { - "operationId": "getCurrentUserInfo", - "description": "\n Version: 9.0.0.cl or later\n\nRetrieves details of the current user session for the token provided in the request header.\n\nAny ThoughtSpot user can access this endpoint and send an API request. The data returned in the API response varies according to user's privilege and object access permissions.\n\n**NOTE**: In ThoughtSpot, users with cluster administration privileges can access all Orgs by default. However, unless the administrator is explicitly added to an Org, the Orgs list in the session information returned by the API will include only the Primary Org. To include other Orgs in the API response, you must explicitly add the administrator to each Org in the Admin settings page in the UI or via user REST API.\n\n\n\n#### Endpoint URL\n", + "/api/rest/2.0/ai/conversation/{conversation_identifier}/converse": { + "post": { + "operationId": "sendMessage", + "description": "\nBeta Version: 10.4.0.cl or later\n\nSends a follow-up message to an existing conversation within the context of a data model.\n\nRequires `CAN_USE_SPOTTER` privilege and at least view access to the metadata object specified in the request. A conversation must first be created using the `createConversation` API.\n\n#### Usage guidelines\n\nThe request must include:\n- `conversation_identifier`: the unique session ID returned by `createConversation`\n- `metadata_identifier`: the unique ID of the data source used for the conversation\n- `message`: a natural language string with the follow-up question\n\nIf the request is successful, the API returns an array of response messages, each containing:\n- `session_identifier`: the unique ID of the generated response\n- `generation_number`: the generation number of the response\n- `message_type`: the type of the response (e.g., `TSAnswer`)\n- `visualization_type`: the generated visualization type (`Chart`, `Table`, or `Undefined`)\n- `tokens` / `display_tokens`: the search tokens and user-friendly display tokens for the response\n\n#### Error responses\n\n| Code | Description |\n|------|-----------------------------------------------------------------------------------------------------------------------------------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks view permission on the specified metadata object. |\n\n> ###### Note:\n> * This endpoint is currently in Beta. Breaking changes may be introduced before the endpoint is made Generally Available.\n> * This endpoint requires Spotter - please contact ThoughtSpot support to enable Spotter on your cluster.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Authentication", - "9.0.0.cl" + "AI", + "10.4.0.cl" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SendMessageRequest" + } + } + }, + "required": true + }, + "parameters": [ + { + "in": "path", + "name": "conversation_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the conversation." + } ], - "parameters": [], "responses": { "200": { - "description": "Fetch current session user detail successful.", + "description": "Common successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/User" + "type": "array", + "items": { + "$ref": "#/components/schemas/ResponseMessage" + } + } + } + } + }, + "201": { + "description": "Common error response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ResponseMessage" + } } } } }, "400": { - "description": "Invalid request.", + "description": "Operation failed", "content": { "application/json": { "schema": { @@ -1644,7 +1719,7 @@ } }, "500": { - "description": "Unexpected error", + "description": "Operation failed", "content": { "application/json": { "schema": { @@ -1656,28 +1731,48 @@ } } }, - "/api/rest/2.0/auth/session/token": { - "get": { - "operationId": "getCurrentUserToken", - "description": "\n Version: 9.4.0.cl or later\n\nRetrieves details of the current session token for the bearer token provided in the request header.\n\nThis API endpoint does not create a new token. Instead, it returns details about the token, including the token string, creation time, expiration time, and the associated user.\n\nUse this endpoint to introspect your current session token, debug authentication issues, or when a frontend application needs session token details.\n\nAny ThoughtSpot user with a valid bearer token can access this endpoint and send an API request\n\n\n\n\n#### Endpoint URL\n", + "/api/rest/2.0/ai/agent/instructions/set": { + "put": { + "operationId": "setAgentInstructions", + "description": "\nBeta Version: 26.6.0.cl or later\n\nCreates or updates the admin instructions for the AI agent (Spotter). Admin instructions are tenant- and org-scoped text that guide agent behavior across all conversations. If instructions already exist for the org, they are replaced (upsert semantics).\n\nRequires admin privileges. Only users with org admin access can set agent instructions.\n\n#### Usage guidelines\n\nThe request must include:\n\n- `instructions`: the instructions text to apply to the agent (maximum 5000 characters)\n\nInstructions are validated against system guardrails before being saved. If the instructions contain content that conflicts with guardrails, the request is rejected with a `409` error and the existing instructions remain unchanged.\n\nIf the request is successful, the response includes the saved `AgentInstructions` record:\n\n- `id`: unique identifier of the record\n- `instructions`: the saved instructions text\n- `created_at`: ISO timestamp when the instructions were first created\n- `updated_at`: ISO timestamp of this update\n- `last_updated_by`: user ID of the admin who performed this update\n\n#### Error responses\n\n| Code | Description |\n|------|-------------|\n| 400 | Bad request — the request body is missing required fields or the `instructions` field exceeds the maximum allowed length of 5000 characters. |\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have org admin privileges required to set agent instructions. |\n| 409 | Conflict — the provided instructions conflict with system guardrails. Review and revise the instructions text before retrying. |\n| 500 | Internal server error. |\n\n> ###### Note:\n>\n> - This operation uses upsert semantics: it creates the instructions record if none exists, or replaces the existing one.\n> - Instructions take effect immediately for new conversations created after the update.\n> - Use `getAgentInstructions` to retrieve the current instructions before making changes.\n> - Available from version 26.6.0.cl and later.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Authentication", - "9.4.0.cl" + "AI", + "26.6.0.cl" ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SetAgentInstructionsRequest" + } + } + }, + "required": true + }, "parameters": [], "responses": { "200": { - "description": "Fetching token for current user successful.", + "description": "Common successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GetTokenResponse" + "$ref": "#/components/schemas/AgentInstructions" + } + } + } + }, + "201": { + "description": "Common error response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentInstructions" } } } }, "400": { - "description": "Invalid request.", + "description": "Operation failed", "content": { "application/json": { "schema": { @@ -1707,7 +1802,7 @@ } }, "500": { - "description": "Unexpected error", + "description": "Operation failed", "content": { "application/json": { "schema": { @@ -1719,19 +1814,19 @@ } } }, - "/api/rest/2.0/auth/token/custom": { + "/api/rest/2.0/ai/instructions/set": { "post": { - "operationId": "getCustomAccessToken", - "description": "\n Version: 10.4.0.cl or later\n\nCreates an authentication token that provides values for the formula variables in the Row Level Security (RLS) rules for a given user. Recommended for use cases that require Attribute-based access control (ABAC) via RLS.\n\n#### Required privileges\n\nTo add a new user and assign privileges during auto-creation, the `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege is required. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled, the `CONTROL_TRUSTED_AUTH` (**Can Enable or Disable Trusted Authentication**) privilege and edit access to the data source are required.\n\nTo configure formula variables for all Orgs on your instance or the Primary Org, cluster administration privileges are required. Org administrators can configure formula variables for their respective Orgs. If Role-Based Access Control (RBAC) is enabled, users with the `CAN_MANAGE_VARIABLES` (**Can manage variables**) role privilege can also create and manage variables for their Org context.\n\n#### Usage guidelines\n\nYou can generate a token by providing a `username` and `password`, or by using a `secret_key`. To generate a `secret_key`, the administrator must enable [Trusted authentication](https://developers.thoughtspot.com/docs/trusted-auth-secret-key) in the **Develop** > **Customizations** > **Security Settings** page.\n\n**Note**:\n* When both `password` and `secret_key` are included in the API request, `password` takes precedence.\n* If [Multi-Factor Authentication (MFA)](https://docs.thoughtspot.com/cloud/latest/authentication-local-mfa) is enabled on your instance, the API login request with `username` and `password` returns an error. You can switch to token-based authentication with `secret_key` or contact ThoughtSpot Support for assistance.\n\nThe token obtained from ThoughtSpot is valid for 5 minutes by default. You can configure the token expiration time as required.\n\n#### ABAC via RLS\n\nTo implement ABAC via RLS and assign security entitlements to users during session creation, generate a token with custom variable values. The values set in the authentication token are applied to the formula variables referenced in RLS rules at the table level, which determines the data each user can access based on their entitlements.\n\nThe variable values can be configured to persist for a specific set of Models in user sessions initiated with the token, allowing different RLS rules to be set for different data models. Once defined, the rules are added to the user's `variable_values` object, after which all sessions will use the persisted values.\n\nFor more information, see [ABAC via tokens Documentation](https://developers.thoughtspot.com/docs/abac-via-rls-variables).\n\n##### Formula variables\nBefore defining variable values, ensure the variables are created and available on your instance. To create a formula variable, you can use the **Create variable** (`/api/rest/2.0/template/variables/create`) REST API endpoint, with the variable `type` set as `Formula_Variable` in the API request.\n\nThe API doesn't support `\"persist_option\": \"RESET\"` and `\"persist_option\": \"NONE\"` when `variable_values` are defined in the request. If you are using `variable_values` for token generation, you must use other supported persist options such as `APPEND` or `REPLACE`.\n\nIf you want to use `RESET` or `NONE`, do not pass any `variable_values`. In such cases, `variable_values` will remain unaffected.\n\n#### Supported objects\n\nThe supported object type is `LOGICAL_TABLE`. When using `object_id` with `variable_values`, models are supported.\n\n#### Just-in-time provisioning\n\nFor [just-in-time user creation and provisioning](https://developers.thoughtspot.com/docs/just-in-time-provisioning), specify the following attributes in the API request:\n\n* `auto_create`\n* `username`\n* `display_name`\n* `email`\n* `groups`\n\nSet `auto_create` to `true` if the username does not exist in ThoughtSpot. If the username already exists in ThoughtSpot and `auto_create` is set to `true`, user properties such as display name, email, Org and group entitlements will not be updated with new values. Setting `auto_create` to `true` does not create formula variables. Hence, this setting will not be applicable to `variable_values`.\n\n#### Important point to note\nAll options in the token creation APIs that define user access to data in ThoughtSpot will take effect during token creation, not when the token is used for authentication. For example, `auto_create:true` will create the user when the authentication token is created. Persist options such as `APPEND` and `REPLACE` will persist `variable_values` on the user profile when the token is created.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "setNLInstructions", + "description": "\nBeta Version: 10.15.0.cl or later\n\nThis API allows users to set natural language (NL) instructions for a specific data-model to improve AI-generated answers and query processing. These instructions help guide the AI system to better understand the data context and provide more accurate responses.\n\nRequires `CAN_USE_SPOTTER` privilege, either edit access or `SPOTTER_COACHING_PRIVILEGE` on the data model, and a bearer token corresponding to the org where the data model exists.\n\n#### Usage guidelines\n\nTo set NL instructions for a data-model, the request must include:\n\n- `data_source_identifier`: The unique ID of the data-model for which to set NL instructions\n- `nl_instructions_info`: An array of instruction objects, each containing:\n - `instructions`: Array of text instructions for the LLM\n - `scope`: The scope of the instruction (`GLOBAL`). Currently only `GLOBAL` is supported. It can be extended to data-model-user scope in future.\n\n#### Instructions scope\n\n- **GLOBAL**: instructions that apply to all users querying this data model\n\nIf the request is successful, the API returns:\n\n- `success`: a boolean indicating whether the operation completed successfully\n\n#### Error responses\n\n| Code | Description |\n|------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege, lacks edit access or `SPOTTER_COACHING_PRIVILEGE` on the data model, or the bearer token does not correspond to the org where the data model exists. |\n\n> ###### Note:\n>\n> - To use this API, the user needs either edit access or `SPOTTER_COACHING_PRIVILEGE` on the data model, and must use the bearer token corresponding to the org where the data model exists.\n> - This endpoint is currently in Beta. Breaking changes may be introduced before the endpoint is made Generally Available.\n> - Available from version 10.15.0.cl and later.\n> - This endpoint requires Spotter — please contact ThoughtSpot Support to enable Spotter on your cluster.\n> - Instructions help improve the accuracy and relevance of AI-generated responses for the specified data-model.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Authentication", - "10.4.0.cl" + "AI", + "10.15.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GetCustomAccessTokenRequest" + "$ref": "#/components/schemas/SetNLInstructionsRequest" } } }, @@ -1740,18 +1835,28 @@ "parameters": [], "responses": { "200": { - "description": "ABAC token creation was successful.", + "description": "Common successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AccessToken" + "$ref": "#/components/schemas/eureka_SetNLInstructionsResponse" } } } }, - "400": { - "description": "Invalid request. This could be due to missing or incorrect parameters.", - "content": { + "201": { + "description": "Common error response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/eureka_SetNLInstructionsResponse" + } + } + } + }, + "400": { + "description": "Operation failed", + "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" @@ -1760,7 +1865,7 @@ } }, "401": { - "description": "Unauthorized access. The request could not be authenticated.", + "description": "Unauthorized access.", "content": { "application/json": { "schema": { @@ -1770,7 +1875,7 @@ } }, "403": { - "description": "Forbidden access. The user does not have permission to access this resource.", + "description": "Forbidden access.", "content": { "application/json": { "schema": { @@ -1780,7 +1885,7 @@ } }, "500": { - "description": "An unexpected error occurred on the server.", + "description": "Operation failed", "content": { "application/json": { "schema": { @@ -1789,23 +1894,22 @@ } } } - }, - "security": [] + } } }, - "/api/rest/2.0/auth/token/full": { + "/api/rest/2.0/ai/answer/create": { "post": { - "operationId": "getFullAccessToken", - "description": "\n Version: 9.0.0.cl or later\n\nGenerates an authentication token for creating a full session in ThoughtSpot for a given user. Recommended for use cases that do not require Attribute-based access control (ABAC) via Row Level Security (RLS).\n\n#### Usage guidelines\n\nYou can generate a token for a user by providing a `username` and `password`, or by using the `secret_key` generated for your instance. To generate a `secret_key`, the administrator must enable [Trusted authentication](https://developers.thoughtspot.com/docs/trusted-auth-secret-key) in the **Develop** > **Customizations** > **Security Settings** page.\n\n**Note**:\n* When both `password` and `secret_key` are included in the API request, `password` takes precedence.\n* If [Multi-Factor Authentication (MFA)](https://docs.thoughtspot.com/cloud/latest/authentication-local-mfa) is enabled on your instance, the API login request with `username` and `password` returns an error. You can switch to token-based authentication with `secret_key` or contact ThoughtSpot Support for assistance.\n\nThe token obtained from ThoughtSpot is valid for 5 minutes by default. You can configure the token expiration time as required.\n\n#### Just-in-time provisioning\n\nFor [just-in-time user creation and provisioning](https://developers.thoughtspot.com/docs/just-in-time-provisioning), specify the following attributes in the API request:\n\n* `auto_create`\n* `username`\n* `display_name`\n* `email`\n* `group_identifiers`\n\nSet `auto_create` to `true` if the username does not exist in ThoughtSpot. If the user already exists in ThoughtSpot and `auto_create` is set to `true`, user properties such as display name, email and group assignment will be updated.\n\nTo add a new user and assign privileges during auto-creation, the `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege is required. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled, the `CONTROL_TRUSTED_AUTH` (**Can Enable or Disable Trusted Authentication**) privilege is required.\n\n#### Important point to note\nAll options in the token creation APIs that define user access to data in ThoughtSpot will take effect during token creation, not when the token is used for authentication. For example, `auto_create:true` will create the user when the authentication token is created.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "singleAnswer", + "description": "\nBeta Version: 10.4.0.cl or later\n\nProcesses a natural language query against a specified data model and returns a single AI-generated answer without requiring a conversation session.\n\nRequires `CAN_USE_SPOTTER` privilege and at least view access to the metadata object specified in the request.\n\n#### Usage guidelines\n\nThe request must include:\n- `query`: a natural language question (e.g., \"What were total sales last quarter?\")\n- `metadata_identifier`: the unique ID of the data source to query against\n\nIf the request is successful, the API returns a response message containing:\n- `session_identifier`: the unique ID of the generated response\n- `generation_number`: the generation number of the response\n- `message_type`: the type of the response (e.g., `TSAnswer`)\n- `visualization_type`: the generated visualization type (`Chart`, `Table`, or `Undefined`)\n- `tokens` / `display_tokens`: the search tokens and user-friendly display tokens for the response\n\n#### Error responses\n\n| Code | Description |\n|------|-----------------------------------------------------------------------------------------------------------------------------------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks view permission on the specified metadata object. |\n\n> ###### Note:\n> * This endpoint is currently in Beta. Breaking changes may be introduced before the endpoint is made Generally Available.\n> * This endpoint requires Spotter - please contact ThoughtSpot support to enable Spotter on your cluster.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Authentication", - "9.0.0.cl" + "AI", + "10.4.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GetFullAccessTokenRequest" + "$ref": "#/components/schemas/SingleAnswerRequest" } } }, @@ -1814,17 +1918,27 @@ "parameters": [], "responses": { "200": { - "description": "Bearer auth token creation successful.", + "description": "Common successful response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Token" + "$ref": "#/components/schemas/ResponseMessage" + } + } + } + }, + "201": { + "description": "Common error response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResponseMessage" } } } }, "400": { - "description": "Invalid request.", + "description": "Operation failed", "content": { "application/json": { "schema": { @@ -1854,7 +1968,7 @@ } }, "500": { - "description": "Unexpected error", + "description": "Operation failed", "content": { "application/json": { "schema": { @@ -1863,42 +1977,34 @@ } } } - }, - "security": [] + } } }, - "/api/rest/2.0/auth/token/object": { + "/api/rest/2.0/ai/agent/conversation/{conversation_identifier}/stop-response": { "post": { - "operationId": "getObjectAccessToken", - "description": "\n Version: 9.0.0.cl or later\n\nGenerates an authentication token that provides access to a specific metadata object. This object list is intersected with the list of objects the user is allowed to access via group membership. For more information, see [Object security](https://docs.thoughtspot.com/cloud/latest/security-data-object#object_security).\n\n#### Usage guidelines\n\nYou can generate a token for a user by providing a `username` and `password`, or by using the `secret_key` generated for your instance. To generate a `secret_key`, the administrator must enable [Trusted authentication](https://developers.thoughtspot.com/docs/trusted-auth-secret-key) in the **Develop** > **Customizations** > **Security Settings** page.\n\n**Note**:\n* When both `password` and `secret_key` are included in the API request, `password` takes precedence.\n* If [Multi-Factor Authentication (MFA)](https://docs.thoughtspot.com/cloud/latest/authentication-local-mfa) is enabled on your instance, the API login request with `username` and `password` returns an error. You can switch to token-based authentication with `secret_key` or contact ThoughtSpot Support for assistance.\n\nThe token obtained from ThoughtSpot is valid for 5 minutes by default. You can configure the token expiration time as required.\n\n#### Just-in-time provisioning\n\nFor [just-in-time user creation and provisioning](https://developers.thoughtspot.com/docs/just-in-time-provisioning), specify the following attributes in the API request:\n\n* `auto_create`\n* `username`\n* `display_name`\n* `email`\n* `group_identifiers`\n\nSet `auto_create` to `true` if the user is not available in ThoughtSpot. If the user already exists in ThoughtSpot and the `auto_create` parameter is set to `true`, user properties such as display name, email, and group assignment will be updated.\n\nTo add a new user and assign privileges, the `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege is required. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled, the `CONTROL_TRUSTED_AUTH`(**Can Enable or Disable Trusted Authentication**) privilege is required.\n\n#### Important point to note\n\nAll options in the token creation APIs that define user access to data in ThoughtSpot will take effect during token creation, not when the token is used for authentication. For example, `auto_create:true` will create the user when the authentication token is created.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "stopConversation", + "description": "\nStops an in-progress agent conversation response.
Version: 26.6.0.cl or later\n\nVersion: 26.6.0.cl or later\n\nStops an in-progress agent response for the specified conversation. Use this endpoint to cancel a response that is actively being generated — for example, when the user navigates away, reformulates their question, or no longer needs the current result.\n\nRequires `CAN_USE_SPOTTER` privilege and access to the specified conversation.\n\n#### Usage guidelines\n\nThe request must include:\n\n- `conversation_identifier` *(path parameter)*: the unique ID of the conversation whose active response should be stopped, as returned by `createAgentConversation`\n\nA successful request returns an empty `204 No Content` response. If there is no active response in progress at the time of the call, the request is still treated as successful.\n\nAfter stopping a response, the conversation session remains active. You can continue sending messages using `sendAgentConversationMessage` or `sendAgentConversationMessageStreaming`.\n\n#### Example request\n\n```bash\nPOST /api/rest/2.0/ai/agent/conversation/{conversation_identifier}/stop-response\n```\n\n#### Typical usage scenario\n\nThis endpoint is useful when integrating Spotter into a chat UI where users can cancel a long-running query. For example:\n\n1. User sends a message via `sendAgentConversationMessageStreaming`.\n2. User clicks a \"Stop generating\" button while the response is streaming.\n3. Your client calls `stopConversation` with the active `conversation_identifier`.\n4. The stream is terminated and the user can ask a new question.\n\n#### Error responses\n\n| Code | Description |\n|------|-------------|\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks access to the specified conversation. |\n\n> ###### Note:\n>\n> - Calling this endpoint when no response is in progress does not return an error.\n> - The conversation context is preserved after stopping — previous messages and answers remain accessible.\n> - Available from version 26.6.0.cl and later.\n> - This endpoint requires Spotter — please contact ThoughtSpot Support to enable Spotter on your cluster.\n> - This feature is available only for **Spotter 3** (`SPOTTER3`) version.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Authentication", - "9.0.0.cl" + "AI", + "26.6.0.cl" + ], + "parameters": [ + { + "in": "path", + "name": "conversation_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the conversation to stop." + } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetObjectAccessTokenRequest" - } - } - }, - "required": true - }, - "parameters": [], "responses": { - "200": { - "description": "Bearer auth token creation successful.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Token" - } - } - } + "204": { + "description": "Successfully stopped the in-progress agent conversation response for the given." }, "400": { - "description": "Invalid request.", + "description": "Operation failed", "content": { "application/json": { "schema": { @@ -1928,7 +2034,7 @@ } }, "500": { - "description": "Unexpected error", + "description": "Operation failed", "content": { "application/json": { "schema": { @@ -1937,35 +2043,44 @@ } } } - }, - "security": [] + } } }, - "/api/rest/2.0/auth/session/login": { + "/api/rest/2.0/ai/agent/conversations/{conversation_identifier}/update": { "post": { - "operationId": "login", - "description": "\n Version: 9.0.0.cl or later\n\nCreates a login session for a ThoughtSpot user with Basic authentication.\n\nIn Basic authentication method, REST clients log in to ThoughtSpot using `username` and `password` attributes. On a multi-tenant cluster with Orgs, users can pass the ID of the Org in the API request to log in to a specific Org context.\n\n**Note**: If Multi-Factor Authentication (MFA) is enabled on your instance, the API login request with basic authentication (`username` and `password` ) returns an error. Contact ThoughtSpot Support for assistance.\n\nA successful login returns a session cookie that can be used in your subsequent API requests.\n\n\n\n#### Endpoint URL\n", + "operationId": "updateConversation", + "description": "\nUpdates attributes of an existing agent conversation. Currently only the\ndisplay title can be updated; additional conversation attributes may be\nsupported in future versions. At least one updatable attribute must be\nprovided in the request body.
Version: 26.7.0.cl or later\n\nUpdates attributes of an existing saved agent conversation. Currently only the conversation's display `title` can be updated; additional updatable attributes may be supported in future versions. At least one updatable attribute must be supplied in the request body.\n\nRequires `CAN_USE_SPOTTER` privilege and ownership of the conversation being updated.\n\n#### Usage guidelines\n\nThe request must include:\n\n- `conversation_identifier` *(path parameter)*: the unique ID of the conversation to update, as returned by `createAgentConversation` or `getConversationList`\n- At least one updatable attribute in the request body:\n - `title` *(optional)*: the new display name for the conversation. When provided, must be a non-empty string.\n\nA successful request returns an empty `204 No Content` response. Updated attributes are reflected immediately in subsequent calls to `getConversationList`.\n\n#### Example request\n\n```bash\nPOST /api/rest/2.0/ai/agent/conversations/{conversation_identifier}/update\nContent-Type: application/json\n\n{\n \"title\": \"Revenue Breakdown by Product Line\"\n}\n```\n\n#### Error responses\n\n| Code | Description |\n|------|-------------|\n| 400 | Bad Request — the request body is empty or `title` is provided as an empty string. |\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or does not own the specified conversation. |\n| 404 | Not Found — no conversation exists with the given `conversation_identifier` for the authenticated user. |\n| 422 | Unprocessable Entity — the request body is malformed or contains an invalid field value. |\n\n> ###### Note:\n>\n> - Only conversations created with `enable_save_chat: true` can be updated. Unsaved conversations are not persisted and do not have a retrievable identifier.\n> - Available from version 26.7.0.cl and later.\n> - This endpoint requires Spotter — please contact ThoughtSpot Support to enable Spotter on your cluster.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Authentication", - "9.0.0.cl" + "AI", + "26.7.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LoginRequest" + "$ref": "#/components/schemas/UpdateConversationRequest" } } }, "required": true }, - "parameters": [], + "parameters": [ + { + "in": "path", + "name": "conversation_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the conversation to update." + } + ], "responses": { "204": { - "description": "User login successful." + "description": "Successfully updated the agent conversation." }, "400": { - "description": "Invalid request.", + "description": "Operation failed", "content": { "application/json": { "schema": { @@ -1995,7 +2110,7 @@ } }, "500": { - "description": "Unexpected error", + "description": "Operation failed", "content": { "application/json": { "schema": { @@ -2007,18 +2122,28 @@ } } }, - "/api/rest/2.0/auth/session/logout": { + "/api/rest/2.0/auth/configure": { "post": { - "operationId": "logout", - "description": "\n Version: 9.0.0.cl or later\n\n\nLogs out a user from their current session.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "configureAuthSettings", + "description": "\n Version: 26.6.0.cl or later\n\nVersion: 26.6.0.cl or later\n\nEnables or disables authentication at cluster or org level for the specified auth type. Currently supports `TRUSTED_AUTH`.\n\n#### Required privileges\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `CONTROL_TRUSTED_AUTH` (**Can Enable or Disable Trusted Authentication**) privilege. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled, the `CONTROL_TRUSTED_AUTH` privilege is required.\n\n#### Usage guidelines\n\nUse `cluster_preferences` to enable or disable authentication at the cluster level. Cluster-level settings can only be configured from the Primary Org.\n- `ENABLED` — Generates a new access token if one does not exist. An existing token is preserved.\n- `DISABLED` — Revokes the existing cluster-level access token.\n\nUse `org_preferences` to enable or disable authentication for one or more Orgs. Each entry must include an `org_identifier` (unique ID or name) and an `auth_status`. Org-level configuration requires the per-Org authentication feature to be enabled on your instance.\n- `ENABLED` — Generates a new org-level access token if one does not exist.\n- `DISABLED` — Revokes the existing org-level access token for that Org.\n\nBoth `cluster_preferences` and `org_preferences` are optional. Omitting a field leaves the corresponding settings unchanged. If both are omitted, the API returns `204 No Content` without making any changes.\n\n**Note**: Cluster-level and org-level settings are independent of each other. Enabling or disabling one does not affect the other.\n\n\n\n\n#### Endpoint URL\n", "tags": [ "Authentication", - "9.0.0.cl" + "26.6.0.cl" ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConfigureAuthSettingsRequest" + } + } + }, + "required": true + }, "parameters": [], "responses": { "204": { - "description": "User logout successful." + "description": "Trusted authentication settings configured successfully." }, "400": { "description": "Invalid request.", @@ -2063,28 +2188,25 @@ } } }, - "/api/rest/2.0/auth/token/revoke": { - "post": { - "operationId": "revokeToken", - "description": "\n Version: 9.0.0.cl or later\n\n\nRevokes the authentication token issued for current user session.\n\nThe token of your current session expires when you make a call to the `/api/rest/2.0/auth/token/revoke` endpoint.\nthe users will not be able to access ThoughtSpot objects until a new token is obtained.\n\nTo restart your session, request for a new token from ThoughtSpot. See [Get Full Access Token](#/http/api-endpoints/authentication/get-full-access-token).\n\n\n\n\n#### Endpoint URL\n", + "/api/rest/2.0/auth/session/user": { + "get": { + "operationId": "getCurrentUserInfo", + "description": "\n Version: 9.0.0.cl or later\n\nRetrieves details of the current user session for the token provided in the request header.\n\nAny ThoughtSpot user can access this endpoint and send an API request. The data returned in the API response varies according to user's privilege and object access permissions.\n\n**NOTE**: In ThoughtSpot, users with cluster administration privileges can access all Orgs by default. However, unless the administrator is explicitly added to an Org, the Orgs list in the session information returned by the API will include only the Primary Org. To include other Orgs in the API response, you must explicitly add the administrator to each Org in the Admin settings page in the UI or via user REST API.\n\n\n\n#### Endpoint URL\n", "tags": [ "Authentication", "9.0.0.cl" ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RevokeTokenRequest" - } - } - }, - "required": true - }, "parameters": [], "responses": { - "204": { - "description": "Token successfully revoked." + "200": { + "description": "Fetch current session user detail successful.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + } }, "400": { "description": "Invalid request.", @@ -2129,61 +2251,22 @@ } } }, - "/api/rest/2.0/auth/search": { - "post": { - "operationId": "searchAuthSettings", - "description": "\n Version: 26.6.0.cl or later\n\nVersion: 26.6.0.cl or later\n\nReturns the authentication configuration for the specified auth type at cluster and org level. Currently supports `TRUSTED_AUTH`.\n\n#### Required privileges\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `CONTROL_TRUSTED_AUTH` (**Can Enable or Disable Trusted Authentication**) privilege. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled, the `CONTROL_TRUSTED_AUTH` privilege is required.\n\n#### Usage guidelines\n\nUse `scope` to control which level of settings are returned:\n- `CLUSTER` — Returns cluster-level authentication status and access tokens. Accessible only from the Primary Org.\n- `ORG` — Returns org-level authentication status and access tokens for the current Org. Requires the per-Org authentication feature to be enabled on your instance.\n- If `scope` is omitted, both cluster and org-level settings are returned based on the caller's org context and feature availability.\n\nThe `access_tokens` array in `cluster_preferences` or `org_preferences` is omitted when no token is configured at that level.\n\n**Note**: Access tokens returned in the response are sensitive credentials. Treat them with the same care as passwords.\n\n\n\n\n#### Endpoint URL\n", + "/api/rest/2.0/auth/session/token": { + "get": { + "operationId": "getCurrentUserToken", + "description": "\n Version: 9.4.0.cl or later\n\nRetrieves details of the current session token for the bearer token provided in the request header.\n\nThis API endpoint does not create a new token. Instead, it returns details about the token, including the token string, creation time, expiration time, and the associated user.\n\nUse this endpoint to introspect your current session token, debug authentication issues, or when a frontend application needs session token details.\n\nAny ThoughtSpot user with a valid bearer token can access this endpoint and send an API request\n\n\n\n\n#### Endpoint URL\n", "tags": [ "Authentication", - "26.6.0.cl" + "9.4.0.cl" ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SearchAuthSettingsRequest" - } - } - }, - "required": true - }, "parameters": [], "responses": { "200": { - "description": "Authentication settings retrieved successfully.", + "description": "Fetching token for current user successful.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SearchAuthSettingsResponse" - }, - "examples": { - "example_1": { - "value": { - "auth_type": "TRUSTED_AUTH", - "cluster_preferences": { - "auth_status": "ENABLED", - "access_tokens": [ - { - "key": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" - } - ] - }, - "org_preferences": [ - { - "org": { - "id": 583464508, - "name": "sales_org" - }, - "auth_status": "ENABLED", - "access_tokens": [ - { - "key": "f9e8d7c6-b5a4-3210-fedc-ba9876543210" - } - ] - } - ] - } - } + "$ref": "#/components/schemas/GetTokenResponse" } } } @@ -2231,19 +2314,19 @@ } } }, - "/api/rest/2.0/auth/token/validate": { + "/api/rest/2.0/auth/token/custom": { "post": { - "operationId": "validateToken", - "description": "\n Version: 9.12.0.cl or later\n\n\nValidates the authentication token specified in the API request.\n\nIf your token is not valid, [Get a new token](#/http/api-endpoints/authentication/get-full-access-token).\n\n\n\n\n#### Endpoint URL\n", + "operationId": "getCustomAccessToken", + "description": "\n Version: 10.4.0.cl or later\n\nCreates an authentication token that provides values for the formula variables in the Row Level Security (RLS) rules for a given user. Recommended for use cases that require Attribute-based access control (ABAC) via RLS.\n\n#### Required privileges\n\nTo add a new user and assign privileges during auto-creation, the `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege is required. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled, the `CONTROL_TRUSTED_AUTH` (**Can Enable or Disable Trusted Authentication**) privilege and edit access to the data source are required.\n\nTo configure formula variables for all Orgs on your instance or the Primary Org, cluster administration privileges are required. Org administrators can configure formula variables for their respective Orgs. If Role-Based Access Control (RBAC) is enabled, users with the `CAN_MANAGE_VARIABLES` (**Can manage variables**) role privilege can also create and manage variables for their Org context.\n\n#### Usage guidelines\n\nYou can generate a token by providing a `username` and `password`, or by using a `secret_key`. To generate a `secret_key`, the administrator must enable [Trusted authentication](https://developers.thoughtspot.com/docs/trusted-auth-secret-key) in the **Develop** > **Customizations** > **Security Settings** page.\n\n**Note**:\n* When both `password` and `secret_key` are included in the API request, `password` takes precedence.\n* If [Multi-Factor Authentication (MFA)](https://docs.thoughtspot.com/cloud/latest/authentication-local-mfa) is enabled on your instance, the API login request with `username` and `password` returns an error. You can switch to token-based authentication with `secret_key` or contact ThoughtSpot Support for assistance.\n\nThe token obtained from ThoughtSpot is valid for 5 minutes by default. You can configure the token expiration time as required.\n\n#### ABAC via RLS\n\nTo implement ABAC via RLS and assign security entitlements to users during session creation, generate a token with custom variable values. The values set in the authentication token are applied to the formula variables referenced in RLS rules at the table level, which determines the data each user can access based on their entitlements.\n\nThe variable values can be configured to persist for a specific set of Models in user sessions initiated with the token, allowing different RLS rules to be set for different data models. Once defined, the rules are added to the user's `variable_values` object, after which all sessions will use the persisted values.\n\nFor more information, see [ABAC via tokens Documentation](https://developers.thoughtspot.com/docs/abac-via-rls-variables).\n\n##### Formula variables\nBefore defining variable values, ensure the variables are created and available on your instance. To create a formula variable, you can use the **Create variable** (`/api/rest/2.0/template/variables/create`) REST API endpoint, with the variable `type` set as `Formula_Variable` in the API request.\n\nThe API doesn't support `\"persist_option\": \"RESET\"` and `\"persist_option\": \"NONE\"` when `variable_values` are defined in the request. If you are using `variable_values` for token generation, you must use other supported persist options such as `APPEND` or `REPLACE`.\n\nIf you want to use `RESET` or `NONE`, do not pass any `variable_values`. In such cases, `variable_values` will remain unaffected.\n\n#### Supported objects\n\nThe supported object type is `LOGICAL_TABLE`. When using `object_id` with `variable_values`, models are supported.\n\n#### Just-in-time provisioning\n\nFor [just-in-time user creation and provisioning](https://developers.thoughtspot.com/docs/just-in-time-provisioning), specify the following attributes in the API request:\n\n* `auto_create`\n* `username`\n* `display_name`\n* `email`\n* `groups`\n\nSet `auto_create` to `true` if the username does not exist in ThoughtSpot. If the username already exists in ThoughtSpot and `auto_create` is set to `true`, user properties such as display name, email, Org and group entitlements will not be updated with new values. Setting `auto_create` to `true` does not create formula variables. Hence, this setting will not be applicable to `variable_values`.\n\n#### Important point to note\nAll options in the token creation APIs that define user access to data in ThoughtSpot will take effect during token creation, not when the token is used for authentication. For example, `auto_create:true` will create the user when the authentication token is created. Persist options such as `APPEND` and `REPLACE` will persist `variable_values` on the user profile when the token is created.\n\n\n\n\n#### Endpoint URL\n", "tags": [ "Authentication", - "9.12.0.cl" + "10.4.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidateTokenRequest" + "$ref": "#/components/schemas/GetCustomAccessTokenRequest" } } }, @@ -2252,17 +2335,17 @@ "parameters": [], "responses": { "200": { - "description": "Token validation successful.", + "description": "ABAC token creation was successful.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TokenValidationResponse" + "$ref": "#/components/schemas/AccessToken" } } } }, "400": { - "description": "Invalid request.", + "description": "Invalid request. This could be due to missing or incorrect parameters.", "content": { "application/json": { "schema": { @@ -2272,7 +2355,7 @@ } }, "401": { - "description": "Unauthorized access.", + "description": "Unauthorized access. The request could not be authenticated.", "content": { "application/json": { "schema": { @@ -2282,7 +2365,7 @@ } }, "403": { - "description": "Forbidden access.", + "description": "Forbidden access. The user does not have permission to access this resource.", "content": { "application/json": { "schema": { @@ -2292,7 +2375,7 @@ } }, "500": { - "description": "Unexpected error", + "description": "An unexpected error occurred on the server.", "content": { "application/json": { "schema": { @@ -2301,22 +2384,23 @@ } } } - } + }, + "security": [] } }, - "/api/rest/2.0/collections/create": { + "/api/rest/2.0/auth/token/full": { "post": { - "operationId": "createCollection", - "description": "\n Version: 26.4.0.cl or later\n\nCreates a new collection in ThoughtSpot.\n\nCollections allow you to organize and group related metadata objects such as Liveboards, Answers, worksheets, and other data objects. You can also create nested collections (sub-collections) to build a hierarchical structure.\n\n#### Supported operations\n\nThe API endpoint lets you perform the following operations:\n\n* Create a new collection\n* Add metadata objects (Liveboards, Answers, Logical Tables) to the collection\n* Create nested collections by adding sub-collections\n\n\n\n\n#### Endpoint URL\n", + "operationId": "getFullAccessToken", + "description": "\n Version: 9.0.0.cl or later\n\nGenerates an authentication token for creating a full session in ThoughtSpot for a given user. Recommended for use cases that do not require Attribute-based access control (ABAC) via Row Level Security (RLS).\n\n#### Usage guidelines\n\nYou can generate a token for a user by providing a `username` and `password`, or by using the `secret_key` generated for your instance. To generate a `secret_key`, the administrator must enable [Trusted authentication](https://developers.thoughtspot.com/docs/trusted-auth-secret-key) in the **Develop** > **Customizations** > **Security Settings** page.\n\n**Note**:\n* When both `password` and `secret_key` are included in the API request, `password` takes precedence.\n* If [Multi-Factor Authentication (MFA)](https://docs.thoughtspot.com/cloud/latest/authentication-local-mfa) is enabled on your instance, the API login request with `username` and `password` returns an error. You can switch to token-based authentication with `secret_key` or contact ThoughtSpot Support for assistance.\n\nThe token obtained from ThoughtSpot is valid for 5 minutes by default. You can configure the token expiration time as required.\n\n#### Just-in-time provisioning\n\nFor [just-in-time user creation and provisioning](https://developers.thoughtspot.com/docs/just-in-time-provisioning), specify the following attributes in the API request:\n\n* `auto_create`\n* `username`\n* `display_name`\n* `email`\n* `group_identifiers`\n\nSet `auto_create` to `true` if the username does not exist in ThoughtSpot. If the user already exists in ThoughtSpot and `auto_create` is set to `true`, user properties such as display name, email and group assignment will be updated.\n\nTo add a new user and assign privileges during auto-creation, the `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege is required. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled, the `CONTROL_TRUSTED_AUTH` (**Can Enable or Disable Trusted Authentication**) privilege is required.\n\n#### Important point to note\nAll options in the token creation APIs that define user access to data in ThoughtSpot will take effect during token creation, not when the token is used for authentication. For example, `auto_create:true` will create the user when the authentication token is created.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Collections", - "26.4.0.cl" + "Authentication", + "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateCollectionRequest" + "$ref": "#/components/schemas/GetFullAccessTokenRequest" } } }, @@ -2325,11 +2409,11 @@ "parameters": [], "responses": { "200": { - "description": "Collection created successfully", + "description": "Bearer auth token creation successful.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Collection" + "$ref": "#/components/schemas/Token" } } } @@ -2374,22 +2458,23 @@ } } } - } + }, + "security": [] } }, - "/api/rest/2.0/collections/delete": { + "/api/rest/2.0/auth/token/object": { "post": { - "operationId": "deleteCollection", - "description": "\n Version: 26.4.0.cl or later\n\nDeletes one or more collections from ThoughtSpot.\n\n#### Delete options\n\n* **delete_children**: When set to `true`, deletes the child objects (metadata items) within the collection that the user has access to. Objects that the user does not have permission to delete will be skipped.\n* **dry_run**: When set to `true`, performs a preview of the deletion operation without actually deleting anything. The response shows what would be deleted, allowing you to review before committing the deletion.\n\n#### Response\n\nThe response includes:\n* **metadata_deleted**: List of metadata objects that were successfully deleted\n* **metadata_skipped**: List of metadata objects that were skipped due to lack of permissions or other constraints\n\n\n\n\n#### Endpoint URL\n", + "operationId": "getObjectAccessToken", + "description": "\n Version: 9.0.0.cl or later\n\nGenerates an authentication token that provides access to a specific metadata object. This object list is intersected with the list of objects the user is allowed to access via group membership. For more information, see [Object security](https://docs.thoughtspot.com/cloud/latest/security-data-object#object_security).\n\n#### Usage guidelines\n\nYou can generate a token for a user by providing a `username` and `password`, or by using the `secret_key` generated for your instance. To generate a `secret_key`, the administrator must enable [Trusted authentication](https://developers.thoughtspot.com/docs/trusted-auth-secret-key) in the **Develop** > **Customizations** > **Security Settings** page.\n\n**Note**:\n* When both `password` and `secret_key` are included in the API request, `password` takes precedence.\n* If [Multi-Factor Authentication (MFA)](https://docs.thoughtspot.com/cloud/latest/authentication-local-mfa) is enabled on your instance, the API login request with `username` and `password` returns an error. You can switch to token-based authentication with `secret_key` or contact ThoughtSpot Support for assistance.\n\nThe token obtained from ThoughtSpot is valid for 5 minutes by default. You can configure the token expiration time as required.\n\n#### Just-in-time provisioning\n\nFor [just-in-time user creation and provisioning](https://developers.thoughtspot.com/docs/just-in-time-provisioning), specify the following attributes in the API request:\n\n* `auto_create`\n* `username`\n* `display_name`\n* `email`\n* `group_identifiers`\n\nSet `auto_create` to `true` if the user is not available in ThoughtSpot. If the user already exists in ThoughtSpot and the `auto_create` parameter is set to `true`, user properties such as display name, email, and group assignment will be updated.\n\nTo add a new user and assign privileges, the `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege is required. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled, the `CONTROL_TRUSTED_AUTH`(**Can Enable or Disable Trusted Authentication**) privilege is required.\n\n#### Important point to note\n\nAll options in the token creation APIs that define user access to data in ThoughtSpot will take effect during token creation, not when the token is used for authentication. For example, `auto_create:true` will create the user when the authentication token is created.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Collections", - "26.4.0.cl" + "Authentication", + "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeleteCollectionRequest" + "$ref": "#/components/schemas/GetObjectAccessTokenRequest" } } }, @@ -2398,11 +2483,11 @@ "parameters": [], "responses": { "200": { - "description": "Collections deleted successfully.", + "description": "Bearer auth token creation successful.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CollectionDeleteResponse" + "$ref": "#/components/schemas/Token" } } } @@ -2437,16 +2522,6 @@ } } }, - "404": { - "description": "Resource not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "500": { "description": "Unexpected error", "content": { @@ -2457,22 +2532,23 @@ } } } - } + }, + "security": [] } }, - "/api/rest/2.0/collections/search": { + "/api/rest/2.0/auth/session/login": { "post": { - "operationId": "searchCollections", - "description": "\n Version: 26.4.0.cl or later\n\nGets a list of collections available in ThoughtSpot.\n\nTo get details of a specific collection, specify the collection GUID or name. You can also filter the API response based on the collection name pattern, author, and other criteria.\n\n#### Search options\n\n* **name_pattern**: Use '%' as a wildcard character to match collection names\n* **collection_identifiers**: Search for specific collections by their GUIDs or names\n* **include_metadata**: When set to `true`, includes the metadata objects within each collection in the response\n\n**NOTE**: If the API returns an empty list, consider increasing the value of the `record_size` parameter. To search across all available collections, set `record_size` to `-1`.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "login", + "description": "\n Version: 9.0.0.cl or later\n\nCreates a login session for a ThoughtSpot user with Basic authentication.\n\nIn Basic authentication method, REST clients log in to ThoughtSpot using `username` and `password` attributes. On a multi-tenant cluster with Orgs, users can pass the ID of the Org in the API request to log in to a specific Org context.\n\n**Note**: If Multi-Factor Authentication (MFA) is enabled on your instance, the API login request with basic authentication (`username` and `password` ) returns an error. Contact ThoughtSpot Support for assistance.\n\nA successful login returns a session cookie that can be used in your subsequent API requests.\n\n\n\n#### Endpoint URL\n", "tags": [ - "Collections", - "26.4.0.cl" + "Authentication", + "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SearchCollectionsRequest" + "$ref": "#/components/schemas/LoginRequest" } } }, @@ -2480,15 +2556,8 @@ }, "parameters": [], "responses": { - "200": { - "description": "Successfully retrieved list of collections", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CollectionSearchResponse" - } - } - } + "204": { + "description": "User login successful." }, "400": { "description": "Invalid request.", @@ -2533,38 +2602,18 @@ } } }, - "/api/rest/2.0/collections/{collection_identifier}/update": { + "/api/rest/2.0/auth/session/logout": { "post": { - "operationId": "updateCollection", - "description": "\n Version: 26.4.0.cl or later\n\nUpdates an existing collection in ThoughtSpot.\n\n#### Supported operations\n\nThis API endpoint lets you perform the following operations:\n\n* Update collection name and description\n* Change visibility settings\n* Add metadata objects to the collection (operation: ADD)\n* Remove metadata objects from the collection (operation: REMOVE)\n* Replace all metadata objects in the collection (operation: REPLACE)\n\n#### Operation types\n\n* **ADD**: Adds the specified metadata objects to the existing collection without removing current items\n* **REMOVE**: Removes only the specified metadata objects from the collection\n* **REPLACE**: Replaces all existing metadata objects with the specified items (default behavior)\n\n\n\n\n#### Endpoint URL\n", + "operationId": "logout", + "description": "\n Version: 9.0.0.cl or later\n\n\nLogs out a user from their current session.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Collections", - "26.4.0.cl" - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateCollectionRequest" - } - } - }, - "required": true - }, - "parameters": [ - { - "in": "path", - "name": "collection_identifier", - "required": true, - "schema": { - "type": "string" - }, - "description": "Unique GUID of the collection. Note: Collection names cannot be used as\nidentifiers since duplicate names are allowed." - } + "Authentication", + "9.0.0.cl" ], + "parameters": [], "responses": { "204": { - "description": "Collection updated successfully. No content returned." + "description": "User logout successful." }, "400": { "description": "Invalid request.", @@ -2596,16 +2645,6 @@ } } }, - "404": { - "description": "Resource not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "500": { "description": "Unexpected error", "content": { @@ -2619,19 +2658,19 @@ } } }, - "/api/rest/2.0/connection-configurations/search": { + "/api/rest/2.0/auth/token/revoke": { "post": { - "operationId": "connectionConfigurationSearch", - "description": "\n Version: 10.12.0.cl or later\n\nGets connection configuration objects.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) and edit permissions to the connection object, or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) privilege is required.\n\n#### Usage guidelines\n* To get a list of all configurations available in the ThoughtSpot system, send the API request with only the connection name or GUID in the request body.\n* To fetch details of a configuration object, specify the configuration object name or GUID.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "revokeToken", + "description": "\n Version: 9.0.0.cl or later\n\n\nRevokes the authentication token issued for current user session.\n\nThe token of your current session expires when you make a call to the `/api/rest/2.0/auth/token/revoke` endpoint.\nthe users will not be able to access ThoughtSpot objects until a new token is obtained.\n\nTo restart your session, request for a new token from ThoughtSpot. See [Get Full Access Token](#/http/api-endpoints/authentication/get-full-access-token).\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Connection Configurations", - "10.12.0.cl" + "Authentication", + "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ConnectionConfigurationSearchRequest" + "$ref": "#/components/schemas/RevokeTokenRequest" } } }, @@ -2639,18 +2678,8 @@ }, "parameters": [], "responses": { - "200": { - "description": "Configuration fetched successfully.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ConnectionConfigurationResponse" - } - } - } - } + "204": { + "description": "Token successfully revoked." }, "400": { "description": "Invalid request.", @@ -2695,19 +2724,19 @@ } } }, - "/api/rest/2.0/connection-configurations/create": { + "/api/rest/2.0/auth/search": { "post": { - "operationId": "createConnectionConfiguration", - "description": "\n Version: 10.12.0.cl or later\n\nCreates an additional configuration to an existing connection to a data warehouse. \n\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) privilege is required.\n\n#### Usage guidelines\n\n * A JSON map of configuration attributes in `configuration`. The following example shows the configuration attributes:\n ```\n {\n \"user\":\"DEV_USER\",\n \"password\":\"TestConn123\",\n \"role\":\"DEV\",\n \"warehouse\":\"DEV_WH\"\n }\n ```\n\n* If the `policy_type` is `PRINCIPALS`, then `policy_principals` is a required field.\n* If the `policy_type` is `PROCESSES`, then `policy_processes` is a required field.\n* If the `policy_type` is `NO_POLICY`, then `policy_principals` and `policy_processes` are not required fields.\n\n#### Parameterized Connection Support\nFor parameterized connections that use OAuth authentication, only the same_as_parent and policy_process_options attributes are allowed in the API request. These attributes are not applicable to connections that are not parameterized.\n\n\n\n\n\n#### Endpoint URL\n", + "operationId": "searchAuthSettings", + "description": "\n Version: 26.6.0.cl or later\n\nVersion: 26.6.0.cl or later\n\nReturns the authentication configuration for the specified auth type at cluster and org level. Currently supports `TRUSTED_AUTH`.\n\n#### Required privileges\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `CONTROL_TRUSTED_AUTH` (**Can Enable or Disable Trusted Authentication**) privilege. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled, the `CONTROL_TRUSTED_AUTH` privilege is required.\n\n#### Usage guidelines\n\nUse `scope` to control which level of settings are returned:\n- `CLUSTER` — Returns cluster-level authentication status and access tokens. Accessible only from the Primary Org.\n- `ORG` — Returns org-level authentication status and access tokens for the current Org. Requires the per-Org authentication feature to be enabled on your instance.\n- If `scope` is omitted, both cluster and org-level settings are returned based on the caller's org context and feature availability.\n\nThe `access_tokens` array in `cluster_preferences` or `org_preferences` is omitted when no token is configured at that level.\n\n**Note**: Access tokens returned in the response are sensitive credentials. Treat them with the same care as passwords.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Connection Configurations", - "10.12.0.cl" + "Authentication", + "26.6.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateConnectionConfigurationRequest" + "$ref": "#/components/schemas/SearchAuthSettingsRequest" } } }, @@ -2716,11 +2745,40 @@ "parameters": [], "responses": { "200": { - "description": "Connection configuration successfully created.", + "description": "Authentication settings retrieved successfully.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ConnectionConfigurationResponse" + "$ref": "#/components/schemas/SearchAuthSettingsResponse" + }, + "examples": { + "example_1": { + "value": { + "auth_type": "TRUSTED_AUTH", + "cluster_preferences": { + "auth_status": "ENABLED", + "access_tokens": [ + { + "key": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" + } + ] + }, + "org_preferences": [ + { + "org": { + "id": 583464508, + "name": "sales_org" + }, + "auth_status": "ENABLED", + "access_tokens": [ + { + "key": "f9e8d7c6-b5a4-3210-fedc-ba9876543210" + } + ] + } + ] + } + } } } } @@ -2768,19 +2826,19 @@ } } }, - "/api/rest/2.0/connection-configurations/delete": { + "/api/rest/2.0/auth/token/validate": { "post": { - "operationId": "deleteConnectionConfiguration", - "description": "\n Version: 10.12.0.cl or later\n\nDeletes connection configuration objects.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) and edit permissions to the connection object, or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "validateToken", + "description": "\n Version: 9.12.0.cl or later\n\n\nValidates the authentication token specified in the API request.\n\nIf your token is not valid, [Get a new token](#/http/api-endpoints/authentication/get-full-access-token).\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Connection Configurations", - "10.12.0.cl" + "Authentication", + "9.12.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeleteConnectionConfigurationRequest" + "$ref": "#/components/schemas/ValidateTokenRequest" } } }, @@ -2788,8 +2846,15 @@ }, "parameters": [], "responses": { - "204": { - "description": "Connection Configurations successfully deleted." + "200": { + "description": "Token validation successful.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TokenValidationResponse" + } + } + } }, "400": { "description": "Invalid request.", @@ -2834,38 +2899,35 @@ } } }, - "/api/rest/2.0/connection-configurations/{configuration_identifier}/update": { + "/api/rest/2.0/collections/create": { "post": { - "operationId": "updateConnectionConfiguration", - "description": "\n Version: 10.12.0.cl or later\n\nUpdates a connection configuration object.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) and edit permissions to the connection object, or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) privilege is required.\n\n#### Supported operations\nThis API endpoint lets you perform the following operations in a single API request:\n\n * Edit the name or description of the configuration\n * Edit the configuration properties\n * Edit the `policy_type`\n * Edit the type of authentication\n * Enable or disable a configuration\n\n#### Parameterized Connection Support\nFor parameterized oauth based connections, only the `same_as_parent` and `policy_process_options` attributes are allowed. These attributes are not applicable to connections that are not parameterized.\n\n **NOTE**: When updating a configuration where `disabled` is `true`, you must reset `disabled` to `true` in your update request payload. If not explicitly set again, the API will default `disabled` to `false`.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "createCollection", + "description": "\n Version: 26.4.0.cl or later\n\nCreates a new collection in ThoughtSpot.\n\nCollections allow you to organize and group related metadata objects such as Liveboards, Answers, worksheets, and other data objects. You can also create nested collections (sub-collections) to build a hierarchical structure.\n\n#### Supported operations\n\nThe API endpoint lets you perform the following operations:\n\n* Create a new collection\n* Add metadata objects (Liveboards, Answers, Logical Tables) to the collection\n* Create nested collections by adding sub-collections\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Connection Configurations", - "10.12.0.cl" + "Collections", + "26.4.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateConnectionConfigurationRequest" + "$ref": "#/components/schemas/CreateCollectionRequest" } } }, "required": true }, - "parameters": [ - { - "in": "path", - "name": "configuration_identifier", - "required": true, - "schema": { - "type": "string" - }, - "description": "Unique ID or name of the configuration." - } - ], + "parameters": [], "responses": { - "204": { - "description": "Connection configuration successfully updated." + "200": { + "description": "Collection created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Collection" + } + } + } }, "400": { "description": "Invalid request.", @@ -2910,19 +2972,19 @@ } } }, - "/api/rest/2.0/connection/create": { + "/api/rest/2.0/collections/delete": { "post": { - "operationId": "createConnection", - "description": "\n Version: 9.2.0.cl or later\n\nCreates a connection to a data warehouse for live query services. \n\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) privilege is required.\n\n#### Create a connection without tables\n\nTo create a connection without tables:\n\n1. Pass these parameters in your API request.\n * Name of the connection.\n * Type of the data warehouse to connect to.\n * A JSON map of configuration attributes in `data_warehouse_config`. The following example shows the configuration attributes for a SnowFlake connection:\n ```\n {\n \"configuration\":{\n \"accountName\":\"thoughtspot_partner\",\n \"user\":\"tsadmin\",\n \"password\":\"TestConn123\",\n \"role\":\"sysadmin\",\n \"warehouse\":\"MEDIUM_WH\"\n },\n \"authenticationType\": \"SERVICE_ACCOUNT\",\n \"externalDatabases\":[\n\n ]\n }\n ```\n2. Set `validate` to `false`.\n\n**NOTE:** If the `authentication_type` is anything other than SERVICE_ACCOUNT, you must explicitly provide the authenticationType property in the payload. If you do not specify authenticationType, the API will default to SERVICE_ACCOUNT as the authentication type.\n\n#### Create a connection with tables\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) and `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**) privilege is required.\n\nTo create a connection with tables:\n\n1. Pass these parameters in your API request.\n * Name of the connection.\n * Type of the data warehouse to connect to.\n * A JSON map of configuration attributes, database details, and table properties in `data_warehouse_config` as shown in the following example:\n ```\n {\n \"configuration\":{\n \"accountName\":\"thoughtspot_partner\",\n \"user\":\"tsadmin\",\n \"password\":\"TestConn123\",\n \"role\":\"sysadmin\",\n \"warehouse\":\"MEDIUM_WH\"\n },\n \"authenticationType\": \"SERVICE_ACCOUNT\",\n \"externalDatabases\":[\n {\n \"name\":\"AllDatatypes\",\n \"isAutoCreated\":false,\n \"schemas\":[\n {\n \"name\":\"alldatatypes\",\n \"tables\":[\n {\n \"name\":\"allDatatypes\",\n \"type\":\"TABLE\",\n \"description\":\"\",\n \"selected\":true,\n \"linked\":true,\n \"columns\":[\n {\n \"name\":\"CNUMBER\",\n \"type\":\"INT64\",\n \"canImport\":true,\n \"selected\":true,\n \"isLinkedActive\":true,\n \"isImported\":false,\n \"tableName\":\"allDatatypes\",\n \"schemaName\":\"alldatatypes\",\n \"dbName\":\"AllDatatypes\"\n },\n {\n \"name\":\"CDECIMAL\",\n \"type\":\"INT64\",\n \"canImport\":true,\n \"selected\":true,\n \"isLinkedActive\":true,\n \"isImported\":false,\n \"tableName\":\"allDatatypes\",\n \"schemaName\":\"alldatatypes\",\n \"dbName\":\"AllDatatypes\"\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ```\n2. Set `validate` to `true`.\n\n**NOTE:** If the `authentication_type` is anything other than SERVICE_ACCOUNT, you must explicitly provide the authenticationType property in the payload. If you do not specify authenticationType, the API will default to SERVICE_ACCOUNT as the authentication type.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "deleteCollection", + "description": "\n Version: 26.4.0.cl or later\n\nDeletes one or more collections from ThoughtSpot.\n\n#### Delete options\n\n* **delete_children**: When set to `true`, deletes the child objects (metadata items) within the collection that the user has access to. Objects that the user does not have permission to delete will be skipped.\n* **dry_run**: When set to `true`, performs a preview of the deletion operation without actually deleting anything. The response shows what would be deleted, allowing you to review before committing the deletion.\n\n#### Response\n\nThe response includes:\n* **metadata_deleted**: List of metadata objects that were successfully deleted\n* **metadata_skipped**: List of metadata objects that were skipped due to lack of permissions or other constraints\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Connections", - "9.2.0.cl" + "Collections", + "26.4.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateConnectionRequest" + "$ref": "#/components/schemas/DeleteCollectionRequest" } } }, @@ -2931,11 +2993,11 @@ "parameters": [], "responses": { "200": { - "description": "Connection to the datasource successfully created.", + "description": "Collections deleted successfully.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateConnectionResponse" + "$ref": "#/components/schemas/CollectionDeleteResponse" } } } @@ -2970,6 +3032,16 @@ } } }, + "404": { + "description": "Resource not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "500": { "description": "Unexpected error", "content": { @@ -2983,20 +3055,19 @@ } } }, - "/api/rest/2.0/connection/delete": { + "/api/rest/2.0/collections/search": { "post": { - "operationId": "deleteConnection", - "description": "\n Version: 9.2.0.cl or later\n\n\n**Important**: This endpoint is deprecated and will be removed from ThoughtSpot in September 2025. ThoughtSpot strongly recommends using the\n[Delete Connection V2](#/http/api-endpoints/connections/delete-connection-v2) endpoint to delete your connection objects. \n\n#### Usage guidelines\n\nDeletes a connection object.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) and edit permissions to the connection object, or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) privilege is required.\n\n**Note**: If a connection has dependent objects, make sure you remove its associations before the delete operation.\n\n\n\n#### Endpoint URL\n", - "deprecated": true, + "operationId": "searchCollections", + "description": "\n Version: 26.4.0.cl or later\n\nGets a list of collections available in ThoughtSpot.\n\nTo get details of a specific collection, specify the collection GUID or name. You can also filter the API response based on the collection name pattern, author, and other criteria.\n\n#### Search options\n\n* **name_pattern**: Use '%' as a wildcard character to match collection names\n* **collection_identifiers**: Search for specific collections by their GUIDs or names\n* **include_metadata**: When set to `true`, includes the metadata objects within each collection in the response\n\n**NOTE**: If the API returns an empty list, consider increasing the value of the `record_size` parameter. To search across all available collections, set `record_size` to `-1`.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Connections", - "9.2.0.cl" + "Collections", + "26.4.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeleteConnectionRequest" + "$ref": "#/components/schemas/SearchCollectionsRequest" } } }, @@ -3004,8 +3075,15 @@ }, "parameters": [], "responses": { - "204": { - "description": "Connection successfully deleted." + "200": { + "description": "Successfully retrieved list of collections", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CollectionSearchResponse" + } + } + } }, "400": { "description": "Invalid request.", @@ -3050,28 +3128,38 @@ } } }, - "/api/rest/2.0/connections/{connection_identifier}/delete": { + "/api/rest/2.0/collections/{collection_identifier}/update": { "post": { - "operationId": "deleteConnectionV2", - "description": "\n Version: 10.4.0.cl or later\n\nDeletes a connection object.\n\n**Note**: If a connection has dependent objects, make sure you remove its associations before the delete operation.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) and edit permissions to the connection object, or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "updateCollection", + "description": "\n Version: 26.4.0.cl or later\n\nUpdates an existing collection in ThoughtSpot.\n\n#### Supported operations\n\nThis API endpoint lets you perform the following operations:\n\n* Update collection name and description\n* Change visibility settings\n* Add metadata objects to the collection (operation: ADD)\n* Remove metadata objects from the collection (operation: REMOVE)\n* Replace all metadata objects in the collection (operation: REPLACE)\n\n#### Operation types\n\n* **ADD**: Adds the specified metadata objects to the existing collection without removing current items\n* **REMOVE**: Removes only the specified metadata objects from the collection\n* **REPLACE**: Replaces all existing metadata objects with the specified items (default behavior)\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Connections", - "10.4.0.cl" + "Collections", + "26.4.0.cl" ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCollectionRequest" + } + } + }, + "required": true + }, "parameters": [ { "in": "path", - "name": "connection_identifier", + "name": "collection_identifier", "required": true, "schema": { "type": "string" }, - "description": "Unique ID or name of the connection." + "description": "Unique GUID of the collection. Note: Collection names cannot be used as\nidentifiers since duplicate names are allowed." } ], "responses": { "204": { - "description": "Connection successfully deleted." + "description": "Collection updated successfully. No content returned." }, "400": { "description": "Invalid request.", @@ -3103,6 +3191,16 @@ } } }, + "404": { + "description": "Resource not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "500": { "description": "Unexpected error", "content": { @@ -3116,30 +3214,37 @@ } } }, - "/api/rest/2.0/connections/download-connection-metadata-changes/{connection_identifier}": { + "/api/rest/2.0/connection-configurations/search": { "post": { - "operationId": "downloadConnectionMetadataChanges", - "description": "\n Version: 9.9.0.cl or later\n\nExports the difference in connection metadata between CDW and ThoughtSpot\n\nRequires `DATAMANAGEMENT` (**Can manage data**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the following Data control privileges may be required: \n- `CAN_MANAGE_CUSTOM_CALENDAR`(**Can manage custom calendars**)\n- `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**)\n- `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**)\n\nTo download the connection metadata difference between ThoughtSpot and CDW, pass the connection GUID as `connection_identifier` in the API request.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "connectionConfigurationSearch", + "description": "\n Version: 10.12.0.cl or later\n\nGets connection configuration objects.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) and edit permissions to the connection object, or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) privilege is required.\n\n#### Usage guidelines\n* To get a list of all configurations available in the ThoughtSpot system, send the API request with only the connection name or GUID in the request body.\n* To fetch details of a configuration object, specify the configuration object name or GUID.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Connections", - "9.9.0.cl" - ], - "parameters": [ - { - "in": "path", - "name": "connection_identifier", - "required": true, - "schema": { - "type": "string" - }, - "description": "GUID of the connection" - } + "Connection Configurations", + "10.12.0.cl" ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConnectionConfigurationSearchRequest" + } + } + }, + "required": true + }, + "parameters": [], "responses": { "200": { - "description": "Export metadata changes.", + "description": "Configuration fetched successfully.", "content": { - "application/octet-stream": {} + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ConnectionConfigurationResponse" + } + } + } } }, "400": { @@ -3185,32 +3290,32 @@ } } }, - "/api/rest/2.0/connections/fetch-connection-diff-status/{connection_identifier}": { + "/api/rest/2.0/connection-configurations/create": { "post": { - "operationId": "fetchConnectionDiffStatus", - "description": "\n Version: 9.9.0.cl or later\n\nValidates the difference in connection metadata between CDW and ThoughtSpot.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the following Data control privileges may be required:\n\n- `CAN_MANAGE_CUSTOM_CALENDAR`(**Can manage custom calendars**)\n- `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**)\n- `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**)\n\nReturns a boolean indicating whether there is any difference between the connection metadata at ThoughtSpot and CDW.\n\nTo get the connection metadata difference status, pass the connection GUID as `connection_identifier` in the API request.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "createConnectionConfiguration", + "description": "\n Version: 10.12.0.cl or later\n\nCreates an additional configuration to an existing connection to a data warehouse. \n\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) privilege is required.\n\n#### Usage guidelines\n\n * A JSON map of configuration attributes in `configuration`. The following example shows the configuration attributes:\n ```\n {\n \"user\":\"DEV_USER\",\n \"password\":\"TestConn123\",\n \"role\":\"DEV\",\n \"warehouse\":\"DEV_WH\"\n }\n ```\n\n* If the `policy_type` is `PRINCIPALS`, then `policy_principals` is a required field.\n* If the `policy_type` is `PROCESSES`, then `policy_processes` is a required field.\n* If the `policy_type` is `NO_POLICY`, then `policy_principals` and `policy_processes` are not required fields.\n\n#### Parameterized Connection Support\nFor parameterized connections that use OAuth authentication, only the same_as_parent and policy_process_options attributes are allowed in the API request. These attributes are not applicable to connections that are not parameterized.\n\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Connections", - "9.9.0.cl" - ], - "parameters": [ - { - "in": "path", - "name": "connection_identifier", - "required": true, - "schema": { - "type": "string" - }, - "description": "GUID of the connection" - } + "Connection Configurations", + "10.12.0.cl" ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateConnectionConfigurationRequest" + } + } + }, + "required": true + }, + "parameters": [], "responses": { "200": { - "description": "true/false", + "description": "Connection configuration successfully created.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FetchConnectionDiffStatusResponse" + "$ref": "#/components/schemas/ConnectionConfigurationResponse" } } } @@ -3258,45 +3363,28 @@ } } }, - "/api/rest/2.0/connections/{connection_identifier}/revoke-refresh-tokens": { + "/api/rest/2.0/connection-configurations/delete": { "post": { - "operationId": "revokeRefreshTokens", - "description": "\n Version: 26.2.0.cl or later\n\nRevokes OAuth refresh tokens for users who no longer require access to a data warehouse connection.\nWhen a token is revoked, the affected user's session for that connection is terminated, and they must re-authenticate to regain access.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DATAMANAGEMENT` (**Can manage data**) privileges.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on the ThoughtSpot instance, users with `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) privilege can also make API requests to revoke tokens for connection users.\n\n#### Usage guidelines\n\nYou can specify different combinations of identifiers to control which refresh tokens are revoked.\n\n- **connection_identifier**: Revokes refresh tokens for all users of the connection, except the connection author.\n- **connection_identifier** and **user_identifiers**: Revokes refresh tokens only for the users specified in the request. If the name or ID of the connection author is included in the request, their token will also be revoked.\n- **connection_identifier** and **configuration_identifiers**: Revokes refresh tokens for all users on the specified configurations, except the configuration author.\n- **connection_identifier**, **configuration_identifiers**, and **user_identifiers**: Revokes refresh tokens for the specified users on the specified configurations.\n- **connection_identifier** and **org_identifiers**: Revokes refresh tokens for the specified Orgs. Applicable only for published connections.\n- **connection_identifier**, **org_identifiers**, and **user_identifiers**: Revokes refresh tokens for the specified users in the specified Orgs. Applicable only for published connections.\n\n**NOTE**: The `org_identifiers` parameter is only applicable for published connections. Using this parameter for unpublished connections will result in an error. Ensure that the connections are published before making the API request.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "deleteConnectionConfiguration", + "description": "\n Version: 10.12.0.cl or later\n\nDeletes connection configuration objects.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) and edit permissions to the connection object, or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Connections", - "26.2.0.cl" + "Connection Configurations", + "10.12.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RevokeRefreshTokensRequest" + "$ref": "#/components/schemas/DeleteConnectionConfigurationRequest" } } }, "required": true }, - "parameters": [ - { - "in": "path", - "name": "connection_identifier", - "required": true, - "schema": { - "type": "string" - }, - "description": "Unique ID or name of the connection whose refresh tokens need to be revoked. All the users associated with the connection will have their refresh tokens revoked except the author." - } - ], + "parameters": [], "responses": { - "200": { - "description": "Token(s) successfully revoked.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RevokeRefreshTokensResponse" - } - } - } + "204": { + "description": "Connection Configurations successfully deleted." }, "400": { "description": "Invalid request.", @@ -3328,26 +3416,6 @@ } } }, - "404": { - "description": "Object not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "409": { - "description": "Conflict", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "500": { "description": "Unexpected error", "content": { @@ -3361,38 +3429,38 @@ } } }, - "/api/rest/2.0/connection/search": { + "/api/rest/2.0/connection-configurations/{configuration_identifier}/update": { "post": { - "operationId": "searchConnection", - "description": "\n Version: 9.2.0.cl or later\n\nGets connection objects.\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) privilege is required.\n\n- To get a list of all connections available in the ThoughtSpot system, send the API request without any attributes in the request body.\n- To get the connection objects for a specific type of data warehouse, specify the type in `data_warehouse_types`.\n- To fetch details of a connection object, specify the connection object GUID or name. The `name_pattern` attribute allows passing partial text with `%` for a wildcard match.\n- To get details of the database, schemas, tables, or columns from a data connection object, specify `data_warehouse_object_type`.\n- To get a specific database, schema, table, or column from a connection object, define the object type in `data_warehouse_object_type` and object properties in the `data_warehouse_objects` array. For example, to search for a column, you must pass the database, schema, and table names in the API request.\n Note that in the following example, object properties are set in a hierarchical order (`database` > `schema` > `table` > `column`).\n\n```\n{\n \"connections\": [\n {\n \"identifier\": \"b9d1f2ef-fa65-4a4b-994e-30fa2d57b0c2\",\n \"data_warehouse_objects\": [\n {\n \"database\": \"NEBULADEV\",\n \"schema\": \"INFORMATION_SCHEMA\",\n \"table\": \"APPLICABLE_ROLES\",\n \"column\": \"ROLE_NAME\"\n }\n ]\n }\n ],\n \"data_warehouse_object_type\": \"COLUMN\"\n}\n```\n\n- To fetch data by `configuration`, specify `data_warehouse_object_type`. For example, to fetch columns from the `DEVELOPMENT` database, specify the `data_warehouse_object_type` as `DATABASE` and define the `configuration` string as `{\"database\":\"DEVELOPMENT\"}`. To get column data for a specific table, specify the table, for example,`{\"database\":\"RETAILAPPAREL\",\"table\":\"PIPES\"}`.\n- To query connections by `authentication_type`, specify `data_warehouse_object_type`. Supported values for `authentication_type` are:\n - `SERVICE_ACCOUNT`: For connections that require service account credentials to authenticate to the Cloud Data Warehouse and fetch data.\n - `OAUTH`: For connections that require OAuth credentials to authenticate to the Cloud Data Warehouse and fetch data. Teradata, Oracle, and Presto Cloud Data Warehouses do not support the OAuth authentication type.\n - `IAM`: For connections that have the IAM OAuth set up. This authentication type is supported on Amazon Redshift connections only.\n - `EXTOAUTH`: For connections that have External OAuth set up. ThoughtSpot supports external [OAuth with Microsoft Azure Active Directory (AD)](https://docs.thoughtspot.com/cloud/latest/ connections-snowflake-azure-ad-oauth) and [Okta for Snowflake data connections](https://docs.thoughtspot.com/cloud/latest/connections-snowflake-okta-oauth).\n - `KEY_PAIR`: For connections that require Key Pair account credentials to authenticate to the Cloud Data Warehouse and fetch data. This authentication type is supported on Snowflake connections only.\n - `OAUTH_WITH_PKCE`: For connections that require OAuth with PKCE account credentials to authenticate to the Cloud Data Warehouse and fetch data. This authentication type is supported on Snowflake, Starburst, Databricks, Denodo connections only.\n - `EXTOAUTH_WITH_PKCE`: For connections that require External OAuth With PKCE account credentials to authenticate to the Cloud Data Warehouse and fetch data. This authentication type is supported on Snowflake connections only.\n - `OAUTH_WITH_PEZ`: For connections that require OAuth With PEZ account credentials to authenticate to the Cloud Data Warehouse and fetch data. This authentication type is supported on Amazon Redshift connections only.\n - `OAUTH_WITH_SERVICE_PRINCIPAL`: For connections that require OAuth With Service Principal account credentials to authenticate to the Cloud Data Warehouse and fetch data. This authentication type is supported on Databricks connections only.\n - `PERSONAL_ACCESS_TOKEN`: For connections that require Personal Access Token account credentials to authenticate to the Cloud Data Warehouse and fetch data. This authentication type is supported on Databricks connections only.\n - `OAUTH_CLIENT_CREDENTIALS`: For connections that require OAuth Client Credentials to authenticate to the Cloud Data Warehouse and fetch data. This authentication type is supported on Snowflake connections only.\n- To include more details about connection objects in the API response, set `include_details` to `true`.\n- You can also sort the output by field names and filter connections by tags.\n\n**NOTE**: When filtering connection records by parameters other than `data_warehouse_types` or `tag_identifiers`, ensure that you set `record_size` to `-1` and `record_offset` to `0` for precise results.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "updateConnectionConfiguration", + "description": "\n Version: 10.12.0.cl or later\n\nUpdates a connection configuration object.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) and edit permissions to the connection object, or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) privilege is required.\n\n#### Supported operations\nThis API endpoint lets you perform the following operations in a single API request:\n\n * Edit the name or description of the configuration\n * Edit the configuration properties\n * Edit the `policy_type`\n * Edit the type of authentication\n * Enable or disable a configuration\n\n#### Parameterized Connection Support\nFor parameterized oauth based connections, only the `same_as_parent` and `policy_process_options` attributes are allowed. These attributes are not applicable to connections that are not parameterized.\n\n **NOTE**: When updating a configuration where `disabled` is `true`, you must reset `disabled` to `true` in your update request payload. If not explicitly set again, the API will default `disabled` to `false`.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Connections", - "9.2.0.cl" + "Connection Configurations", + "10.12.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SearchConnectionRequest" + "$ref": "#/components/schemas/UpdateConnectionConfigurationRequest" } } }, "required": true }, - "parameters": [], + "parameters": [ + { + "in": "path", + "name": "configuration_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique ID or name of the configuration." + } + ], "responses": { - "200": { - "description": "List of connections to the datasource.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SearchConnectionResponse" - } - } - } - } + "204": { + "description": "Connection configuration successfully updated." }, "400": { "description": "Invalid request.", @@ -3437,48 +3505,38 @@ } } }, - "/api/rest/2.0/connections/{connection_identifier}/resync-metadata": { + "/api/rest/2.0/connection/create": { "post": { - "operationId": "syncMetadata", - "description": "\n Version: 26.5.0.cl or later\n\nSynchronizes connection metadata attributes from your Cloud Data Warehouse (CDW) with ThoughtSpot.\n\nRequires the `DATAMANAGEMENT` (**Can manage data**) privilege. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**) privilege is required.\n\n#### Usage guidelines\n\nTo synchronize attributes from a CDW, specify the connection GUID or name in the `connection_identifier` path parameter and `sync_attributes` in the request body. Default attribute is `[\"DESCRIPTION\"]`.\n\n##### Hierarchical schema\n\n* Connection: The connection object for the sync operation.\n* Tables: Tables for the sync operation. When no table is specified, all tables are synchronized.\n* Columns: If the table is specified, you can add the columns for the sync operation. If no columns are specified, all columns in the specified table are considered for the sync operation.\n\nTo set the scope for the sync operation:\n\n* Connection-level: To sync all tables and columns, pass an empty request body, or only the attributes in the request body.\n* Table-level: To synchronize specific tables and their columns, specify the table identifiers in the `tables` array.\n* Column-level: To synchronize specific columns, specify the table identifier as the key and column identifiers as the value in the `tables` array.\n\n```\n{\n \"tables\": [\n {\"table-guid-1\": [\"column-guid-1\", \"column-guid-2\"]},\n \"table-guid-2\"\n ],\n \"sync_attributes\": [\"DESCRIPTION\"]\n}\n```\n\n##### API response\n\nIf the sync operation is successful, the API returns the following information:\n\n* Status of the sync operation. For example, `SUCCESS`, `PARTIAL_SUCCESS`, or `NO_UPDATE`.\n* Number of tables and columns that were updated.\n* Number of tables and columns with the sync failed status when the overall sync status is `PARTIAL_SUCCESS`.\n* Message text indicating the sync results.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "createConnection", + "description": "\n Version: 9.2.0.cl or later\n\nCreates a connection to a data warehouse for live query services. \n\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) privilege is required.\n\n#### Create a connection without tables\n\nTo create a connection without tables:\n\n1. Pass these parameters in your API request.\n * Name of the connection.\n * Type of the data warehouse to connect to.\n * A JSON map of configuration attributes in `data_warehouse_config`. The following example shows the configuration attributes for a SnowFlake connection:\n ```\n {\n \"configuration\":{\n \"accountName\":\"thoughtspot_partner\",\n \"user\":\"tsadmin\",\n \"password\":\"TestConn123\",\n \"role\":\"sysadmin\",\n \"warehouse\":\"MEDIUM_WH\"\n },\n \"authenticationType\": \"SERVICE_ACCOUNT\",\n \"externalDatabases\":[\n\n ]\n }\n ```\n2. Set `validate` to `false`.\n\n**NOTE:** If the `authentication_type` is anything other than SERVICE_ACCOUNT, you must explicitly provide the authenticationType property in the payload. If you do not specify authenticationType, the API will default to SERVICE_ACCOUNT as the authentication type.\n\n#### Create a connection with tables\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) and `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**) privilege is required.\n\nTo create a connection with tables:\n\n1. Pass these parameters in your API request.\n * Name of the connection.\n * Type of the data warehouse to connect to.\n * A JSON map of configuration attributes, database details, and table properties in `data_warehouse_config` as shown in the following example:\n ```\n {\n \"configuration\":{\n \"accountName\":\"thoughtspot_partner\",\n \"user\":\"tsadmin\",\n \"password\":\"TestConn123\",\n \"role\":\"sysadmin\",\n \"warehouse\":\"MEDIUM_WH\"\n },\n \"authenticationType\": \"SERVICE_ACCOUNT\",\n \"externalDatabases\":[\n {\n \"name\":\"AllDatatypes\",\n \"isAutoCreated\":false,\n \"schemas\":[\n {\n \"name\":\"alldatatypes\",\n \"tables\":[\n {\n \"name\":\"allDatatypes\",\n \"type\":\"TABLE\",\n \"description\":\"\",\n \"selected\":true,\n \"linked\":true,\n \"columns\":[\n {\n \"name\":\"CNUMBER\",\n \"type\":\"INT64\",\n \"canImport\":true,\n \"selected\":true,\n \"isLinkedActive\":true,\n \"isImported\":false,\n \"tableName\":\"allDatatypes\",\n \"schemaName\":\"alldatatypes\",\n \"dbName\":\"AllDatatypes\"\n },\n {\n \"name\":\"CDECIMAL\",\n \"type\":\"INT64\",\n \"canImport\":true,\n \"selected\":true,\n \"isLinkedActive\":true,\n \"isImported\":false,\n \"tableName\":\"allDatatypes\",\n \"schemaName\":\"alldatatypes\",\n \"dbName\":\"AllDatatypes\"\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ```\n2. Set `validate` to `true`.\n\n**NOTE:** If the `authentication_type` is anything other than SERVICE_ACCOUNT, you must explicitly provide the authenticationType property in the payload. If you do not specify authenticationType, the API will default to SERVICE_ACCOUNT as the authentication type.\n\n\n\n\n#### Endpoint URL\n", "tags": [ "Connections", - "26.5.0.cl" + "9.2.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SyncMetadataRequest" + "$ref": "#/components/schemas/CreateConnectionRequest" } } }, "required": true }, - "parameters": [ - { - "in": "path", - "name": "connection_identifier", - "required": true, - "schema": { - "type": "string" - }, - "description": "Unique ID or name of the connection." - } - ], + "parameters": [], "responses": { "200": { - "description": "Metadata synced successfully.", + "description": "Connection to the datasource successfully created.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SyncMetadataResponse" + "$ref": "#/components/schemas/CreateConnectionResponse" } } } }, "400": { - "description": "Invalid request parameters or hierarchy.", + "description": "Invalid request.", "content": { "application/json": { "schema": { @@ -3507,16 +3565,6 @@ } } }, - "404": { - "description": "Connection, table, or column not found.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "500": { "description": "Unexpected error", "content": { @@ -3530,10 +3578,10 @@ } } }, - "/api/rest/2.0/connection/update": { + "/api/rest/2.0/connection/delete": { "post": { - "operationId": "updateConnection", - "description": "\n Version: 9.2.0.cl or later\n\n**Important**: This endpoint is deprecated and will be removed from ThoughtSpot in September 2025. ThoughtSpot strongly recommends using the\n[Update connection V2](#/http/api-endpoints/connections/update-connection-v2) endpoint to update your connection objects.\n\n#### Usage guidelines\n\nUpdates a connection object. \n\nRequires `DATAMANAGEMENT` (**Can manage data**) and edit permissions to the connection object, or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) privilege is required.\n\nTo update a connection object, pass these parameters in your API request:\n\n1. GUID of the connection object.\n2. If you are updating tables or database schema of a connection object:\n a. Add the updated JSON map of metadata with database, schema, and tables in `data_warehouse_config`.\n b. Set `validate` to `true`.\n3. If you are updating a configuration attribute, connection name, or description, you can set `validate` to `false`.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "deleteConnection", + "description": "\n Version: 9.2.0.cl or later\n\n\n**Important**: This endpoint is deprecated and will be removed from ThoughtSpot in September 2025. ThoughtSpot strongly recommends using the\n[Delete Connection V2](#/http/api-endpoints/connections/delete-connection-v2) endpoint to delete your connection objects. \n\n#### Usage guidelines\n\nDeletes a connection object.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) and edit permissions to the connection object, or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) privilege is required.\n\n**Note**: If a connection has dependent objects, make sure you remove its associations before the delete operation.\n\n\n\n#### Endpoint URL\n", "deprecated": true, "tags": [ "Connections", @@ -3543,7 +3591,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateConnectionRequest" + "$ref": "#/components/schemas/DeleteConnectionRequest" } } }, @@ -3552,7 +3600,7 @@ "parameters": [], "responses": { "204": { - "description": "Connection successfully updated." + "description": "Connection successfully deleted." }, "400": { "description": "Invalid request.", @@ -3597,24 +3645,14 @@ } } }, - "/api/rest/2.0/connections/{connection_identifier}/status": { + "/api/rest/2.0/connections/{connection_identifier}/delete": { "post": { - "operationId": "updateConnectionStatus", - "description": "\n Version: 26.6.0.cl or later\n\nActivates or deactivates a connection. A deactivated connection cannot be used for queries or operations until it is activated again.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) privilege. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) privilege is required. Only the connection owner or an administrator can perform this operation.\n\n#### Usage guidelines\n\nTo update the status of a connection, specify the connection GUID or name in the `connection_identifier` path parameter and the desired `status` in the request body.\n\n- **ACTIVATED**: Enables the connection. Queries and operations can resume on an activated connection.\n- **DEACTIVATED**: Disables the connection. It does not remove the connection metadata, but only makes the connection unavailable for queries and operations. You can reactivate a deactivated connection by setting \"status\": \"ACTIVATED\".\n\n\n\n\n\n#### Endpoint URL\n", + "operationId": "deleteConnectionV2", + "description": "\n Version: 10.4.0.cl or later\n\nDeletes a connection object.\n\n**Note**: If a connection has dependent objects, make sure you remove its associations before the delete operation.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) and edit permissions to the connection object, or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", "tags": [ "Connections", - "26.6.0.cl" + "10.4.0.cl" ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateConnectionStatusRequest" - } - } - }, - "required": true - }, "parameters": [ { "in": "path", @@ -3628,7 +3666,7 @@ ], "responses": { "204": { - "description": "Connection status updated successfully." + "description": "Connection successfully deleted." }, "400": { "description": "Invalid request.", @@ -3660,16 +3698,6 @@ } } }, - "404": { - "description": "Object not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "500": { "description": "Unexpected error", "content": { @@ -3683,24 +3711,14 @@ } } }, - "/api/rest/2.0/connections/{connection_identifier}/update": { + "/api/rest/2.0/connections/download-connection-metadata-changes/{connection_identifier}": { "post": { - "operationId": "updateConnectionV2", - "description": "\n Version: 10.4.0.cl or later\n\nUpdates a connection object.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) and edit permissions to the connection object, or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) privilege is required.\n\nTo update a connection object, pass these parameters in your API request:\n\n1. GUID of the connection object.\n2. If you are updating tables or database schema of a connection object:\n a. Add the updated JSON map of metadata with database, schema, and tables in `data_warehouse_config`.\n b. Set `validate` to `true`.\n \n **NOTE:** If the `authentication_type` is anything other than SERVICE_ACCOUNT, you must explicitly provide the authenticationType property in the payload. If you do not specify authenticationType, the API will default to SERVICE_ACCOUNT as the authentication type.\n\n * A JSON map of configuration attributes, database details, and table properties in `data_warehouse_config` as shown in the following example:\n * This is an example of updating a single table in a empty connection:\n \n ```\n {\n \"authenticationType\": \"SERVICE_ACCOUNT\",\n \"externalDatabases\": [\n {\n \"name\": \"DEVELOPMENT\",\n \"isAutoCreated\": false,\n \"schemas\": [\n {\n \"name\": \"TS_dataset\",\n \"tables\": [\n {\n \"name\": \"DEMORENAME\",\n \"type\": \"TABLE\",\n \"description\": \"\",\n \"selected\": true,\n \"linked\": true,\n \"gid\": 0,\n \"datasetId\": \"-1\",\n \"subType\": \"\",\n \"reportId\": \"\",\n \"viewId\": \"\",\n \"columns\": [\n {\n \"name\": \"Col1\",\n \"type\": \"VARCHAR\",\n \"canImport\": true,\n \"selected\": true,\n \"description\": \"\",\n \"isLinkedActive\": true,\n \"isAggregate\": false\n },\n {\n \"name\": \"Col2\",\n \"type\": \"VARCHAR\",\n \"canImport\": true,\n \"selected\": true,\n \"description\": \"\",\n \"isLinkedActive\": true,\n \"isAggregate\": false\n },\n {\n \"name\": \"Col3\",\n \"type\": \"VARCHAR\",\n \"canImport\": true,\n \"selected\": true,\n \"description\": \"\",\n \"isLinkedActive\": true,\n \"isAggregate\": false\n },\n {\n \"name\": \"Col312\",\n \"type\": \"VARCHAR\",\n \"canImport\": true,\n \"selected\": true,\n \"description\": \"\",\n \"isLinkedActive\": true,\n \"isAggregate\": false\n },\n {\n \"name\": \"Col4\",\n \"type\": \"VARCHAR\",\n \"canImport\": true,\n \"selected\": true,\n \"description\": \"\",\n \"isLinkedActive\": true,\n \"isAggregate\": false\n }\n ],\n \"relationships\": []\n }\n ]\n }\n ]\n }\n ],\n \"configuration\": {\n \"password\": \"\",\n \"database\": \"DEVELOPMENT\",\n \"role\": \"DEV\",\n \"accountName\": \"thoughtspot_partner\",\n \"warehouse\": \"DEMO_WH\",\n \"user\": \"DEV_USER\"\n }\n }\n ```\n \n* This is an example of updating a single table in an existing connection with tables:\n \n ```\n {\n \"authenticationType\": \"SERVICE_ACCOUNT\",\n \"externalDatabases\": [\n {\n \"name\": \"DEVELOPMENT\",\n \"isAutoCreated\": false,\n \"schemas\": [\n {\n \"name\": \"TS_dataset\",\n \"tables\": [\n {\n \"name\": \"CUSTOMER\",\n \"type\": \"TABLE\",\n \"description\": \"\",\n \"selected\": true,\n \"linked\": true,\n \"gid\": 0,\n \"datasetId\": \"-1\",\n \"subType\": \"\",\n \"reportId\": \"\",\n \"viewId\": \"\",\n \"columns\": [],\n \"relationships\": []\n },\n {\n \"name\": \"tpch5k_falcon_default_schema_users\",\n \"type\": \"TABLE\",\n \"description\": \"\",\n \"selected\": true,\n \"linked\": true,\n \"gid\": 0,\n \"datasetId\": \"-1\",\n \"subType\": \"\",\n \"reportId\": \"\",\n \"viewId\": \"\",\n \"columns\": [\n {\n \"name\": \"user_id\",\n \"type\": \"INT64\",\n \"canImport\": true,\n \"selected\": true,\n \"description\": \"\",\n \"isLinkedActive\": true,\n \"isAggregate\": false\n },\n {\n \"name\": \"product_id\",\n \"type\": \"INT64\",\n \"canImport\": true,\n \"selected\": true,\n \"description\": \"\",\n \"isLinkedActive\": true,\n \"isAggregate\": false\n },\n {\n \"name\": \"user_cost\",\n \"type\": \"INT64\",\n \"canImport\": true,\n \"selected\": true,\n \"description\": \"\",\n \"isLinkedActive\": true,\n \"isAggregate\": false\n }\n ],\n \"relationships\": []\n }\n ]\n }\n ]\n }\n ],\n \"configuration\": {\n \"password\": \"\",\n \"database\": \"DEVELOPMENT\",\n \"role\": \"DEV\",\n \"accountName\": \"thoughtspot_partner\",\n \"warehouse\": \"DEMO_WH\",\n \"user\": \"DEV_USER\"\n }\n }\n ```\n\n3. If you are updating a configuration attribute, connection name, or description, you can set `validate` to `false`.\n\n **NOTE:** If the `authentication_type` is anything other than SERVICE_ACCOUNT, you must explicitly provide the authenticationType property in the payload. If you do not specify authenticationType, the API will default to SERVICE_ACCOUNT as the authentication type.\n\n * A JSON map of configuration attributes in `data_warehouse_config`. The following example shows the configuration attributes for a Snowflake connection:\n ```\n {\n \"configuration\":{\n \"accountName\":\"thoughtspot_partner\",\n \"user\":\"tsadmin\",\n \"password\":\"TestConn123\",\n \"role\":\"sysadmin\",\n \"warehouse\":\"MEDIUM_WH\"\n },\n \"externalDatabases\":[\n\n ]\n }\n ```\n\n\n\n\n#### Endpoint URL\n", + "operationId": "downloadConnectionMetadataChanges", + "description": "\n Version: 9.9.0.cl or later\n\nExports the difference in connection metadata between CDW and ThoughtSpot\n\nRequires `DATAMANAGEMENT` (**Can manage data**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the following Data control privileges may be required: \n- `CAN_MANAGE_CUSTOM_CALENDAR`(**Can manage custom calendars**)\n- `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**)\n- `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**)\n\nTo download the connection metadata difference between ThoughtSpot and CDW, pass the connection GUID as `connection_identifier` in the API request.\n\n\n\n\n#### Endpoint URL\n", "tags": [ "Connections", - "10.4.0.cl" + "9.9.0.cl" ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateConnectionV2Request" - } - } - }, - "required": true - }, "parameters": [ { "in": "path", @@ -3709,12 +3727,15 @@ "schema": { "type": "string" }, - "description": "Unique ID or name of the connection." + "description": "GUID of the connection" } ], "responses": { - "204": { - "description": "Connection successfully updated." + "200": { + "description": "Export metadata changes.", + "content": { + "application/octet-stream": {} + } }, "400": { "description": "Invalid request.", @@ -3759,50 +3780,32 @@ } } }, - "/api/rest/2.0/customization/custom-actions": { + "/api/rest/2.0/connections/fetch-connection-diff-status/{connection_identifier}": { "post": { - "operationId": "createCustomAction", - "description": "\n Version: 9.6.0.cl or later\n\nCreates a custom action that appears as a menu action on a saved Answer or Liveboard visualization.\n\nRequires `DEVELOPER` (**Has Developer privilege**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `DEVELOPER` (**Has developer privilege**) privilege is required.\n\n#### Usage Guidelines\n\nThe API lets you create the following types of custom actions:\n\n* URL-based action \n Allows pushing data to an external URL.\n* Callback action \n Triggers a callback to the host application and initiates a response payload on an embedded ThoughtSpot instance.\n\nBy default, custom actions are visible to only administrator or developer users. To make a custom action available to other users, and specify the groups in `group_identifiers`.\n\nBy default, the custom action is set as a _global_ action on all visualizations and saved Answers. To assign a custom action to specific Liveboard visualization, saved Answer, or Worksheet, set `visibility` to `false` in `default_action_config` property and specify the GUID or name of the object in `associate_metadata`.\n\nFor more information, see [Custom actions](https://developers.thoughtspot.com/docs/custom-action-intro).\n\n\n\n\n#### Endpoint URL\n", + "operationId": "fetchConnectionDiffStatus", + "description": "\n Version: 9.9.0.cl or later\n\nValidates the difference in connection metadata between CDW and ThoughtSpot.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the following Data control privileges may be required:\n\n- `CAN_MANAGE_CUSTOM_CALENDAR`(**Can manage custom calendars**)\n- `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**)\n- `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**)\n\nReturns a boolean indicating whether there is any difference between the connection metadata at ThoughtSpot and CDW.\n\nTo get the connection metadata difference status, pass the connection GUID as `connection_identifier` in the API request.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Custom Action", - "9.6.0.cl" + "Connections", + "9.9.0.cl" + ], + "parameters": [ + { + "in": "path", + "name": "connection_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "GUID of the connection" + } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateCustomActionRequest" - } - } - }, - "required": true - }, - "parameters": [], "responses": { "200": { - "description": "Custom action created successfully.", + "description": "true/false", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ResponseCustomAction" - }, - "examples": { - "example_1": { - "value": { - "action_details": { - "CALLBACK": { - "reference": "customaction" - } - }, - "default_action_config": { - "visibility": true - }, - "id": "3d3cad0f-e57b-4faa-8e24-da596c727ee0", - "metadata_association": [], - "name": "customactionsample", - "user_groups": [] - } - } + "$ref": "#/components/schemas/FetchConnectionDiffStatusResponse" } } } @@ -3850,28 +3853,45 @@ } } }, - "/api/rest/2.0/customization/custom-actions/{custom_action_identifier}/delete": { + "/api/rest/2.0/connections/{connection_identifier}/revoke-refresh-tokens": { "post": { - "operationId": "deleteCustomAction", - "description": "\n Version: 9.6.0.cl or later\n\nRemoves the custom action specified in the API request.\n\nRequires `DEVELOPER` (**Has Developer privilege**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `DEVELOPER` (**Has developer privilege**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "revokeRefreshTokens", + "description": "\n Version: 26.2.0.cl or later\n\nRevokes OAuth refresh tokens for users who no longer require access to a data warehouse connection.\nWhen a token is revoked, the affected user's session for that connection is terminated, and they must re-authenticate to regain access.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DATAMANAGEMENT` (**Can manage data**) privileges.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on the ThoughtSpot instance, users with `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) privilege can also make API requests to revoke tokens for connection users.\n\n#### Usage guidelines\n\nYou can specify different combinations of identifiers to control which refresh tokens are revoked.\n\n- **connection_identifier**: Revokes refresh tokens for all users of the connection, except the connection author.\n- **connection_identifier** and **user_identifiers**: Revokes refresh tokens only for the users specified in the request. If the name or ID of the connection author is included in the request, their token will also be revoked.\n- **connection_identifier** and **configuration_identifiers**: Revokes refresh tokens for all users on the specified configurations, except the configuration author.\n- **connection_identifier**, **configuration_identifiers**, and **user_identifiers**: Revokes refresh tokens for the specified users on the specified configurations.\n- **connection_identifier** and **org_identifiers**: Revokes refresh tokens for the specified Orgs. Applicable only for published connections.\n- **connection_identifier**, **org_identifiers**, and **user_identifiers**: Revokes refresh tokens for the specified users in the specified Orgs. Applicable only for published connections.\n\n**NOTE**: The `org_identifiers` parameter is only applicable for published connections. Using this parameter for unpublished connections will result in an error. Ensure that the connections are published before making the API request.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Custom Action", - "9.6.0.cl" + "Connections", + "26.2.0.cl" ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RevokeRefreshTokensRequest" + } + } + }, + "required": true + }, "parameters": [ { "in": "path", - "name": "custom_action_identifier", + "name": "connection_identifier", "required": true, "schema": { "type": "string" }, - "description": "Unique ID or name of the custom action." + "description": "Unique ID or name of the connection whose refresh tokens need to be revoked. All the users associated with the connection will have their refresh tokens revoked except the author." } ], "responses": { - "204": { - "description": "Custom action is successfully deleted." + "200": { + "description": "Token(s) successfully revoked.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RevokeRefreshTokensResponse" + } + } + } }, "400": { "description": "Invalid request.", @@ -3903,6 +3923,26 @@ } } }, + "404": { + "description": "Object not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "409": { + "description": "Conflict", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "500": { "description": "Unexpected error", "content": { @@ -3916,19 +3956,19 @@ } } }, - "/api/rest/2.0/customization/custom-actions/search": { + "/api/rest/2.0/connection/search": { "post": { - "operationId": "searchCustomActions", - "description": "\n Version: 9.6.0.cl or later\n\nGets custom actions configured on the cluster.\n\nRequires `DEVELOPER` (**Has Developer privilege**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `DEVELOPER` (**Has developer privilege**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "searchConnection", + "description": "\n Version: 9.2.0.cl or later\n\nGets connection objects.\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) privilege is required.\n\n- To get a list of all connections available in the ThoughtSpot system, send the API request without any attributes in the request body.\n- To get the connection objects for a specific type of data warehouse, specify the type in `data_warehouse_types`.\n- To fetch details of a connection object, specify the connection object GUID or name. The `name_pattern` attribute allows passing partial text with `%` for a wildcard match.\n- To get details of the database, schemas, tables, or columns from a data connection object, specify `data_warehouse_object_type`.\n- To get a specific database, schema, table, or column from a connection object, define the object type in `data_warehouse_object_type` and object properties in the `data_warehouse_objects` array. For example, to search for a column, you must pass the database, schema, and table names in the API request.\n Note that in the following example, object properties are set in a hierarchical order (`database` > `schema` > `table` > `column`).\n\n```\n{\n \"connections\": [\n {\n \"identifier\": \"b9d1f2ef-fa65-4a4b-994e-30fa2d57b0c2\",\n \"data_warehouse_objects\": [\n {\n \"database\": \"NEBULADEV\",\n \"schema\": \"INFORMATION_SCHEMA\",\n \"table\": \"APPLICABLE_ROLES\",\n \"column\": \"ROLE_NAME\"\n }\n ]\n }\n ],\n \"data_warehouse_object_type\": \"COLUMN\"\n}\n```\n\n- To fetch data by `configuration`, specify `data_warehouse_object_type`. For example, to fetch columns from the `DEVELOPMENT` database, specify the `data_warehouse_object_type` as `DATABASE` and define the `configuration` string as `{\"database\":\"DEVELOPMENT\"}`. To get column data for a specific table, specify the table, for example,`{\"database\":\"RETAILAPPAREL\",\"table\":\"PIPES\"}`.\n- To query connections by `authentication_type`, specify `data_warehouse_object_type`. Supported values for `authentication_type` are:\n - `SERVICE_ACCOUNT`: For connections that require service account credentials to authenticate to the Cloud Data Warehouse and fetch data.\n - `OAUTH`: For connections that require OAuth credentials to authenticate to the Cloud Data Warehouse and fetch data. Teradata, Oracle, and Presto Cloud Data Warehouses do not support the OAuth authentication type.\n - `IAM`: For connections that have the IAM OAuth set up. This authentication type is supported on Amazon Redshift connections only.\n - `EXTOAUTH`: For connections that have External OAuth set up. ThoughtSpot supports external [OAuth with Microsoft Azure Active Directory (AD)](https://docs.thoughtspot.com/cloud/latest/ connections-snowflake-azure-ad-oauth) and [Okta for Snowflake data connections](https://docs.thoughtspot.com/cloud/latest/connections-snowflake-okta-oauth).\n - `KEY_PAIR`: For connections that require Key Pair account credentials to authenticate to the Cloud Data Warehouse and fetch data. This authentication type is supported on Snowflake connections only.\n - `OAUTH_WITH_PKCE`: For connections that require OAuth with PKCE account credentials to authenticate to the Cloud Data Warehouse and fetch data. This authentication type is supported on Snowflake, Starburst, Databricks, Denodo connections only.\n - `EXTOAUTH_WITH_PKCE`: For connections that require External OAuth With PKCE account credentials to authenticate to the Cloud Data Warehouse and fetch data. This authentication type is supported on Snowflake connections only.\n - `OAUTH_WITH_PEZ`: For connections that require OAuth With PEZ account credentials to authenticate to the Cloud Data Warehouse and fetch data. This authentication type is supported on Amazon Redshift connections only.\n - `OAUTH_WITH_SERVICE_PRINCIPAL`: For connections that require OAuth With Service Principal account credentials to authenticate to the Cloud Data Warehouse and fetch data. This authentication type is supported on Databricks connections only.\n - `PERSONAL_ACCESS_TOKEN`: For connections that require Personal Access Token account credentials to authenticate to the Cloud Data Warehouse and fetch data. This authentication type is supported on Databricks connections only.\n - `OAUTH_CLIENT_CREDENTIALS`: For connections that require OAuth Client Credentials to authenticate to the Cloud Data Warehouse and fetch data. This authentication type is supported on Snowflake connections only.\n- To include more details about connection objects in the API response, set `include_details` to `true`.\n- You can also sort the output by field names and filter connections by tags.\n\n**NOTE**: When filtering connection records by parameters other than `data_warehouse_types` or `tag_identifiers`, ensure that you set `record_size` to `-1` and `record_offset` to `0` for precise results.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Custom Action", - "9.6.0.cl" + "Connections", + "9.2.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SearchCustomActionsRequest" + "$ref": "#/components/schemas/SearchConnectionRequest" } } }, @@ -3937,31 +3977,13 @@ "parameters": [], "responses": { "200": { - "description": "Custom action search is successful.", + "description": "List of connections to the datasource.", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ResponseCustomAction" - } - }, - "examples": { - "example_1": { - "value": [ - { - "action_details": { - "CALLBACK": { - "reference": "LEDE" - } - }, - "default_action_config": { - "visibility": true - }, - "id": "c59262df-cf9e-4947-96fa-52d494688797", - "name": "LEDE" - } - ] + "$ref": "#/components/schemas/SearchConnectionResponse" } } } @@ -4010,19 +4032,19 @@ } } }, - "/api/rest/2.0/customization/custom-actions/{custom_action_identifier}/update": { + "/api/rest/2.0/connections/{connection_identifier}/resync-metadata": { "post": { - "operationId": "updateCustomAction", - "description": "\n Version: 9.6.0.cl or later\n\nUpdates a custom action.\n\nRequires `DEVELOPER` (**Has Developer privilege**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `DEVELOPER` (**Has developer privilege**) privilege is required.\n\n#### Usage Guidelines\n\nThe API allows you to modify the following properties:\n\n* Name of the custom action\n* Action availability to groups\n* Association to metadata objects\n* Authentication settings for a URL-based action\n\nFor more information, see [Custom actions](https://developers.thoughtspot.com/docs/custom-action-intro).\n\n\n\n\n#### Endpoint URL\n", + "operationId": "syncMetadata", + "description": "\n Version: 26.5.0.cl or later\n\nSynchronizes connection metadata attributes from your Cloud Data Warehouse (CDW) with ThoughtSpot.\n\nRequires the `DATAMANAGEMENT` (**Can manage data**) privilege. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**) privilege is required.\n\n#### Usage guidelines\n\nTo synchronize attributes from a CDW, specify the connection GUID or name in the `connection_identifier` path parameter and `sync_attributes` in the request body. Default attribute is `[\"DESCRIPTION\"]`.\n\n##### Hierarchical schema\n\n* Connection: The connection object for the sync operation.\n* Tables: Tables for the sync operation. When no table is specified, all tables are synchronized.\n* Columns: If the table is specified, you can add the columns for the sync operation. If no columns are specified, all columns in the specified table are considered for the sync operation.\n\nTo set the scope for the sync operation:\n\n* Connection-level: To sync all tables and columns, pass an empty request body, or only the attributes in the request body.\n* Table-level: To synchronize specific tables and their columns, specify the table identifiers in the `tables` array.\n* Column-level: To synchronize specific columns, specify the table identifier as the key and column identifiers as the value in the `tables` array.\n\n```\n{\n \"tables\": [\n {\"table-guid-1\": [\"column-guid-1\", \"column-guid-2\"]},\n \"table-guid-2\"\n ],\n \"sync_attributes\": [\"DESCRIPTION\"]\n}\n```\n\n##### API response\n\nIf the sync operation is successful, the API returns the following information:\n\n* Status of the sync operation. For example, `SUCCESS`, `PARTIAL_SUCCESS`, or `NO_UPDATE`.\n* Number of tables and columns that were updated.\n* Number of tables and columns with the sync failed status when the overall sync status is `PARTIAL_SUCCESS`.\n* Message text indicating the sync results.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Custom Action", - "9.6.0.cl" + "Connections", + "26.5.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateCustomActionRequest" + "$ref": "#/components/schemas/SyncMetadataRequest" } } }, @@ -4031,20 +4053,27 @@ "parameters": [ { "in": "path", - "name": "custom_action_identifier", + "name": "connection_identifier", "required": true, "schema": { "type": "string" }, - "description": "Unique ID or name of the custom action." + "description": "Unique ID or name of the connection." } ], "responses": { - "204": { - "description": "Custom action updated successfully." - }, + "200": { + "description": "Metadata synced successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SyncMetadataResponse" + } + } + } + }, "400": { - "description": "Invalid request.", + "description": "Invalid request parameters or hierarchy.", "content": { "application/json": { "schema": { @@ -4073,6 +4102,16 @@ } } }, + "404": { + "description": "Connection, table, or column not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "500": { "description": "Unexpected error", "content": { @@ -4086,19 +4125,20 @@ } } }, - "/api/rest/2.0/calendars/create": { + "/api/rest/2.0/connection/update": { "post": { - "operationId": "createCalendar", - "description": "\n Version: 10.12.0.cl or later\n\nCreates a new [custom calendar](https://docs.thoughtspot.com/cloud/latest/connections-cust-cal).\n\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your ThoughtSpot instance, the `CAN_MANAGE_CUSTOM_CALENDAR` (**Can manage custom calendars**) privilege is required.\n\n\n#### Usage guidelines\n\nYou can create a custom calendar from scratch or an existing Table in ThoughtSpot. For both methods of calendar creation, the following parameters are required:\n\n* Name of the custom calendar.\n* Calendar creation method. To create a calendar from an existing table, specify the method:\n\n - `FROM_EXISTING_TABLE` - Creates calendar from the table reference provided in the API request.\n - `FROM_INPUT_PARAMS` - Creates a calendar from the parameters defined in the API request.\n\n* Connection ID and Table name\n* Database and schema name attributes:\n For most Cloud Data Warehouse (CDW) connectors, both `database_name` and `schema_name` attributes are required. \n However, the attribute requirements are conditional and vary based on the connector type and its metadata structure. For example, for connectors such as Teradata, MySQL, SingleSore, Amazon Aurora MySQL, Amazon RDS MySQL, Oracle, and GCP_MYSQL, the `schema_name` is required, whereas the `database_name` attribute is not.\n Similarly, connectors such as ClickHouse require you to specify the `database_name` and the schema specification in such cases is optional.\n\n**NOTE**: If you are creating a calendar from an existing table, ensure that the referenced table matches the required DDL for custom calendars. If the schema does not match, the API returns an error.\n\n##### Calendar type\nThe API allows you to create the following types of calendars:\n\n* `MONTH_OFFSET`. The default calendar type. A `MONTH_OFFSET` calendar is offset by a few months from the standard calendar months (January to December) and the year begins with the month defined in the request. For example, if the `month_offset` value is set as `April`, the calendar year begins in April.\n\n* `4-4-5`. Each quarter in the calendar will include two 4-week months followed by one 5-week month.\n* `4-5-4`. Each quarter in the calendar will include two 4-week months with a 5-week month between.\n* `5-4-4`. Each quarter begins with a 5-week month, followed by two 4-week months.\n\nTo start and end the calendar on a specific date, specify the dates in the `MM/DD/YYYY` format. For `MONTH_OFFSET` calendars, ensure that the `start_date` matches the month specified in the `month_offset` attribute.\n\nYou can also set the starting day of the week and customize the prefixes for year and quarter labels.\n\n#### Examples\n\nTo create a calendar from an existing table:\n\n```\n{\n \"name\": \"MyCustomCalendar1\",\n \"table_reference\": {\n \"connection_identifier\": \"4db8ea22-2ff4-4224-b05a-26674717e468\",\n \"table_name\": \"MyCalendarTable\",\n \"database_name\": \"RETAILAPPAREL\",\n \"schema_name\": \"PUBLIC\"\n },\n \"creation_method\": \"FROM_EXISTING_TABLE\",\n}\n```\n\nTo create a calendar from scratch:\n\n```\n{\n \"name\": \"MyCustomCalendar1\",\n \"table_reference\": {\n \"connection_identifier\": \"4db8ea22-2ff4-4224-b05a-26674717e468\",\n \"table_name\": \"MyCalendarTable\",\n \"database_name\": \"RETAILAPPAREL\",\n \"schema_name\": \"PUBLIC\"\n },\n \"creation_method\": \"FROM_INPUT_PARAMS\",\n \"calendar_type\": \"MONTH_OFFSET\",\n \"month_offset\": \"April\",\n \"start_day_of_week\": \"Monday\",\n \"quarter_name_prefix\": \"Q\",\n \"year_name_prefix\": \"FY\",\n \"start_date\": \"04/01/2025\",\n \"end_date\": \"04/31/2025\"\n}\n```\n\n\n\n\n#### Endpoint URL\n", + "operationId": "updateConnection", + "description": "\n Version: 9.2.0.cl or later\n\n**Important**: This endpoint is deprecated and will be removed from ThoughtSpot in September 2025. ThoughtSpot strongly recommends using the\n[Update connection V2](#/http/api-endpoints/connections/update-connection-v2) endpoint to update your connection objects.\n\n#### Usage guidelines\n\nUpdates a connection object. \n\nRequires `DATAMANAGEMENT` (**Can manage data**) and edit permissions to the connection object, or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) privilege is required.\n\nTo update a connection object, pass these parameters in your API request:\n\n1. GUID of the connection object.\n2. If you are updating tables or database schema of a connection object:\n a. Add the updated JSON map of metadata with database, schema, and tables in `data_warehouse_config`.\n b. Set `validate` to `true`.\n3. If you are updating a configuration attribute, connection name, or description, you can set `validate` to `false`.\n\n\n\n\n#### Endpoint URL\n", + "deprecated": true, "tags": [ - "Custom Calendars", - "10.12.0.cl" + "Connections", + "9.2.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateCalendarRequest" + "$ref": "#/components/schemas/UpdateConnectionRequest" } } }, @@ -4106,15 +4146,8 @@ }, "parameters": [], "responses": { - "200": { - "description": "Custom calendar created successfully.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CalendarResponse" - } - } - } + "204": { + "description": "Connection successfully updated." }, "400": { "description": "Invalid request.", @@ -4159,28 +4192,38 @@ } } }, - "/api/rest/2.0/calendars/{calendar_identifier}/delete": { + "/api/rest/2.0/connections/{connection_identifier}/status": { "post": { - "operationId": "deleteCalendar", - "description": "\n Version: 10.12.0.cl or later\n\nDeletes a [custom calendar](https://docs.thoughtspot.com/cloud/latest/connections-cust-cal).\n\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your ThoughtSpot instance, the `CAN_MANAGE_CUSTOM_CALENDAR` (**Can manage custom calendars**) privilege is required.\n\n#### Usage guidelines\nTo delete a custom calendar, specify the calendar ID as a path parameter in the request URL. \n\n\n\n\n#### Endpoint URL\n", + "operationId": "updateConnectionStatus", + "description": "\n Version: 26.6.0.cl or later\n\nActivates or deactivates a connection. A deactivated connection cannot be used for queries or operations until it is activated again.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) privilege. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) privilege is required. Only the connection owner or an administrator can perform this operation.\n\n#### Usage guidelines\n\nTo update the status of a connection, specify the connection GUID or name in the `connection_identifier` path parameter and the desired `status` in the request body.\n\n- **ACTIVATED**: Enables the connection. Queries and operations can resume on an activated connection.\n- **DEACTIVATED**: Disables the connection. It does not remove the connection metadata, but only makes the connection unavailable for queries and operations. You can reactivate a deactivated connection by setting \"status\": \"ACTIVATED\".\n\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Custom Calendars", - "10.12.0.cl" + "Connections", + "26.6.0.cl" ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateConnectionStatusRequest" + } + } + }, + "required": true + }, "parameters": [ { "in": "path", - "name": "calendar_identifier", + "name": "connection_identifier", "required": true, "schema": { "type": "string" }, - "description": "Unique ID or name of the Calendar." + "description": "Unique ID or name of the connection." } ], "responses": { "204": { - "description": "Custom calendar successfully deleted." + "description": "Connection status updated successfully." }, "400": { "description": "Invalid request.", @@ -4212,6 +4255,16 @@ } } }, + "404": { + "description": "Object not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "500": { "description": "Unexpected error", "content": { @@ -4225,35 +4278,38 @@ } } }, - "/api/rest/2.0/calendars/generate-csv": { + "/api/rest/2.0/connections/{connection_identifier}/update": { "post": { - "operationId": "generateCSV", - "description": "\n Version: 10.12.0.cl or later\n\nExports a [custom calendar](https://docs.thoughtspot.com/cloud/latest/connections-cust-cal) in the CSV format.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your ThoughtSpot instance, the `CAN_MANAGE_CUSTOM_CALENDAR` (**Can manage custom calendars**) privilege is required.\n\n#### Usage guidelines\n\nUse this API to download a custom calendar in the CSV file format. In your API request, specify the following parameters.\n\n* Start and end date of the calendar. For \"month offset\" calendars, the start date must match the month defined in the `month_offset` attribute.\n\nYou can also specify optional parameters such as the starting day of the week and prefixes for the quarter and year labels.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "updateConnectionV2", + "description": "\n Version: 10.4.0.cl or later\n\nUpdates a connection object.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) and edit permissions to the connection object, or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**) privilege is required.\n\nTo update a connection object, pass these parameters in your API request:\n\n1. GUID of the connection object.\n2. If you are updating tables or database schema of a connection object:\n a. Add the updated JSON map of metadata with database, schema, and tables in `data_warehouse_config`.\n b. Set `validate` to `true`.\n \n **NOTE:** If the `authentication_type` is anything other than SERVICE_ACCOUNT, you must explicitly provide the authenticationType property in the payload. If you do not specify authenticationType, the API will default to SERVICE_ACCOUNT as the authentication type.\n\n * A JSON map of configuration attributes, database details, and table properties in `data_warehouse_config` as shown in the following example:\n * This is an example of updating a single table in a empty connection:\n \n ```\n {\n \"authenticationType\": \"SERVICE_ACCOUNT\",\n \"externalDatabases\": [\n {\n \"name\": \"DEVELOPMENT\",\n \"isAutoCreated\": false,\n \"schemas\": [\n {\n \"name\": \"TS_dataset\",\n \"tables\": [\n {\n \"name\": \"DEMORENAME\",\n \"type\": \"TABLE\",\n \"description\": \"\",\n \"selected\": true,\n \"linked\": true,\n \"gid\": 0,\n \"datasetId\": \"-1\",\n \"subType\": \"\",\n \"reportId\": \"\",\n \"viewId\": \"\",\n \"columns\": [\n {\n \"name\": \"Col1\",\n \"type\": \"VARCHAR\",\n \"canImport\": true,\n \"selected\": true,\n \"description\": \"\",\n \"isLinkedActive\": true,\n \"isAggregate\": false\n },\n {\n \"name\": \"Col2\",\n \"type\": \"VARCHAR\",\n \"canImport\": true,\n \"selected\": true,\n \"description\": \"\",\n \"isLinkedActive\": true,\n \"isAggregate\": false\n },\n {\n \"name\": \"Col3\",\n \"type\": \"VARCHAR\",\n \"canImport\": true,\n \"selected\": true,\n \"description\": \"\",\n \"isLinkedActive\": true,\n \"isAggregate\": false\n },\n {\n \"name\": \"Col312\",\n \"type\": \"VARCHAR\",\n \"canImport\": true,\n \"selected\": true,\n \"description\": \"\",\n \"isLinkedActive\": true,\n \"isAggregate\": false\n },\n {\n \"name\": \"Col4\",\n \"type\": \"VARCHAR\",\n \"canImport\": true,\n \"selected\": true,\n \"description\": \"\",\n \"isLinkedActive\": true,\n \"isAggregate\": false\n }\n ],\n \"relationships\": []\n }\n ]\n }\n ]\n }\n ],\n \"configuration\": {\n \"password\": \"\",\n \"database\": \"DEVELOPMENT\",\n \"role\": \"DEV\",\n \"accountName\": \"thoughtspot_partner\",\n \"warehouse\": \"DEMO_WH\",\n \"user\": \"DEV_USER\"\n }\n }\n ```\n \n* This is an example of updating a single table in an existing connection with tables:\n \n ```\n {\n \"authenticationType\": \"SERVICE_ACCOUNT\",\n \"externalDatabases\": [\n {\n \"name\": \"DEVELOPMENT\",\n \"isAutoCreated\": false,\n \"schemas\": [\n {\n \"name\": \"TS_dataset\",\n \"tables\": [\n {\n \"name\": \"CUSTOMER\",\n \"type\": \"TABLE\",\n \"description\": \"\",\n \"selected\": true,\n \"linked\": true,\n \"gid\": 0,\n \"datasetId\": \"-1\",\n \"subType\": \"\",\n \"reportId\": \"\",\n \"viewId\": \"\",\n \"columns\": [],\n \"relationships\": []\n },\n {\n \"name\": \"tpch5k_falcon_default_schema_users\",\n \"type\": \"TABLE\",\n \"description\": \"\",\n \"selected\": true,\n \"linked\": true,\n \"gid\": 0,\n \"datasetId\": \"-1\",\n \"subType\": \"\",\n \"reportId\": \"\",\n \"viewId\": \"\",\n \"columns\": [\n {\n \"name\": \"user_id\",\n \"type\": \"INT64\",\n \"canImport\": true,\n \"selected\": true,\n \"description\": \"\",\n \"isLinkedActive\": true,\n \"isAggregate\": false\n },\n {\n \"name\": \"product_id\",\n \"type\": \"INT64\",\n \"canImport\": true,\n \"selected\": true,\n \"description\": \"\",\n \"isLinkedActive\": true,\n \"isAggregate\": false\n },\n {\n \"name\": \"user_cost\",\n \"type\": \"INT64\",\n \"canImport\": true,\n \"selected\": true,\n \"description\": \"\",\n \"isLinkedActive\": true,\n \"isAggregate\": false\n }\n ],\n \"relationships\": []\n }\n ]\n }\n ]\n }\n ],\n \"configuration\": {\n \"password\": \"\",\n \"database\": \"DEVELOPMENT\",\n \"role\": \"DEV\",\n \"accountName\": \"thoughtspot_partner\",\n \"warehouse\": \"DEMO_WH\",\n \"user\": \"DEV_USER\"\n }\n }\n ```\n\n3. If you are updating a configuration attribute, connection name, or description, you can set `validate` to `false`.\n\n **NOTE:** If the `authentication_type` is anything other than SERVICE_ACCOUNT, you must explicitly provide the authenticationType property in the payload. If you do not specify authenticationType, the API will default to SERVICE_ACCOUNT as the authentication type.\n\n * A JSON map of configuration attributes in `data_warehouse_config`. The following example shows the configuration attributes for a Snowflake connection:\n ```\n {\n \"configuration\":{\n \"accountName\":\"thoughtspot_partner\",\n \"user\":\"tsadmin\",\n \"password\":\"TestConn123\",\n \"role\":\"sysadmin\",\n \"warehouse\":\"MEDIUM_WH\"\n },\n \"externalDatabases\":[\n\n ]\n }\n ```\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Custom Calendars", - "10.12.0.cl" + "Connections", + "10.4.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GenerateCSVRequest" + "$ref": "#/components/schemas/UpdateConnectionV2Request" } } }, "required": true }, - "parameters": [], + "parameters": [ + { + "in": "path", + "name": "connection_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique ID or name of the connection." + } + ], "responses": { - "200": { - "description": "Generate custom calendar data based on specifications, as a CSV file.", - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - } + "204": { + "description": "Connection successfully updated." }, "400": { "description": "Invalid request.", @@ -4298,19 +4354,19 @@ } } }, - "/api/rest/2.0/calendars/search": { + "/api/rest/2.0/customization/custom-actions": { "post": { - "operationId": "searchCalendars", - "description": "\n Version: 10.12.0.cl or later\n\nGets a list of [custom calendars](https://docs.thoughtspot.com/cloud/latest/connections-cust-cal).\n\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your ThoughtSpot instance, the `CAN_MANAGE_CUSTOM_CALENDAR` (**Can manage custom calendars**) privilege is required.\n\n#### Usage guidelines\n\nBy default, the API returns a list of custom calendars for all connection objects. To retrieve custom calendar details for a particular connection, specify the connection ID. You can also use other search parameters such as `name_pattern` and `sort_options` as search filters.\n\nThe `name_pattern` parameter filters and returns only those objects that match the specified pattern. Use `%` as a wildcard for pattern matching.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "createCustomAction", + "description": "\n Version: 9.6.0.cl or later\n\nCreates a custom action that appears as a menu action on a saved Answer or Liveboard visualization.\n\nRequires `DEVELOPER` (**Has Developer privilege**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `DEVELOPER` (**Has developer privilege**) privilege is required.\n\n#### Usage Guidelines\n\nThe API lets you create the following types of custom actions:\n\n* URL-based action \n Allows pushing data to an external URL.\n* Callback action \n Triggers a callback to the host application and initiates a response payload on an embedded ThoughtSpot instance.\n\nBy default, custom actions are visible to only administrator or developer users. To make a custom action available to other users, and specify the groups in `group_identifiers`.\n\nBy default, the custom action is set as a _global_ action on all visualizations and saved Answers. To assign a custom action to specific Liveboard visualization, saved Answer, or Worksheet, set `visibility` to `false` in `default_action_config` property and specify the GUID or name of the object in `associate_metadata`.\n\nFor more information, see [Custom actions](https://developers.thoughtspot.com/docs/custom-action-intro).\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Custom Calendars", - "10.12.0.cl" + "Custom Action", + "9.6.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SearchCalendarsRequest" + "$ref": "#/components/schemas/CreateCustomActionRequest" } } }, @@ -4319,13 +4375,28 @@ "parameters": [], "responses": { "200": { - "description": "Custom calendar fetched successfully.", + "description": "Custom action created successfully.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CalendarResponse" + "$ref": "#/components/schemas/ResponseCustomAction" + }, + "examples": { + "example_1": { + "value": { + "action_details": { + "CALLBACK": { + "reference": "customaction" + } + }, + "default_action_config": { + "visibility": true + }, + "id": "3d3cad0f-e57b-4faa-8e24-da596c727ee0", + "metadata_association": [], + "name": "customactionsample", + "user_groups": [] + } } } } @@ -4374,38 +4445,28 @@ } } }, - "/api/rest/2.0/calendars/{calendar_identifier}/update": { + "/api/rest/2.0/customization/custom-actions/{custom_action_identifier}/delete": { "post": { - "operationId": "updateCalendar", - "description": "\n Version: 10.12.0.cl or later\n\nUpdates the properties of a [custom calendar](https://docs.thoughtspot.com/cloud/latest/connections-cust-cal).\n\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your ThoughtSpot instance, the `CAN_MANAGE_CUSTOM_CALENDAR` (**Can manage custom calendars**) privilege is required.\n\n#### Usage guidelines\n\nYou can update the properties of a calendar using one of the following methods:\n* `FROM_INPUT_PARAMS` to update the calendar properties with the values defined in the API request.\n* `FROM_EXISTING_TABLE` Creates a calendar from the parameters defined in the API request.\n\nTo update a custom calendar, specify the calendar ID as a path parameter in the request URL and the following parameters in the request body: \n\n* Connection ID and Table name\n* Database and schema name attributes:\n For most Cloud Data Warehouse (CDW) connectors, both `database_name` and `schema_name` attributes are required. \n However, the attribute requirements are conditional and vary based on the connector type and its metadata structure. For example, for connectors such as Teradata, MySQL, SingleSore, Amazon Aurora MySQL, Amazon RDS MySQL, Oracle, and GCP_MYSQL, the `schema_name` is required, whereas the `database_name` attribute is not.\n Similarly, connectors such as ClickHouse require you to specify the `database_name` and the schema specification in such cases is optional.\n\nThe API allows you to modify the calendar type, month offset value, start and end date, starting day of the week, and prefixes assigned to the year and quarter labels. \n\n#### Examples\n\nUpdate a custom calendar using an existing Table in ThoughtSpot:\n\n```\n{\n \"update_method\": \"FROM_EXISTING_TABLE\",\n \"table_reference\": {\n \"connection_identifier\": \"Connection1\",\n \"database_name\": \"db1\",\n \"table_name\": \"custom_calendar_2025\",\n \"schame_name\": \"schemaVar\"\n }\n}\n```\n\nUpdate a custom calendar with the attributes defined in the API request:\n\n```\n{\n \"update_method\": \"FROM_INPUT_PARAMS\",\n \"table_reference\": {\n \"connection_identifier\": \"Connection1\",\n \"database_name\": \"db1\",\n \"table_name\": \"custom_calendar_2025\",\n \"schame_name\": \"schemaVar\"\n },\n \"month_offset\": \"August\",\n \"start_day_of_week\": \"Monday\",\n \"start_date\": \"08/01/2025\",\n \"end_date\": \"07/31/2026\"\n}\n```\n\n\n\n\n#### Endpoint URL\n", + "operationId": "deleteCustomAction", + "description": "\n Version: 9.6.0.cl or later\n\nRemoves the custom action specified in the API request.\n\nRequires `DEVELOPER` (**Has Developer privilege**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `DEVELOPER` (**Has developer privilege**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Custom Calendars", - "10.12.0.cl" + "Custom Action", + "9.6.0.cl" ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateCalendarRequest" - } - } - }, - "required": true - }, "parameters": [ { "in": "path", - "name": "calendar_identifier", + "name": "custom_action_identifier", "required": true, "schema": { "type": "string" }, - "description": "Unique Id or name of the calendar." + "description": "Unique ID or name of the custom action." } ], "responses": { "204": { - "description": "Custom calendar updated successfully." + "description": "Custom action is successfully deleted." }, "400": { "description": "Invalid request.", @@ -4450,19 +4511,19 @@ } } }, - "/api/rest/2.0/metadata/answer/data": { + "/api/rest/2.0/customization/custom-actions/search": { "post": { - "operationId": "fetchAnswerData", - "description": "\n Version: 9.0.0.cl or later\n\nFetches data from a saved Answer.\n\nRequires at least view access to the saved Answer.\n\nThe `record_size` attribute determines the number of records to retrieve in an API call. For more information about pagination, record size, and maximum row limit, see [Pagination and record size settings](https://developers.thoughtspot.com/docs/fetch-data-and-report-apis#_pagination_settings_for_data_and_report_apis).\n\n\n\n#### Endpoint URL\n", + "operationId": "searchCustomActions", + "description": "\n Version: 9.6.0.cl or later\n\nGets custom actions configured on the cluster.\n\nRequires `DEVELOPER` (**Has Developer privilege**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `DEVELOPER` (**Has developer privilege**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Data", - "9.0.0.cl" + "Custom Action", + "9.6.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FetchAnswerDataRequest" + "$ref": "#/components/schemas/SearchCustomActionsRequest" } } }, @@ -4471,11 +4532,32 @@ "parameters": [], "responses": { "200": { - "description": "Fetching data of specified metadata object is successful.", + "description": "Custom action search is successful.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AnswerDataResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/ResponseCustomAction" + } + }, + "examples": { + "example_1": { + "value": [ + { + "action_details": { + "CALLBACK": { + "reference": "LEDE" + } + }, + "default_action_config": { + "visibility": true + }, + "id": "c59262df-cf9e-4947-96fa-52d494688797", + "name": "LEDE" + } + ] + } } } } @@ -4523,35 +4605,38 @@ } } }, - "/api/rest/2.0/metadata/liveboard/data": { + "/api/rest/2.0/customization/custom-actions/{custom_action_identifier}/update": { "post": { - "operationId": "fetchLiveboardData", - "description": "\n Version: 9.0.0.cl or later\n\nGets data from a Liveboard object and its visualization. \n\nRequires at least view access to the Liveboard.\n\n#### Usage guidelines\n\nIn the request body, specify the GUID or name of the Liveboard. To get data for specific visualizations, add the GUIDs or names of the visualizations in the API request.\n\nTo include unsaved changes in the report, pass the `transient_pinboard_content` script generated from the `getExportRequestForCurrentPinboard` method in the Visual Embed SDK. Upon successful execution, the API returns the report with unsaved changes. If the new Liveboard experience mode, the transient content includes ad hoc changes to visualizations such as sorting, toggling of legends, and data drill down.\n\nFor more information, and see [Liveboard data API](https://developers.thoughtspot.com/docs/fetch-data-and-report-apis#_fetch_liveboard_data_api).\n\n\n\n#### Endpoint URL\n", + "operationId": "updateCustomAction", + "description": "\n Version: 9.6.0.cl or later\n\nUpdates a custom action.\n\nRequires `DEVELOPER` (**Has Developer privilege**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `DEVELOPER` (**Has developer privilege**) privilege is required.\n\n#### Usage Guidelines\n\nThe API allows you to modify the following properties:\n\n* Name of the custom action\n* Action availability to groups\n* Association to metadata objects\n* Authentication settings for a URL-based action\n\nFor more information, see [Custom actions](https://developers.thoughtspot.com/docs/custom-action-intro).\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Data", - "9.0.0.cl" + "Custom Action", + "9.6.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FetchLiveboardDataRequest" + "$ref": "#/components/schemas/UpdateCustomActionRequest" } } }, "required": true }, - "parameters": [], + "parameters": [ + { + "in": "path", + "name": "custom_action_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique ID or name of the custom action." + } + ], "responses": { - "200": { - "description": "Fetching data of specified metadata object is successful.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LiveboardDataResponse" - } - } - } + "204": { + "description": "Custom action updated successfully." }, "400": { "description": "Invalid request.", @@ -4596,19 +4681,19 @@ } } }, - "/api/rest/2.0/searchdata": { + "/api/rest/2.0/calendars/create": { "post": { - "operationId": "searchData", - "description": "\n Version: 9.0.0.cl or later\n\nGenerates an Answer from a given data source.\n\nRequires at least view access to the data source object (Worksheet or View).\n\n#### Usage guidelines\n\nTo search data, specify the data source GUID in `logical_table_identifier`. The data source can be a Worksheet, View, Table, or SQL view.\n\nPass search tokens in the `query_string` attribute in the API request as shown in the following example:\n\n```\n{\n \"query_string\": \"[sales] by [store]\",\n \"logical_table_identifier\": \"cd252e5c-b552-49a8-821d-3eadaa049cca\",\n}\n```\n\nFor more information about the `query_string` format and data source attribute, see [Search data API](https://developers.thoughtspot.com/docs/fetch-data-and-report-apis#_search_data_api). \n\nThe `record_size` attribute determines the number of records to retrieve in an API call. For more information about pagination, record size, and maximum row limit, see [Pagination and record size settings](https://developers.thoughtspot.com/docs/fetch-data-and-report-apis#_pagination_settings_for_data_and_report_api). \n\n\n\n#### Endpoint URL\n", + "operationId": "createCalendar", + "description": "\n Version: 10.12.0.cl or later\n\nCreates a new [custom calendar](https://docs.thoughtspot.com/cloud/latest/connections-cust-cal).\n\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your ThoughtSpot instance, the `CAN_MANAGE_CUSTOM_CALENDAR` (**Can manage custom calendars**) privilege is required.\n\n\n#### Usage guidelines\n\nYou can create a custom calendar from scratch or an existing Table in ThoughtSpot. For both methods of calendar creation, the following parameters are required:\n\n* Name of the custom calendar.\n* Calendar creation method. To create a calendar from an existing table, specify the method:\n\n - `FROM_EXISTING_TABLE` - Creates calendar from the table reference provided in the API request.\n - `FROM_INPUT_PARAMS` - Creates a calendar from the parameters defined in the API request.\n\n* Connection ID and Table name\n* Database and schema name attributes:\n For most Cloud Data Warehouse (CDW) connectors, both `database_name` and `schema_name` attributes are required. \n However, the attribute requirements are conditional and vary based on the connector type and its metadata structure. For example, for connectors such as Teradata, MySQL, SingleSore, Amazon Aurora MySQL, Amazon RDS MySQL, Oracle, and GCP_MYSQL, the `schema_name` is required, whereas the `database_name` attribute is not.\n Similarly, connectors such as ClickHouse require you to specify the `database_name` and the schema specification in such cases is optional.\n\n**NOTE**: If you are creating a calendar from an existing table, ensure that the referenced table matches the required DDL for custom calendars. If the schema does not match, the API returns an error.\n\n##### Calendar type\nThe API allows you to create the following types of calendars:\n\n* `MONTH_OFFSET`. The default calendar type. A `MONTH_OFFSET` calendar is offset by a few months from the standard calendar months (January to December) and the year begins with the month defined in the request. For example, if the `month_offset` value is set as `April`, the calendar year begins in April.\n\n* `4-4-5`. Each quarter in the calendar will include two 4-week months followed by one 5-week month.\n* `4-5-4`. Each quarter in the calendar will include two 4-week months with a 5-week month between.\n* `5-4-4`. Each quarter begins with a 5-week month, followed by two 4-week months.\n\nTo start and end the calendar on a specific date, specify the dates in the `MM/DD/YYYY` format. For `MONTH_OFFSET` calendars, ensure that the `start_date` matches the month specified in the `month_offset` attribute.\n\nYou can also set the starting day of the week and customize the prefixes for year and quarter labels.\n\n#### Examples\n\nTo create a calendar from an existing table:\n\n```\n{\n \"name\": \"MyCustomCalendar1\",\n \"table_reference\": {\n \"connection_identifier\": \"4db8ea22-2ff4-4224-b05a-26674717e468\",\n \"table_name\": \"MyCalendarTable\",\n \"database_name\": \"RETAILAPPAREL\",\n \"schema_name\": \"PUBLIC\"\n },\n \"creation_method\": \"FROM_EXISTING_TABLE\",\n}\n```\n\nTo create a calendar from scratch:\n\n```\n{\n \"name\": \"MyCustomCalendar1\",\n \"table_reference\": {\n \"connection_identifier\": \"4db8ea22-2ff4-4224-b05a-26674717e468\",\n \"table_name\": \"MyCalendarTable\",\n \"database_name\": \"RETAILAPPAREL\",\n \"schema_name\": \"PUBLIC\"\n },\n \"creation_method\": \"FROM_INPUT_PARAMS\",\n \"calendar_type\": \"MONTH_OFFSET\",\n \"month_offset\": \"April\",\n \"start_day_of_week\": \"Monday\",\n \"quarter_name_prefix\": \"Q\",\n \"year_name_prefix\": \"FY\",\n \"start_date\": \"04/01/2025\",\n \"end_date\": \"04/31/2025\"\n}\n```\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Data", - "9.0.0.cl" + "Custom Calendars", + "10.12.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SearchDataRequest" + "$ref": "#/components/schemas/CreateCalendarRequest" } } }, @@ -4617,11 +4702,11 @@ "parameters": [], "responses": { "200": { - "description": "Fetching data of specified metadata object is successful.", + "description": "Custom calendar created successfully.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SearchDataResponse" + "$ref": "#/components/schemas/CalendarResponse" } } } @@ -4669,87 +4754,28 @@ } } }, - "/api/rest/2.0/dbt/dbt-connection": { + "/api/rest/2.0/calendars/{calendar_identifier}/delete": { "post": { - "operationId": "dbtConnection", - "description": "\n Version: 9.9.0.cl or later\n\nCreates a DBT connection object in ThoughtSpot.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege or `DATAMANAGEMENT` (**Can manage data**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the following Data control privileges may be required:\n\n- `CAN_MANAGE_CUSTOM_CALENDAR`(**Can manage custom calendars**)\n- `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**)\n- `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**)\n\n#### About create DBT connection\nDBT connection in ThoughtSpot is used by the user to define DBT credentials for cloud . The API needs embrace connection, embrace database name, DBT url, import type, DBT account identifier, DBT project identifier, DBT access token and environment details (or) embrace connection, embrace database name, import type, file_content to create a connection object. To know more about DBT, see ThoughtSpot Product Documentation.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "deleteCalendar", + "description": "\n Version: 10.12.0.cl or later\n\nDeletes a [custom calendar](https://docs.thoughtspot.com/cloud/latest/connections-cust-cal).\n\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your ThoughtSpot instance, the `CAN_MANAGE_CUSTOM_CALENDAR` (**Can manage custom calendars**) privilege is required.\n\n#### Usage guidelines\nTo delete a custom calendar, specify the calendar ID as a path parameter in the request URL. \n\n\n\n\n#### Endpoint URL\n", "tags": [ - "DBT", - "9.9.0.cl" + "Custom Calendars", + "10.12.0.cl" + ], + "parameters": [ + { + "in": "path", + "name": "calendar_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique ID or name of the Calendar." + } ], - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "type": "object", - "properties": { - "connection_name": { - "description": "Name of the connection.", - "type": "string" - }, - "database_name": { - "description": "Name of the Database.", - "type": "string" - }, - "import_type": { - "description": "Mention type of Import", - "default": "DBT_CLOUD", - "type": "string", - "enum": [ - "DBT_CLOUD", - "ZIP_FILE" - ] - }, - "access_token": { - "description": "Access token is mandatory when Import_Type is DBT_CLOUD.", - "type": "string" - }, - "dbt_url": { - "description": "DBT URL is mandatory when Import_Type is DBT_CLOUD.", - "type": "string" - }, - "account_id": { - "description": "Account ID is mandatory when Import_Type is DBT_CLOUD", - "type": "string" - }, - "project_id": { - "description": "Project ID is mandatory when Import_Type is DBT_CLOUD", - "type": "string" - }, - "dbt_env_id": { - "description": "DBT Environment ID\"", - "type": "string" - }, - "project_name": { - "description": "Name of the project", - "type": "string" - }, - "file_content": { - "description": "Upload DBT Manifest and Catalog artifact files as a ZIP file. This field is Mandatory when Import Type is 'ZIP_FILE'", - "type": "string", - "format": "binary" - } - }, - "required": [ - "connection_name", - "database_name" - ] - } - } - }, - "required": true - }, - "parameters": [], "responses": { - "200": { - "description": "Succesfully created DBT Connection.", - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - } + "204": { + "description": "Custom calendar successfully deleted." }, "400": { "description": "Invalid request.", @@ -4794,33 +4820,19 @@ } } }, - "/api/rest/2.0/dbt/generate-sync-tml": { + "/api/rest/2.0/calendars/generate-csv": { "post": { - "operationId": "dbtGenerateSyncTml", - "description": "\n Version: 9.9.0.cl or later\n\nResynchronize the existing list of models, tables, worksheet tml’s and import them to Thoughtspot based on the DBT connection object.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege or `DATAMANAGEMENT` (**Can manage data**) privilege, along with an existing DBT connection.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the following data control privileges may be required:\n\n- `CAN_MANAGE_CUSTOM_CALENDAR`(**Can manage custom calendars**)\n- `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**)\n- `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**)\n\n\n\n\n#### Endpoint URL\n", + "operationId": "generateCSV", + "description": "\n Version: 10.12.0.cl or later\n\nExports a [custom calendar](https://docs.thoughtspot.com/cloud/latest/connections-cust-cal) in the CSV format.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your ThoughtSpot instance, the `CAN_MANAGE_CUSTOM_CALENDAR` (**Can manage custom calendars**) privilege is required.\n\n#### Usage guidelines\n\nUse this API to download a custom calendar in the CSV file format. In your API request, specify the following parameters.\n\n* Start and end date of the calendar. For \"month offset\" calendars, the start date must match the month defined in the `month_offset` attribute.\n\nYou can also specify optional parameters such as the starting day of the week and prefixes for the quarter and year labels.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "DBT", - "9.9.0.cl" + "Custom Calendars", + "10.12.0.cl" ], "requestBody": { "content": { - "multipart/form-data": { + "application/json": { "schema": { - "type": "object", - "properties": { - "dbt_connection_identifier": { - "description": "Unique ID of the DBT connection.", - "type": "string" - }, - "file_content": { - "description": "Upload DBT Manifest and Catalog artifact files as a ZIP file. This field is mandatory if the connection was created with import_type ‘ZIP_FILE’", - "type": "string", - "format": "binary" - } - }, - "required": [ - "dbt_connection_identifier" - ] + "$ref": "#/components/schemas/GenerateCSVRequest" } } }, @@ -4829,7 +4841,7 @@ "parameters": [], "responses": { "200": { - "description": "Sync Table and Worksheet TML's are successfully generated.", + "description": "Generate custom calendar data based on specifications, as a CSV file.", "content": { "application/json": { "schema": { @@ -4881,54 +4893,19 @@ } } }, - "/api/rest/2.0/dbt/generate-tml": { + "/api/rest/2.0/calendars/search": { "post": { - "operationId": "dbtGenerateTml", - "description": "\n Version: 9.9.0.cl or later\n\nGenerate required table and worksheet and import them.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege or `DATAMANAGEMENT` (**Can manage data**) privilege, along with an existing DBT connection.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the following data control privileges may be required:\n\n- `CAN_MANAGE_CUSTOM_CALENDAR`(**Can manage custom calendars**)\n- `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**)\n- `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**)\n\n#### About generate TML\nModels and Worksheets to be imported can be selected by the user as part of the API.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "searchCalendars", + "description": "\n Version: 10.12.0.cl or later\n\nGets a list of [custom calendars](https://docs.thoughtspot.com/cloud/latest/connections-cust-cal).\n\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your ThoughtSpot instance, the `CAN_MANAGE_CUSTOM_CALENDAR` (**Can manage custom calendars**) privilege is required.\n\n#### Usage guidelines\n\nBy default, the API returns a list of custom calendars for all connection objects. To retrieve custom calendar details for a particular connection, specify the connection ID. You can also use other search parameters such as `name_pattern` and `sort_options` as search filters.\n\nThe `name_pattern` parameter filters and returns only those objects that match the specified pattern. Use `%` as a wildcard for pattern matching.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "DBT", - "9.9.0.cl" + "Custom Calendars", + "10.12.0.cl" ], "requestBody": { "content": { - "multipart/form-data": { + "application/json": { "schema": { - "type": "object", - "properties": { - "dbt_connection_identifier": { - "description": "Unique ID of the DBT connection.", - "type": "string" - }, - "model_tables": { - "description": "List of Models and their respective Tables\nExample: '[{\"model_name\": \"model_name\", \"tables\": [\"table_name\"]}]'", - "type": "string", - "format": "json" - }, - "import_worksheets": { - "description": "Mention the worksheet tmls to import", - "type": "string", - "enum": [ - "ALL", - "NONE", - "SELECTED" - ] - }, - "worksheets": { - "description": "List of worksheets is mandatory when import_Worksheets is type SELECTED\nExample: [\"worksheet_name\"]", - "type": "string", - "format": "json" - }, - "file_content": { - "description": "Upload DBT Manifest and Catalog artifact files as a ZIP file. This field is mandatory if the connection was created with import_type ‘ZIP_FILE’", - "type": "string", - "format": "binary" - } - }, - "required": [ - "dbt_connection_identifier", - "model_tables", - "import_worksheets" - ] + "$ref": "#/components/schemas/SearchCalendarsRequest" } } }, @@ -4937,11 +4914,14 @@ "parameters": [], "responses": { "200": { - "description": "Required Table and Worksheet TML's are successfully generated.", + "description": "Custom calendar fetched successfully.", "content": { "application/json": { "schema": { - "type": "object" + "type": "array", + "items": { + "$ref": "#/components/schemas/CalendarResponse" + } } } } @@ -4989,29 +4969,39 @@ } } }, - "/api/rest/2.0/dbt/search": { + "/api/rest/2.0/calendars/{calendar_identifier}/update": { "post": { - "operationId": "dbtSearch", - "description": "\n Version: 9.9.0.cl or later\n\nGets a list of DBT connection objects by user and organization, available on the ThoughtSpot system.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege or `DATAMANAGEMENT` (**Can manage data**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the following Data control privileges may be required:\n\n- `CAN_MANAGE_CUSTOM_CALENDAR`(**Can manage custom calendars**)\n- `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**)\n- `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**)\n\n#### About search DBT connection\nTo get details of a specific DBT connection identifier, database connection identifier, database connection name, database name, project name, project identifier, environment identifier , import type and author.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "updateCalendar", + "description": "\n Version: 10.12.0.cl or later\n\nUpdates the properties of a [custom calendar](https://docs.thoughtspot.com/cloud/latest/connections-cust-cal).\n\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your ThoughtSpot instance, the `CAN_MANAGE_CUSTOM_CALENDAR` (**Can manage custom calendars**) privilege is required.\n\n#### Usage guidelines\n\nYou can update the properties of a calendar using one of the following methods:\n* `FROM_INPUT_PARAMS` to update the calendar properties with the values defined in the API request.\n* `FROM_EXISTING_TABLE` Creates a calendar from the parameters defined in the API request.\n\nTo update a custom calendar, specify the calendar ID as a path parameter in the request URL and the following parameters in the request body: \n\n* Connection ID and Table name\n* Database and schema name attributes:\n For most Cloud Data Warehouse (CDW) connectors, both `database_name` and `schema_name` attributes are required. \n However, the attribute requirements are conditional and vary based on the connector type and its metadata structure. For example, for connectors such as Teradata, MySQL, SingleSore, Amazon Aurora MySQL, Amazon RDS MySQL, Oracle, and GCP_MYSQL, the `schema_name` is required, whereas the `database_name` attribute is not.\n Similarly, connectors such as ClickHouse require you to specify the `database_name` and the schema specification in such cases is optional.\n\nThe API allows you to modify the calendar type, month offset value, start and end date, starting day of the week, and prefixes assigned to the year and quarter labels. \n\n#### Examples\n\nUpdate a custom calendar using an existing Table in ThoughtSpot:\n\n```\n{\n \"update_method\": \"FROM_EXISTING_TABLE\",\n \"table_reference\": {\n \"connection_identifier\": \"Connection1\",\n \"database_name\": \"db1\",\n \"table_name\": \"custom_calendar_2025\",\n \"schame_name\": \"schemaVar\"\n }\n}\n```\n\nUpdate a custom calendar with the attributes defined in the API request:\n\n```\n{\n \"update_method\": \"FROM_INPUT_PARAMS\",\n \"table_reference\": {\n \"connection_identifier\": \"Connection1\",\n \"database_name\": \"db1\",\n \"table_name\": \"custom_calendar_2025\",\n \"schame_name\": \"schemaVar\"\n },\n \"month_offset\": \"August\",\n \"start_day_of_week\": \"Monday\",\n \"start_date\": \"08/01/2025\",\n \"end_date\": \"07/31/2026\"\n}\n```\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "DBT", - "9.9.0.cl" + "Custom Calendars", + "10.12.0.cl" ], - "parameters": [], - "responses": { - "200": { - "description": "Retrieved list of DBT connections successfully.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DbtSearchResponse" - } - } + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCalendarRequest" } } }, + "required": true + }, + "parameters": [ + { + "in": "path", + "name": "calendar_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique Id or name of the calendar." + } + ], + "responses": { + "204": { + "description": "Custom calendar updated successfully." + }, "400": { "description": "Invalid request.", "content": { @@ -5055,28 +5045,35 @@ } } }, - "/api/rest/2.0/dbt/{dbt_connection_identifier}/delete": { + "/api/rest/2.0/metadata/answer/data": { "post": { - "operationId": "deleteDbtConnection", - "description": "\n Version: 9.9.0.cl or later\n\nRemoves the specified DBT connection object from the ThoughtSpot system.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DATAMANAGEMENT` (**Can manage data ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the following Data control privileges may be required:\n\n- `CAN_MANAGE_CUSTOM_CALENDAR`(**Can manage custom calendars**)\n- `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**)\n- `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**)\n\n\n\n\n#### Endpoint URL\n", + "operationId": "fetchAnswerData", + "description": "\n Version: 9.0.0.cl or later\n\nFetches data from a saved Answer.\n\nRequires at least view access to the saved Answer.\n\nThe `record_size` attribute determines the number of records to retrieve in an API call. For more information about pagination, record size, and maximum row limit, see [Pagination and record size settings](https://developers.thoughtspot.com/docs/fetch-data-and-report-apis#_pagination_settings_for_data_and_report_apis).\n\n\n\n#### Endpoint URL\n", "tags": [ - "DBT", - "9.9.0.cl" - ], - "parameters": [ - { - "in": "path", - "name": "dbt_connection_identifier", - "required": true, - "schema": { - "type": "string" - }, - "description": "Unique ID of the DBT Connection." - } + "Data", + "9.0.0.cl" ], - "responses": { - "204": { - "description": "DBT Connection successfully deleted." + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FetchAnswerDataRequest" + } + } + }, + "required": true + }, + "parameters": [], + "responses": { + "200": { + "description": "Fetching data of specified metadata object is successful.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnswerDataResponse" + } + } + } }, "400": { "description": "Invalid request.", @@ -5121,74 +5118,19 @@ } } }, - "/api/rest/2.0/dbt/update-dbt-connection": { + "/api/rest/2.0/metadata/liveboard/data": { "post": { - "operationId": "updateDbtConnection", - "description": "\n Version: 9.9.0.cl or later\n\nUpdates a DBT connection object.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege or `DATAMANAGEMENT` (**Can manage data ThoughtSpot**) privilege, along with an existing DBT connection.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the following data control privileges may be required:\n\n- `CAN_MANAGE_CUSTOM_CALENDAR`(**Can manage custom calendars**)\n- `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**)\n- `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**)\n\n#### About update DBT connection\nYou can modify DBT connection object properties such as embrace connection name, embrace database name, import type, account identifier, access token, project identifier and environment (or) embrace connection, embrace database name, import type, file_content settings.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "fetchLiveboardData", + "description": "\n Version: 9.0.0.cl or later\n\nGets data from a Liveboard object and its visualization. \n\nRequires at least view access to the Liveboard.\n\n#### Usage guidelines\n\nIn the request body, specify the GUID or name of the Liveboard. To get data for specific visualizations, add the GUIDs or names of the visualizations in the API request.\n\nTo include unsaved changes in the report, pass the `transient_pinboard_content` script generated from the `getExportRequestForCurrentPinboard` method in the Visual Embed SDK. Upon successful execution, the API returns the report with unsaved changes. If the new Liveboard experience mode, the transient content includes ad hoc changes to visualizations such as sorting, toggling of legends, and data drill down.\n\nFor more information, and see [Liveboard data API](https://developers.thoughtspot.com/docs/fetch-data-and-report-apis#_fetch_liveboard_data_api).\n\n\n\n#### Endpoint URL\n", "tags": [ - "DBT", - "9.9.0.cl" + "Data", + "9.0.0.cl" ], "requestBody": { "content": { - "multipart/form-data": { + "application/json": { "schema": { - "type": "object", - "properties": { - "dbt_connection_identifier": { - "description": "Unique ID of the DBT Connection.", - "type": "string" - }, - "connection_name": { - "description": "Name of the connection.", - "type": "string" - }, - "database_name": { - "description": "Name of the Database.", - "type": "string" - }, - "import_type": { - "description": "Mention type of Import", - "default": "DBT_CLOUD", - "type": "string", - "enum": [ - "DBT_CLOUD", - "ZIP_FILE" - ] - }, - "access_token": { - "description": "Access token is mandatory when Import_Type is DBT_CLOUD.", - "type": "string" - }, - "dbt_url": { - "description": "DBT URL is mandatory when Import_Type is DBT_CLOUD.", - "type": "string" - }, - "account_id": { - "description": "Account ID is mandatory when Import_Type is DBT_CLOUD", - "type": "string" - }, - "project_id": { - "description": "Project ID is mandatory when Import_Type is DBT_CLOUD", - "type": "string" - }, - "dbt_env_id": { - "description": "DBT Environment ID\"", - "type": "string" - }, - "project_name": { - "description": "Name of the project", - "type": "string" - }, - "file_content": { - "description": "Upload DBT Manifest and Catalog artifact files as a ZIP file. This field is Mandatory when Import Type is 'ZIP_FILE'", - "type": "string", - "format": "binary" - } - }, - "required": [ - "dbt_connection_identifier" - ] + "$ref": "#/components/schemas/FetchLiveboardDataRequest" } } }, @@ -5197,11 +5139,11 @@ "parameters": [], "responses": { "200": { - "description": "DBT Connection successfully updated.", + "description": "Fetching data of specified metadata object is successful.", "content": { "application/json": { "schema": { - "type": "object" + "$ref": "#/components/schemas/LiveboardDataResponse" } } } @@ -5249,19 +5191,19 @@ } } }, - "/api/rest/2.0/customization/email": { + "/api/rest/2.0/searchdata": { "post": { - "operationId": "createEmailCustomization", - "description": "\nBeta Version: 10.10.0.cl or later\n\nCreates a customization configuration for the notification email.\n\n#### Pre-requisites\n\nRequires `DEVELOPER` (**has developer privilege**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `DEVELOPER` (**Has developer privilege**) privilege is required.\n\n**NOTE**:This endpoint in currently in beta. Contact ThoughtSpot support to enable this on your instance.\n\n#### Usage guidelines\n\nTo create a custom configuration pass these parameters in your API request:\n\n- A JSON map of configuration attributes `template_properties`. The following example shows a sample set of customization configuration:\n\n```\n{\n {\n \"cta_button_bg_color\": \"#444DEA\",\n \"cta_text_font_color\": \"#FFFFFF\",\n \"primary_bg_color\": \"#D3DEF0\",\n \"logo_url\": \"https://storage.pardot.com/710713/1642089901EbkRibJq/TS_fullworkmark_darkmode.png\",\n \t \"font_family\": \"\",\n \"product_name\": \"ThoughtSpot\",\n \"footer_address\": \"444 Castro St, Suite 1000 Mountain View, CA 94041\",\n\t \"footer_phone\": \"(800) 508-7008\",\n \"replacement_value_for_liveboard\": \"Dashboard\",\n \"replacement_value_for_answer\": \"Chart\",\n \"replacement_value_for_spot_iq\": \"AI Insights\",\n \t \"hide_footer_phone\": false,\n \"hide_footer_address\": false,\n \"hide_product_name\": false,\n \"hide_manage_notification\": false,\n \"hide_mobile_app_nudge\": false,\n \"hide_privacy_policy\": false,\n \"hide_ts_vocabulary_definitions\": false,\n \"hide_error_message\": false,\n \"hide_unsubscribe_link\": false,\n \"hide_notification_status\": false,\n \"hide_modify_alert\": false,\n \"company_website_url\": \"https://your-website.com/\",\n \"company_privacy_policy_url\" : \"https://link-to-privacy-policy.com/\",\n \"contact_support_url\": \"https://link-to-contact-support.com/\",\n \"hide_contact_support_url\": false,\n\t \"hide_logo_url\" : false\n }\n}\n```\n\n\n\n\n#### Endpoint URL\n", + "operationId": "searchData", + "description": "\n Version: 9.0.0.cl or later\n\nGenerates an Answer from a given data source.\n\nRequires at least view access to the data source object (Worksheet or View).\n\n#### Usage guidelines\n\nTo search data, specify the data source GUID in `logical_table_identifier`. The data source can be a Worksheet, View, Table, or SQL view.\n\nPass search tokens in the `query_string` attribute in the API request as shown in the following example:\n\n```\n{\n \"query_string\": \"[sales] by [store]\",\n \"logical_table_identifier\": \"cd252e5c-b552-49a8-821d-3eadaa049cca\",\n}\n```\n\nFor more information about the `query_string` format and data source attribute, see [Search data API](https://developers.thoughtspot.com/docs/fetch-data-and-report-apis#_search_data_api). \n\nThe `record_size` attribute determines the number of records to retrieve in an API call. For more information about pagination, record size, and maximum row limit, see [Pagination and record size settings](https://developers.thoughtspot.com/docs/fetch-data-and-report-apis#_pagination_settings_for_data_and_report_api). \n\n\n\n#### Endpoint URL\n", "tags": [ - "Email Customization", - "10.10.0.cl" + "Data", + "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateEmailCustomizationRequest" + "$ref": "#/components/schemas/SearchDataRequest" } } }, @@ -5270,11 +5212,11 @@ "parameters": [], "responses": { "200": { - "description": "OK", + "description": "Fetching data of specified metadata object is successful.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateEmailCustomizationResponse" + "$ref": "#/components/schemas/SearchDataResponse" } } } @@ -5289,7 +5231,7 @@ } } }, - "403": { + "401": { "description": "Unauthorized access.", "content": { "application/json": { @@ -5299,55 +5241,8 @@ } } }, - "500": { - "description": "Unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/api/rest/2.0/customization/email/{template_identifier}/delete": { - "post": { - "operationId": "deleteEmailCustomization", - "description": "\nBeta Version: 10.10.0.cl or later\n\nDeletes the configuration for the email customization.\n\n#### Pre-requisites\n\nRequires `DEVELOPER` (**has developer privilege**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `DEVELOPER` (**Has developer privilege**) privilege is required.\n\n**NOTE**:This endpoint in currently in beta. Contact ThoughtSpot support to enable this on your instance.\n\n#### Usage guidelines\n\n- Call the search API endpoint to get the `template_identifier` from the response.\n- Use that `template_identifier` as a parameter in this API request.\n\n\n\n\n#### Endpoint URL\n", - "deprecated": true, - "tags": [ - "Email Customization", - "10.10.0.cl" - ], - "parameters": [ - { - "in": "path", - "name": "template_identifier", - "required": true, - "schema": { - "type": "string" - }, - "description": "Unique ID or name of the email customization." - } - ], - "responses": { - "204": { - "description": "Email Customization configuration successfully deleted." - }, - "400": { - "description": "Invalid request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "403": { - "description": "Unauthorized access.", + "description": "Forbidden access.", "content": { "application/json": { "schema": { @@ -5369,19 +5264,71 @@ } } }, - "/api/rest/2.0/customization/email/delete": { + "/api/rest/2.0/dbt/dbt-connection": { "post": { - "operationId": "deleteOrgEmailCustomization", - "description": "\nBeta Version: 10.12.0.cl or later\n\nDeletes the configuration for the email customization.\n\n#### Pre-requisites\n\nRequires `DEVELOPER` (**has developer privilege**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `DEVELOPER` (**Has developer privilege**) privilege is required.\n\n**NOTE**:This endpoint in currently in beta. Contact ThoughtSpot support to enable this on your instance.\n\n#### Usage guidelines\n\n- Call the search API endpoint to get the `org_identifier` from the response.\n- Use that `org_identifier` as a parameter in this API request.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "dbtConnection", + "description": "\n Version: 9.9.0.cl or later\n\nCreates a DBT connection object in ThoughtSpot.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege or `DATAMANAGEMENT` (**Can manage data**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the following Data control privileges may be required:\n\n- `CAN_MANAGE_CUSTOM_CALENDAR`(**Can manage custom calendars**)\n- `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**)\n- `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**)\n\n#### About create DBT connection\nDBT connection in ThoughtSpot is used by the user to define DBT credentials for cloud . The API needs embrace connection, embrace database name, DBT url, import type, DBT account identifier, DBT project identifier, DBT access token and environment details (or) embrace connection, embrace database name, import type, file_content to create a connection object. To know more about DBT, see ThoughtSpot Product Documentation.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Email Customization", - "10.12.0.cl" + "DBT", + "9.9.0.cl" ], "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/DeleteOrgEmailCustomizationRequest" + "type": "object", + "properties": { + "connection_name": { + "description": "Name of the connection.", + "type": "string" + }, + "database_name": { + "description": "Name of the Database.", + "type": "string" + }, + "import_type": { + "description": "Mention type of Import", + "default": "DBT_CLOUD", + "type": "string", + "enum": [ + "DBT_CLOUD", + "ZIP_FILE" + ] + }, + "access_token": { + "description": "Access token is mandatory when Import_Type is DBT_CLOUD.", + "type": "string" + }, + "dbt_url": { + "description": "DBT URL is mandatory when Import_Type is DBT_CLOUD.", + "type": "string" + }, + "account_id": { + "description": "Account ID is mandatory when Import_Type is DBT_CLOUD", + "type": "string" + }, + "project_id": { + "description": "Project ID is mandatory when Import_Type is DBT_CLOUD", + "type": "string" + }, + "dbt_env_id": { + "description": "DBT Environment ID\"", + "type": "string" + }, + "project_name": { + "description": "Name of the project", + "type": "string" + }, + "file_content": { + "description": "Upload DBT Manifest and Catalog artifact files as a ZIP file. This field is Mandatory when Import Type is 'ZIP_FILE'", + "type": "string", + "format": "binary" + } + }, + "required": [ + "connection_name", + "database_name" + ] } } }, @@ -5389,8 +5336,15 @@ }, "parameters": [], "responses": { - "204": { - "description": "Email Customization configuration successfully deleted." + "200": { + "description": "Succesfully created DBT Connection.", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } }, "400": { "description": "Invalid request.", @@ -5413,7 +5367,7 @@ } }, "403": { - "description": "Unauthorized access.", + "description": "Forbidden access.", "content": { "application/json": { "schema": { @@ -5435,20 +5389,39 @@ } } }, - "/api/rest/2.0/customization/email/search": { + "/api/rest/2.0/dbt/generate-sync-tml": { "post": { - "operationId": "searchEmailCustomization", - "description": "\nBeta Version: 10.10.0.cl or later\n\nSearch the email customization configuration if any set for the ThoughtSpot system.\n\n#### Pre-requisites\n\nRequires `DEVELOPER` (**has developer privilege**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `DEVELOPER` (**Has developer privilege**) privilege is required.\n\n**NOTE**:This endpoint in currently in beta. Contact ThoughtSpot support to enable this on your instance.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "dbtGenerateSyncTml", + "description": "\n Version: 9.9.0.cl or later\n\nResynchronize the existing list of models, tables, worksheet tml’s and import them to Thoughtspot based on the DBT connection object.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege or `DATAMANAGEMENT` (**Can manage data**) privilege, along with an existing DBT connection.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the following data control privileges may be required:\n\n- `CAN_MANAGE_CUSTOM_CALENDAR`(**Can manage custom calendars**)\n- `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**)\n- `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**)\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Email Customization", - "10.10.0.cl" + "DBT", + "9.9.0.cl" ], "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/SearchEmailCustomizationRequest" - } + "type": "object", + "properties": { + "dbt_connection_identifier": { + "description": "Unique ID of the DBT connection.", + "type": "string" + }, + "file_content": { + "description": "Upload DBT Manifest and Catalog artifact files as a ZIP file. This field is mandatory if the connection was created with import_type ‘ZIP_FILE’", + "type": "string", + "format": "binary" + }, + "include_semantic_report": { + "description": "If true, includes a `semantic_report` per model showing which components were imported or skipped. Each component includes its name, type (such as dimension, measure, or metric), import status, SQL expression, and the corresponding generated ThoughtSpot formula. Note: supported only for Snowflake and Databricks connections.", + "type": "boolean", + "nullable": true + } + }, + "required": [ + "dbt_connection_identifier" + ] + } } }, "required": true @@ -5456,14 +5429,11 @@ "parameters": [], "responses": { "200": { - "description": "OK", + "description": "Sync Table and Worksheet TML's are successfully generated.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CreateEmailCustomizationResponse" - } + "type": "object" } } } @@ -5478,7 +5448,7 @@ } } }, - "403": { + "401": { "description": "Unauthorized access.", "content": { "application/json": { @@ -5488,6 +5458,16 @@ } } }, + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "500": { "description": "Unexpected error", "content": { @@ -5501,19 +5481,59 @@ } } }, - "/api/rest/2.0/customization/email/update": { + "/api/rest/2.0/dbt/generate-tml": { "post": { - "operationId": "updateEmailCustomization", - "description": "\nBeta Version: 10.12.0.cl or later\n\nUpdates a customization configuration for the notification email.\n\n#### Pre-requisites\n\nRequires `DEVELOPER` (**has developer privilege**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `DEVELOPER` (**Has developer privilege**) privilege is required.\n\n**NOTE**:This endpoint in currently in beta. Contact ThoughtSpot support to enable this on your instance.\n\n#### Usage guidelines\n\nTo update a custom configuration pass these parameters in your API request:\n\n- A JSON map of configuration attributes `template_properties`. The following example shows a sample set of customization configuration:\n\n```\n{\n {\n \"cta_button_bg_color\": \"#444DEA\",\n \t\"cta_text_font_color\": \"#FFFFFF\",\n \t\"primary_bg_color\": \"#D3DEF0\",\n \"logo_url\": \"https://storage.pardot.com/710713/1642089901EbkRibJq/TS_fullworkmark_darkmode.png\",\n \t \"font_family\": \"\",\n \t\"product_name\": \"ThoughtSpot\",\n \t\"footer_address\": \"444 Castro St, Suite 1000 Mountain View, CA 94041\",\n\t \"footer_phone\": \"(800) 508-7008\",\n \"replacement_value_for_liveboard\": \"Dashboard\",\n \t\"replacement_value_for_answer\": \"Chart\",\n \t\"replacement_value_for_spot_iq\": \"AI Insights\",\n \t \"hide_footer_phone\": false,\n \"hide_footer_address\": false,\n \"hide_product_name\": false,\n \t\"hide_manage_notification\": false,\n \t\"hide_mobile_app_nudge\": false,\n \t\"hide_privacy_policy\": false,\n \t\"hide_ts_vocabulary_definitions\": false,\n \t\"hide_error_message\": false,\n \t\"hide_unsubscribe_link\": false,\n \"hide_notification_status\": false,\n \t\"hide_modify_alert\": false,\n \t\"company_website_url\": \"https://your-website.com/\",\n \t\"company_privacy_policy_url\" : \"https://link-to-privacy-policy.com/\",\n \"contact_support_url\": \"https://link-to-contact-support.com/\",\n \"hide_contact_support_url\": false,\n\t \"hide_logo_url\" : false\n }\n}\n```\n\n\n\n\n#### Endpoint URL\n", + "operationId": "dbtGenerateTml", + "description": "\n Version: 9.9.0.cl or later\n\nGenerate required table and worksheet and import them.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege or `DATAMANAGEMENT` (**Can manage data**) privilege, along with an existing DBT connection.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the following data control privileges may be required:\n\n- `CAN_MANAGE_CUSTOM_CALENDAR`(**Can manage custom calendars**)\n- `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**)\n- `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**)\n\n#### About generate TML\nModels and Worksheets to be imported can be selected by the user as part of the API.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Email Customization", - "10.12.0.cl" + "DBT", + "9.9.0.cl" ], "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/UpdateEmailCustomizationRequest" + "type": "object", + "properties": { + "dbt_connection_identifier": { + "description": "Unique ID of the DBT connection.", + "type": "string" + }, + "model_tables": { + "description": "List of Models and their respective Tables\nExample: '[{\"model_name\": \"model_name\", \"model_path\": \"model_path\", \"tables\": [\"table_name\"]}]'", + "type": "string", + "format": "json" + }, + "import_worksheets": { + "description": "Mention the worksheet tmls to import", + "type": "string", + "enum": [ + "ALL", + "NONE", + "SELECTED" + ] + }, + "worksheets": { + "description": "List of worksheets is mandatory when import_Worksheets is type SELECTED\nExample: [\"worksheet_name\"]", + "type": "string", + "format": "json" + }, + "file_content": { + "description": "Upload DBT Manifest and Catalog artifact files as a ZIP file. This field is mandatory if the connection was created with import_type ‘ZIP_FILE’", + "type": "string", + "format": "binary" + }, + "include_semantic_report": { + "description": "If true, includes a `semantic_report` per model showing which components were imported or skipped. Each component includes its name, type (such as dimension, measure, or metric), import status, SQL expression, and the corresponding generated ThoughtSpot formula. Note: supported only for Snowflake and Databricks connections.", + "type": "boolean", + "nullable": true + } + }, + "required": [ + "dbt_connection_identifier", + "model_tables", + "import_worksheets" + ] } } }, @@ -5521,21 +5541,18 @@ }, "parameters": [], "responses": { - "204": { - "description": "Email Customization configuration successfully updated." - }, - "400": { - "description": "Invalid request.", + "200": { + "description": "Required Table and Worksheet TML's are successfully generated.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "object" } } } }, - "401": { - "description": "Unauthorized access.", + "400": { + "description": "Invalid request.", "content": { "application/json": { "schema": { @@ -5544,7 +5561,7 @@ } } }, - "403": { + "401": { "description": "Unauthorized access.", "content": { "application/json": { @@ -5554,44 +5571,8 @@ } } }, - "500": { - "description": "Unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/api/rest/2.0/customization/email/validate": { - "post": { - "operationId": "validateEmailCustomization", - "description": "\nBeta Version: 10.10.0.cl or later\n\nValidates the email customization configuration if any set for the ThoughtSpot system.\n\n#### Pre-requisites\n\nRequires `DEVELOPER` (**has developer privilege**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `DEVELOPER` (**Has developer privilege**) privilege is required.\n\n**NOTE**:This endpoint in currently in beta. Contact ThoughtSpot support to enable this on your instance.\n\n\n\n\n#### Endpoint URL\n", - "tags": [ - "Email Customization", - "10.10.0.cl" - ], - "parameters": [], - "responses": { - "204": { - "description": "Triggered test email for customization configuration" - }, - "400": { - "description": "Invalid request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "403": { - "description": "Unauthorized access.", + "description": "Forbidden access.", "content": { "application/json": { "schema": { @@ -5613,32 +5594,25 @@ } } }, - "/api/rest/2.0/groups/create": { + "/api/rest/2.0/dbt/search": { "post": { - "operationId": "createUserGroup", - "description": "\n Version: 9.0.0.cl or later\n\nCreates a group object in ThoughtSpot.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `GROUP_ADMINISTRATION` (**Can manage groups**) privilege is required.\n\n#### About groups\nGroups in ThoughtSpot are used by the administrators to define privileges and organize users based on their roles and access requirements. To know more about groups and privileges, see [ThoughtSpot Product Documentation](https://docs.thoughtspot.com/cloud/latest/groups-privileges).\n\n#### Supported operations\n\nThe API endpoint lets you perform the following operations:\n\n* Assign privileges\n* Add users\n* Define sharing visibility\n* Add sub-groups\n* Assign a default Liveboard\n\n\n\n\n#### Endpoint URL\n", + "operationId": "dbtSearch", + "description": "\n Version: 9.9.0.cl or later\n\nGets a list of DBT connection objects by user and organization, available on the ThoughtSpot system.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege or `DATAMANAGEMENT` (**Can manage data**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the following Data control privileges may be required:\n\n- `CAN_MANAGE_CUSTOM_CALENDAR`(**Can manage custom calendars**)\n- `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**)\n- `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**)\n\n#### About search DBT connection\nTo get details of a specific DBT connection identifier, database connection identifier, database connection name, database name, project name, project identifier, environment identifier , import type and author.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Groups", - "9.0.0.cl" + "DBT", + "9.9.0.cl" ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateUserGroupRequest" - } - } - }, - "required": true - }, "parameters": [], "responses": { "200": { - "description": "User group successfully created.", + "description": "Retrieved list of DBT connections successfully.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserGroupResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/DbtSearchResponse" + } } } } @@ -5686,28 +5660,28 @@ } } }, - "/api/rest/2.0/groups/{group_identifier}/delete": { + "/api/rest/2.0/dbt/{dbt_connection_identifier}/delete": { "post": { - "operationId": "deleteUserGroup", - "description": "\n Version: 9.0.0.cl or later\n\nRemoves the specified group object from the ThoughtSpot system.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `GROUP_ADMINISTRATION` (**Can manage groups**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "deleteDbtConnection", + "description": "\n Version: 9.9.0.cl or later\n\nRemoves the specified DBT connection object from the ThoughtSpot system.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DATAMANAGEMENT` (**Can manage data ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the following Data control privileges may be required:\n\n- `CAN_MANAGE_CUSTOM_CALENDAR`(**Can manage custom calendars**)\n- `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**)\n- `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**)\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Groups", - "9.0.0.cl" + "DBT", + "9.9.0.cl" ], "parameters": [ { "in": "path", - "name": "group_identifier", + "name": "dbt_connection_identifier", "required": true, "schema": { "type": "string" }, - "description": "GUID or name of the group." + "description": "Unique ID of the DBT Connection." } ], "responses": { "204": { - "description": "User group successfully deleted." + "description": "DBT Connection successfully deleted." }, "400": { "description": "Invalid request.", @@ -5752,19 +5726,74 @@ } } }, - "/api/rest/2.0/groups/import": { + "/api/rest/2.0/dbt/update-dbt-connection": { "post": { - "operationId": "importUserGroups", - "description": "\n Version: 9.0.0.cl or later\n\nImports group objects from external databases into ThoughtSpot.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `GROUP_ADMINISTRATION` (**Can manage groups**) privilege is required.\n\nDuring the import operation:\n\n* If the specified group is not available in ThoughtSpot, it will be added to ThoughtSpot.\n* If `delete_unspecified_groups` is set to `true`, the groups not specified in the API request, excluding administrator and system user groups, are deleted.\n* If the specified groups are already available in ThoughtSpot, the object properties of these groups are modified and synchronized as per the input data in the API request.\n\nA successful API call returns the object that represents the changes made in the ThoughtSpot system.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "updateDbtConnection", + "description": "\n Version: 9.9.0.cl or later\n\nUpdates a DBT connection object.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege or `DATAMANAGEMENT` (**Can manage data ThoughtSpot**) privilege, along with an existing DBT connection.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the following data control privileges may be required:\n\n- `CAN_MANAGE_CUSTOM_CALENDAR`(**Can manage custom calendars**)\n- `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**)\n- `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**)\n\n#### About update DBT connection\nYou can modify DBT connection object properties such as embrace connection name, embrace database name, import type, account identifier, access token, project identifier and environment (or) embrace connection, embrace database name, import type, file_content settings.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Groups", - "9.0.0.cl" + "DBT", + "9.9.0.cl" ], "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/ImportUserGroupsRequest" + "type": "object", + "properties": { + "dbt_connection_identifier": { + "description": "Unique ID of the DBT Connection.", + "type": "string" + }, + "connection_name": { + "description": "Name of the connection.", + "type": "string" + }, + "database_name": { + "description": "Name of the Database.", + "type": "string" + }, + "import_type": { + "description": "Mention type of Import", + "default": "DBT_CLOUD", + "type": "string", + "enum": [ + "DBT_CLOUD", + "ZIP_FILE" + ] + }, + "access_token": { + "description": "Access token is mandatory when Import_Type is DBT_CLOUD.", + "type": "string" + }, + "dbt_url": { + "description": "DBT URL is mandatory when Import_Type is DBT_CLOUD.", + "type": "string" + }, + "account_id": { + "description": "Account ID is mandatory when Import_Type is DBT_CLOUD", + "type": "string" + }, + "project_id": { + "description": "Project ID is mandatory when Import_Type is DBT_CLOUD", + "type": "string" + }, + "dbt_env_id": { + "description": "DBT Environment ID\"", + "type": "string" + }, + "project_name": { + "description": "Name of the project", + "type": "string" + }, + "file_content": { + "description": "Upload DBT Manifest and Catalog artifact files as a ZIP file. This field is Mandatory when Import Type is 'ZIP_FILE'", + "type": "string", + "format": "binary" + } + }, + "required": [ + "dbt_connection_identifier" + ] } } }, @@ -5773,11 +5802,11 @@ "parameters": [], "responses": { "200": { - "description": "Import user groups operation successful.", + "description": "DBT Connection successfully updated.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ImportUserGroupsResponse" + "type": "object" } } } @@ -5825,19 +5854,19 @@ } } }, - "/api/rest/2.0/groups/search": { + "/api/rest/2.0/customization/email": { "post": { - "operationId": "searchUserGroups", - "description": "\n Version: 9.0.0.cl or later\n\nGets a list of user group objects from the ThoughtSpot system.\n\nTo get details of a specific user group, specify the user group GUID or name. You can also filter the API response based on User ID, Org ID, Role ID, type of group, sharing visibility, privileges assigned to the group, and the Liveboard IDs assigned to the users in the group.\n\nAvailable to all users. Users with `ADMINISTRATION` (**Can administer ThoughtSpot**) privileges can view all users properties.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `GROUP_ADMINISTRATION` (**Can manage groups**) privilege is required.\n\n**NOTE**: If you do not get precise results, try setting `record_size` to `-1` and `record_offset` to `0`.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "createEmailCustomization", + "description": "\nBeta Version: 10.10.0.cl or later\n\nCreates a customization configuration for the notification email.\n\n#### Pre-requisites\n\nRequires `DEVELOPER` (**has developer privilege**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `DEVELOPER` (**Has developer privilege**) privilege is required.\n\n**NOTE**:This endpoint in currently in beta. Contact ThoughtSpot support to enable this on your instance.\n\n#### Usage guidelines\n\nTo create a custom configuration pass these parameters in your API request:\n\n- A JSON map of configuration attributes `template_properties`. The following example shows a sample set of customization configuration:\n\n```\n{\n {\n \"cta_button_bg_color\": \"#444DEA\",\n \"cta_text_font_color\": \"#FFFFFF\",\n \"primary_bg_color\": \"#D3DEF0\",\n \"logo_url\": \"https://storage.pardot.com/710713/1642089901EbkRibJq/TS_fullworkmark_darkmode.png\",\n \t \"font_family\": \"\",\n \"product_name\": \"ThoughtSpot\",\n \"footer_address\": \"444 Castro St, Suite 1000 Mountain View, CA 94041\",\n\t \"footer_phone\": \"(800) 508-7008\",\n \"replacement_value_for_liveboard\": \"Dashboard\",\n \"replacement_value_for_answer\": \"Chart\",\n \"replacement_value_for_spot_iq\": \"AI Insights\",\n \t \"hide_footer_phone\": false,\n \"hide_footer_address\": false,\n \"hide_product_name\": false,\n \"hide_manage_notification\": false,\n \"hide_mobile_app_nudge\": false,\n \"hide_privacy_policy\": false,\n \"hide_ts_vocabulary_definitions\": false,\n \"hide_error_message\": false,\n \"hide_unsubscribe_link\": false,\n \"hide_notification_status\": false,\n \"hide_modify_alert\": false,\n \"company_website_url\": \"https://your-website.com/\",\n \"company_privacy_policy_url\" : \"https://link-to-privacy-policy.com/\",\n \"contact_support_url\": \"https://link-to-contact-support.com/\",\n \"hide_contact_support_url\": false,\n\t \"hide_logo_url\" : false\n }\n}\n```\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Groups", - "9.0.0.cl" + "Email Customization", + "10.10.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SearchUserGroupsRequest" + "$ref": "#/components/schemas/CreateEmailCustomizationRequest" } } }, @@ -5846,14 +5875,11 @@ "parameters": [], "responses": { "200": { - "description": "User group search result.", + "description": "OK", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/UserGroupResponse" - } + "$ref": "#/components/schemas/CreateEmailCustomizationResponse" } } } @@ -5868,18 +5894,8 @@ } } }, - "401": { - "description": "Unauthorized access.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "403": { - "description": "Forbidden access.", + "description": "Unauthorized access.", "content": { "application/json": { "schema": { @@ -5901,38 +5917,29 @@ } } }, - "/api/rest/2.0/groups/{group_identifier}/update": { + "/api/rest/2.0/customization/email/{template_identifier}/delete": { "post": { - "operationId": "updateUserGroup", - "description": "\n Version: 9.0.0.cl or later\n\nUpdates the properties of a group object in ThoughtSpot.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `GROUP_ADMINISTRATION` (**Can manage groups**) privilege is required.\n\n#### Supported operations\n\nThis API endpoint lets you perform the following operations in a single API request:\n\n* Edit [privileges](https://developers.thoughtspot.com/docs/?pageid=api-user-management#group-privileges)\n* Add or remove users\n* Change sharing visibility settings\n* Add or remove sub-groups\n* Assign a default Liveboard or update the existing settings\n\n\n\n\n#### Endpoint URL\n", + "operationId": "deleteEmailCustomization", + "description": "\nBeta Version: 10.10.0.cl or later\n\nDeletes the configuration for the email customization.\n\n#### Pre-requisites\n\nRequires `DEVELOPER` (**has developer privilege**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `DEVELOPER` (**Has developer privilege**) privilege is required.\n\n**NOTE**:This endpoint in currently in beta. Contact ThoughtSpot support to enable this on your instance.\n\n#### Usage guidelines\n\n- Call the search API endpoint to get the `template_identifier` from the response.\n- Use that `template_identifier` as a parameter in this API request.\n\n\n\n\n#### Endpoint URL\n", + "deprecated": true, "tags": [ - "Groups", - "9.0.0.cl" + "Email Customization", + "10.10.0.cl" ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateUserGroupRequest" - } - } - }, - "required": true - }, "parameters": [ { "in": "path", - "name": "group_identifier", + "name": "template_identifier", "required": true, "schema": { "type": "string" }, - "description": "GUID or name of the group." + "description": "Unique ID or name of the email customization." } ], "responses": { "204": { - "description": "User group successfully updated." + "description": "Email Customization configuration successfully deleted." }, "400": { "description": "Invalid request.", @@ -5944,18 +5951,8 @@ } } }, - "401": { - "description": "Unauthorized access.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "403": { - "description": "Forbidden access.", + "description": "Unauthorized access.", "content": { "application/json": { "schema": { @@ -5977,19 +5974,19 @@ } } }, - "/api/rest/2.0/jobs/history/communication-channels/search": { + "/api/rest/2.0/customization/email/delete": { "post": { - "operationId": "searchChannelHistory", - "description": "\n Version: 26.4.0.cl or later\n\nSearches delivery history for communication channels such as webhooks. Returns channel-level delivery status for each job execution record. Use this to monitor channel health and delivery success rates across events.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, users with `CAN_MANAGE_WEBHOOKS` (**Can manage webhooks**) privilege are also authorized to perform this action.\n\n**NOTE**: When `channel_type` is `WEBHOOK`, the following constraints apply:\n\n- `job_ids`, `channel_identifiers`, and `events` each accept at most one element.\n- When `job_ids` is provided, it is used as the sole lookup key and other filter fields are ignored.\n- When `job_ids` is not provided, `channel_identifiers` and `events` are both required, each containing exactly one element.\n- Records older than the configured retention period are not returned.\n- Use `start_epoch_time_in_millis` and/or `end_epoch_time_in_millis` to narrow results to a specific time window.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "deleteOrgEmailCustomization", + "description": "\nBeta Version: 10.12.0.cl or later\n\nDeletes the configuration for the email customization.\n\n#### Pre-requisites\n\nRequires `DEVELOPER` (**has developer privilege**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `DEVELOPER` (**Has developer privilege**) privilege is required.\n\n**NOTE**:This endpoint in currently in beta. Contact ThoughtSpot support to enable this on your instance.\n\n#### Usage guidelines\n\n- Call the search API endpoint to get the `org_identifier` from the response.\n- Use that `org_identifier` as a parameter in this API request.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Jobs", - "26.4.0.cl" + "Email Customization", + "10.12.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SearchChannelHistoryRequest" + "$ref": "#/components/schemas/DeleteOrgEmailCustomizationRequest" } } }, @@ -5997,94 +5994,8 @@ }, "parameters": [], "responses": { - "200": { - "description": "Channel status logs retrieved successfully.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SearchChannelHistoryResponse" - }, - "examples": { - "example_1": { - "description": "Search webhook channel history by channel identifier and event", - "value": { - "jobs": [ - { - "id": "n.6170538a-a4d4-4712-91bf-39b353db2b72", - "status": "SUCCESS", - "creation_time_in_millis": 1771599720674, - "event": { - "type": "LIVEBOARD_SCHEDULE", - "id": "2bb2ff83-b8d9-4d2b-8913-b2589bb6831b", - "name": "schedule-identifier", - "run_id": "90c4f1b0-08c9-4a6c-8e61-49cffd9f1550" - }, - "recipients": [ - { - "type": "USER", - "id": "d211f619-8b72-45d3-92a7-69dde41159c7", - "name": "admin-user", - "email": "admin@example.com" - } - ], - "detail": "", - "try_count": 1 - }, - { - "id": "n.5c5bbedb-c425-48c0-8b54-a17267b08e7c", - "status": "SUCCESS", - "creation_time_in_millis": 1771599600508, - "event": { - "type": "LIVEBOARD_SCHEDULE", - "id": "2bb2ff83-b8d9-4d2b-8913-b2589bb6831b", - "name": "schedule-identifier", - "run_id": "b9834966-fe85-4fa9-8a10-9889c01d4826" - }, - "recipients": [ - { - "type": "USER", - "id": "d211f619-8b72-45d3-92a7-69dde41159c7", - "name": "admin-user", - "email": "admin@example.com" - } - ], - "detail": "", - "try_count": 1 - } - ] - } - }, - "example_2": { - "description": "Search webhook channel history by job ID", - "value": { - "jobs": [ - { - "id": "n.5c5bbedb-c425-48c0-8b54-a17267b08e7c", - "status": "SUCCESS", - "creation_time_in_millis": 1771599600508, - "event": { - "type": "LIVEBOARD_SCHEDULE", - "id": "2bb2ff83-b8d9-4d2b-8913-b2589bb6831b", - "name": "schedule-identifier", - "run_id": "b9834966-fe85-4fa9-8a10-9889c01d4826" - }, - "recipients": [ - { - "type": "USER", - "id": "d211f619-8b72-45d3-92a7-69dde41159c7", - "name": "admin-user", - "email": "admin@example.com" - } - ], - "detail": "", - "try_count": 1 - } - ] - } - } - } - } - } + "204": { + "description": "Email Customization configuration successfully deleted." }, "400": { "description": "Invalid request.", @@ -6107,7 +6018,7 @@ } }, "403": { - "description": "Forbidden access.", + "description": "Unauthorized access.", "content": { "application/json": { "schema": { @@ -6129,19 +6040,19 @@ } } }, - "/api/rest/2.0/logs/fetch": { + "/api/rest/2.0/customization/email/search": { "post": { - "operationId": "fetchLogs", - "description": "\n Version: 9.0.0.cl or later\n\nFetches security audit logs. \n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the [Admin Control](https://developers.thoughtspot.com/docs/rbac#_admin_control) privileges are required.\n\n\n#### Usage guidelines\n\nBy default, the API retrieves logs for the last 24 hours. You can set a custom duration in EPOCH time. Make sure the log duration specified in your API request doesn’t exceed 24 hours. If you must fetch logs for a longer time range, modify the duration and make multiple sequential API requests.\n\nUpon successful execution, the API returns logs with the following information:\n* timestamp of the event\n* event ID\n* event type\n* name and GUID of the user\n* IP address of ThoughtSpot instance\n\nFor more information see [Audit logs Documentation](https://developers.thoughtspot.com/docs/audit-logs).\n\n\n\n\n#### Endpoint URL\n", + "operationId": "searchEmailCustomization", + "description": "\nBeta Version: 10.10.0.cl or later\n\nSearch the email customization configuration if any set for the ThoughtSpot system.\n\n#### Pre-requisites\n\nRequires `DEVELOPER` (**has developer privilege**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `DEVELOPER` (**Has developer privilege**) privilege is required.\n\n**NOTE**:This endpoint in currently in beta. Contact ThoughtSpot support to enable this on your instance.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Log", - "9.0.0.cl" + "Email Customization", + "10.10.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FetchLogsRequest" + "$ref": "#/components/schemas/SearchEmailCustomizationRequest" } } }, @@ -6150,13 +6061,13 @@ "parameters": [], "responses": { "200": { - "description": "Log fetched successfully.", + "description": "OK", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/LogResponse" + "$ref": "#/components/schemas/CreateEmailCustomizationResponse" } } } @@ -6172,18 +6083,8 @@ } } }, - "401": { - "description": "Unauthorized access.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "403": { - "description": "Forbidden access.", + "description": "Unauthorized access.", "content": { "application/json": { "schema": { @@ -6205,19 +6106,19 @@ } } }, - "/api/rest/2.0/metadata/worksheets/convert": { + "/api/rest/2.0/customization/email/update": { "post": { - "operationId": "convertWorksheetToModel", - "description": "\nConvert worksheets to models
Version: 10.6.0.cl or later\n\n## Prerequisites\n- **Privileges Required:**\n - `DATAMANAGEMENT` (Can manage data) or `ADMINISTRATION` (Can administer ThoughtSpot).\n- **Additional Privileges (if RBAC is enabled):**\n - `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (Can manage data models).\n\n---\n\n## Usage Guidelines\n\n### Parameters\n\n1. **worksheet_ids** \n - **Description:** A comma-separated list of GUIDs (Globally Unique Identifiers) specifying the Worksheets to be converted. \n - **Usage:** \n - Used only when `convert_all` is set to `false`. \n - Leave empty or omit when `convert_all` is set to `true`.\n\n2. **exclude_worksheet_ids** \n - **Description:** A comma-separated list of GUIDs specifying Worksheets to be excluded from conversion. \n - **Usage:** \n - Useful when `convert_all` is set to `true` and specific Worksheets should not be converted.\n\n3. **convert_all** \n - **Description:** Sets the scope of conversion.\n - **Options:** \n - `true`: Converts all Worksheets in the system, except those specified in `exclude_worksheet_ids`. \n - `false`: Converts only the Worksheets listed in `worksheet_ids`.\n\n4. **apply_changes** \n - **Description:** Specifies whether to apply changes directly to ThoughtSpot or to generate a preview before applying any changes.Used for validation of conversion.\n - **Options:** \n - `true`: Applies conversion changes directly to ThoughtSpot.\n - `false`: Generates only a preview of the changes and does not apply any changes to ThoughtSpot\n\n---\n\n## Best Practices\n\n1. **Backup Before Conversion:** \n Always export metadata as a backup before initiating the conversion process\n\n2. **Partial Conversion for Testing:** \n Test the conversion process by setting `convert_all` to `false` and specifying a small number of `worksheet_ids`.\n\n3. **Verify Dependencies:** \n Check for dependent objects, such as Tables and Connections, to avoid invalid references.\n\n4. **Review Changes:** \n Use `apply_changes: false` to preview the impact of the conversion before applying changes.\n\n---\n\n## Examples\n\n### Convert Specific Worksheets\n```json\n{\n \"worksheet_ids\": [\"guid1\", \"guid2\", \"guid3\"],\n \"exclude_worksheet_ids\": [],\n \"convert_all\": false,\n \"apply_changes\": true\n}\n```\n\n### Convert All Accessible Worksheets\n```json\n{\n \"worksheet_ids\": [],\n \"exclude_worksheet_ids\": [],\n \"convert_all\": true,\n \"apply_changes\": true\n}\n```\n\n### Exclude Specific Worksheets While Converting All Accessible Worksheets\n```json\n{\n \"worksheet_ids\": [],\n \"exclude_worksheet_ids\": [\"abc\"],\n \"convert_all\": true,\n \"apply_changes\": true\n}\n```\n\n\n\n#### Endpoint URL\n", + "operationId": "updateEmailCustomization", + "description": "\nBeta Version: 10.12.0.cl or later\n\nUpdates a customization configuration for the notification email.\n\n#### Pre-requisites\n\nRequires `DEVELOPER` (**has developer privilege**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `DEVELOPER` (**Has developer privilege**) privilege is required.\n\n**NOTE**:This endpoint in currently in beta. Contact ThoughtSpot support to enable this on your instance.\n\n#### Usage guidelines\n\nTo update a custom configuration pass these parameters in your API request:\n\n- A JSON map of configuration attributes `template_properties`. The following example shows a sample set of customization configuration:\n\n```\n{\n {\n \"cta_button_bg_color\": \"#444DEA\",\n \t\"cta_text_font_color\": \"#FFFFFF\",\n \t\"primary_bg_color\": \"#D3DEF0\",\n \"logo_url\": \"https://storage.pardot.com/710713/1642089901EbkRibJq/TS_fullworkmark_darkmode.png\",\n \t \"font_family\": \"\",\n \t\"product_name\": \"ThoughtSpot\",\n \t\"footer_address\": \"444 Castro St, Suite 1000 Mountain View, CA 94041\",\n\t \"footer_phone\": \"(800) 508-7008\",\n \"replacement_value_for_liveboard\": \"Dashboard\",\n \t\"replacement_value_for_answer\": \"Chart\",\n \t\"replacement_value_for_spot_iq\": \"AI Insights\",\n \t \"hide_footer_phone\": false,\n \"hide_footer_address\": false,\n \"hide_product_name\": false,\n \t\"hide_manage_notification\": false,\n \t\"hide_mobile_app_nudge\": false,\n \t\"hide_privacy_policy\": false,\n \t\"hide_ts_vocabulary_definitions\": false,\n \t\"hide_error_message\": false,\n \t\"hide_unsubscribe_link\": false,\n \"hide_notification_status\": false,\n \t\"hide_modify_alert\": false,\n \t\"company_website_url\": \"https://your-website.com/\",\n \t\"company_privacy_policy_url\" : \"https://link-to-privacy-policy.com/\",\n \"contact_support_url\": \"https://link-to-contact-support.com/\",\n \"hide_contact_support_url\": false,\n\t \"hide_logo_url\" : false\n }\n}\n```\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Metadata", - "10.6.0.cl" + "Email Customization", + "10.12.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ConvertWorksheetToModelRequest" + "$ref": "#/components/schemas/UpdateEmailCustomizationRequest" } } }, @@ -6225,15 +6126,8 @@ }, "parameters": [], "responses": { - "200": { - "description": "Conversion of worksheets to model done successfully.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ResponseWorksheetToModelConversion" - } - } - } + "204": { + "description": "Email Customization configuration successfully updated." }, "400": { "description": "Invalid request.", @@ -6256,7 +6150,7 @@ } }, "403": { - "description": "Forbidden access.", + "description": "Unauthorized access.", "content": { "application/json": { "schema": { @@ -6278,35 +6172,18 @@ } } }, - "/api/rest/2.0/metadata/copyobject": { + "/api/rest/2.0/customization/email/validate": { "post": { - "operationId": "copyObject", - "description": "\nMakes a copy of an Answer or Liveboard
Version: 10.3.0.cl or later\n\nCreates a copy of a metadata object.\n\nRequires at least view access to the metadata object being copied.\n\nUpon successful execution, the API creates a copy of the metadata object specified in the API request and returns the ID of the new object.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "validateEmailCustomization", + "description": "\nBeta Version: 10.10.0.cl or later\n\nValidates the email customization configuration if any set for the ThoughtSpot system.\n\n#### Pre-requisites\n\nRequires `DEVELOPER` (**has developer privilege**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `DEVELOPER` (**Has developer privilege**) privilege is required.\n\n**NOTE**:This endpoint in currently in beta. Contact ThoughtSpot support to enable this on your instance.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Metadata", - "10.3.0.cl" + "Email Customization", + "10.10.0.cl" ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CopyObjectRequest" - } - } - }, - "required": true - }, "parameters": [], "responses": { - "200": { - "description": "Successfully created a copy of the object", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ResponseCopyObject" - } - } - } + "204": { + "description": "Triggered test email for customization configuration" }, "400": { "description": "Invalid request.", @@ -6318,28 +6195,8 @@ } } }, - "401": { - "description": "Unauthorized access.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, "403": { - "description": "Forbidden access.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "404": { - "description": "Object not found", + "description": "Unauthorized access.", "content": { "application/json": { "schema": { @@ -6361,19 +6218,19 @@ } } }, - "/api/rest/2.0/metadata/delete": { + "/api/rest/2.0/groups/create": { "post": { - "operationId": "deleteMetadata", - "description": "\n Version: 9.0.0.cl or later\n\nRemoves the specified metadata object from the ThoughtSpot system.\n\nRequires edit access to the metadata object. \n\n\n\n\n#### Endpoint URL\n", + "operationId": "createUserGroup", + "description": "\n Version: 9.0.0.cl or later\n\nCreates a group object in ThoughtSpot.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `GROUP_ADMINISTRATION` (**Can manage groups**) privilege is required.\n\n#### About groups\nGroups in ThoughtSpot are used by the administrators to define privileges and organize users based on their roles and access requirements. To know more about groups and privileges, see [ThoughtSpot Product Documentation](https://docs.thoughtspot.com/cloud/latest/groups-privileges).\n\n#### Supported operations\n\nThe API endpoint lets you perform the following operations:\n\n* Assign privileges\n* Add users\n* Define sharing visibility\n* Add sub-groups\n* Assign a default Liveboard\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Metadata", + "Groups", "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeleteMetadataRequest" + "$ref": "#/components/schemas/CreateUserGroupRequest" } } }, @@ -6381,8 +6238,15 @@ }, "parameters": [], "responses": { - "204": { - "description": "Metadata objects successfully deleted." + "200": { + "description": "User group successfully created.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserGroupResponse" + } + } + } }, "400": { "description": "Invalid request.", @@ -6427,38 +6291,28 @@ } } }, - "/api/rest/2.0/metadata/tml/export": { + "/api/rest/2.0/groups/{group_identifier}/delete": { "post": { - "operationId": "exportMetadataTML", - "description": "\n Version: 9.0.0.cl or later\n\nExports the [TML](https://docs.thoughtspot.com/cloud/latest/tml) representation of metadata objects in JSON or YAML format.\n\nRequires `DATADOWNLOADING` (**Can download Data**) and at least view access to the metadata object.\n\n#### Usage guidelines\n\n* You can export one or several objects by passing metadata object GUIDs in the `metadata` array.\n* When exporting TML content for a Liveboard or Answer object, you can set `export_associated` to `true` to retrieve TML content for underlying Worksheets, Tables, or Views, including the GUID of each object within the headers. When `export_associated` is set to `true`, consider retrieving one metadata object at a time.\n* Set `export_fqns` to `true` to add FQNs of the referenced objects in the TML content. For example, if you send an API request to retrieve TML for a Liveboard and its associated objects, the API returns the TML content with FQNs of the referenced Worksheet. Exporting TML with FQNs is useful if ThoughtSpot has multiple objects with the same name and you want to eliminate ambiguity when importing TML files into ThoughtSpot. It eliminates the need for adding FQNs of the referenced objects manually during the import operation.\n* To export only the TML of feedbacks associated with an object, set the GUID of the object as `identifier`, and set the `type` as `FEEDBACK` in the `metadata` array.\n* To export the TML of an object along with the feedbacks associated with it, set the GUID of the object as `identifier`, set the `type` as `LOGIAL_TABLE` in the `metadata` array, and set `export_with_associated_feedbacks` in `export_options` to true.\n\nFor more information, see [TML Documentation](https://developers.thoughtspot.com/docs/tml#_export_a_tml).\n\nFor more information on feedbacks, see [Feedback Documentation](https://docs.thoughtspot.com/cloud/latest/sage-feedback).\n\n\n\n#### Endpoint URL\n", + "operationId": "deleteUserGroup", + "description": "\n Version: 9.0.0.cl or later\n\nRemoves the specified group object from the ThoughtSpot system.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `GROUP_ADMINISTRATION` (**Can manage groups**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Metadata", + "Groups", "9.0.0.cl" ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExportMetadataTMLRequest" - } - } - }, - "required": true - }, - "parameters": [], + "parameters": [ + { + "in": "path", + "name": "group_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "GUID or name of the group." + } + ], "responses": { - "200": { - "description": "Export TMLs of specified metadata objects is successful.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object" - } - } - } - } + "204": { + "description": "User group successfully deleted." }, "400": { "description": "Invalid request.", @@ -6503,19 +6357,19 @@ } } }, - "/api/rest/2.0/metadata/tml/export/batch": { + "/api/rest/2.0/groups/import": { "post": { - "operationId": "exportMetadataTMLBatched", - "description": "\n Version: 10.1.0.cl or later\n\nExports the [TML](https://docs.thoughtspot.com/cloud/latest/tml) representation of metadata objects in JSON or YAML format.\n\n### **Permissions Required**\n\nRequires `DATAMANAGEMENT` (**Can manage data**) and `USERMANAGEMENT` (**Can manage users**) privileges.\n\n#### **Usage Guidelines**\n\nThis API is only applicable for `USER`, `GROUP`, and `ROLES` metadata types.\n\n- `batch_offset` Indicates the starting position within the complete dataset from which the API should begin returning objects. Useful for paginating results efficiently.\n- `batch_size` Specifies the number of objects or items to retrieve in a single request. Helps control response size for better performance.\n- `edoc_format` Defines the format of the TML content. The exported metadata can be in JSON or YAML format.\n- `export_dependent` Specifies whether to include dependent metadata objects in the export. Ensures related objects are also retrieved if needed.\n- `all_orgs_override` Indicates whether the export operation applies across all organizations. Useful for multi-tenant environments where cross-org exports are required.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "importUserGroups", + "description": "\n Version: 9.0.0.cl or later\n\nImports group objects from external databases into ThoughtSpot.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `GROUP_ADMINISTRATION` (**Can manage groups**) privilege is required.\n\nDuring the import operation:\n\n* If the specified group is not available in ThoughtSpot, it will be added to ThoughtSpot.\n* If `delete_unspecified_groups` is set to `true`, the groups not specified in the API request, excluding administrator and system user groups, are deleted.\n* If the specified groups are already available in ThoughtSpot, the object properties of these groups are modified and synchronized as per the input data in the API request.\n\nA successful API call returns the object that represents the changes made in the ThoughtSpot system.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Metadata", - "10.1.0.cl" + "Groups", + "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ExportMetadataTMLBatchedRequest" + "$ref": "#/components/schemas/ImportUserGroupsRequest" } } }, @@ -6524,11 +6378,11 @@ "parameters": [], "responses": { "200": { - "description": "Export TMLs of specified metadata objects is successful.", + "description": "Import user groups operation successful.", "content": { "application/json": { "schema": { - "type": "object" + "$ref": "#/components/schemas/ImportUserGroupsResponse" } } } @@ -6576,19 +6430,19 @@ } } }, - "/api/rest/2.0/metadata/answer/sql": { + "/api/rest/2.0/groups/search": { "post": { - "operationId": "fetchAnswerSqlQuery", - "description": "\n Version: 9.0.0.cl or later\n\nFetches the underlying SQL query data for an Answer object.\n\nRequires at least view access to the Answer object.\n\nUpon successful execution, the API returns the SQL queries for the specified object as shown in this example:\n```\n{\n \"metadata_id\":\"8fbe44a8-46ad-4b16-8d39-184b2fada490\",\n \"metadata_name\":\"Total sales\",\n \"metadata_type\":\"ANSWER\",\n \"sql_queries\":[\n {\n \"metadata_id\":\"8fbe44a8-46ad-4b16-8d39-184b2fada490\",\n \"metadata_name\":\"Total sales -test\",\n \"sql_query\":\"SELECT \\n \\\"ta_1\\\".\\\"REGION\\\" \\\"ca_1\\\", \\n \\\"ta_2\\\".\\\"PRODUCTNAME\\\" \\\"ca_2\\\", \\n \\\"ta_1\\\".\\\"STORENAME\\\" \\\"ca_3\\\", \\n CASE\\n WHEN sum(\\\"ta_3\\\".\\\"SALES\\\") IS NOT NULL THEN sum(\\\"ta_3\\\".\\\"SALES\\\")\\n ELSE 0\\n END \\\"ca_4\\\", \\n CASE\\n WHEN sum(\\\"ta_3\\\".\\\"QUANTITYPURCHASED\\\") IS NOT NULL THEN sum(\\\"ta_3\\\".\\\"QUANTITYPURCHASED\\\")\\n ELSE 0\\n END \\\"ca_5\\\"\\nFROM \\\"RETAILAPPAREL\\\".\\\"PUBLIC\\\".\\\"FACT_RETAPP_SALES\\\" \\\"ta_3\\\"\\n JOIN \\\"RETAILAPPAREL\\\".\\\"PUBLIC\\\".\\\"DIM_RETAPP_STORES\\\" \\\"ta_1\\\"\\n ON \\\"ta_3\\\".\\\"STOREID\\\" = \\\"ta_1\\\".\\\"STOREID\\\"\\n JOIN \\\"RETAILAPPAREL\\\".\\\"PUBLIC\\\".\\\"DIM_RETAPP_PRODUCTS\\\" \\\"ta_2\\\"\\n ON \\\"ta_3\\\".\\\"PRODUCTID\\\" = \\\"ta_2\\\".\\\"PRODUCTID\\\"\\nGROUP BY \\n \\\"ca_1\\\", \\n \\\"ca_2\\\", \\n \\\"ca_3\\\"\\n\"\n }\n ]\n}\n```\n\n\n\n\n#### Endpoint URL\n", + "operationId": "searchUserGroups", + "description": "\n Version: 9.0.0.cl or later\n\nGets a list of user group objects from the ThoughtSpot system.\n\nTo get details of a specific user group, specify the user group GUID or name. You can also filter the API response based on User ID, Org ID, Role ID, type of group, sharing visibility, privileges assigned to the group, and the Liveboard IDs assigned to the users in the group.\n\nAvailable to all users. Users with `ADMINISTRATION` (**Can administer ThoughtSpot**) privileges can view all users properties.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `GROUP_ADMINISTRATION` (**Can manage groups**) privilege is required.\n\n**NOTE**: If you do not get precise results, try setting `record_size` to `-1` and `record_offset` to `0`.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Metadata", + "Groups", "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FetchAnswerSqlQueryRequest" + "$ref": "#/components/schemas/SearchUserGroupsRequest" } } }, @@ -6597,11 +6451,14 @@ "parameters": [], "responses": { "200": { - "description": "Fetching SQL query of specified metadata object is successful.", + "description": "User group search result.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SqlQueryResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/UserGroupResponse" + } } } } @@ -6649,35 +6506,38 @@ } } }, - "/api/rest/2.0/metadata/tml/async/status": { + "/api/rest/2.0/groups/{group_identifier}/update": { "post": { - "operationId": "fetchAsyncImportTaskStatus", - "description": "\n Version: 10.4.0.cl or later\n\nGets information about the status of the TML async import task scheduled using the `/api/rest/2.0/metadata/tml/async/import` API call.\n\nTo fetch the task details, specify the ID of the TML async import task. \n\nRequires access to the task ID. The API allows users who initiated the asynchronous TML import via `/api/rest/2.0/metadata/tml/async/import` to view the status of their tasks. Users with administration privilege can view the status of all import tasks initiated by the users in their Org.\n\n#### Usage guidelines\n\nSee [TML API Documentation](https://developers.thoughtspot.com/docs/tml#_fetch_status_of_the_tml_import_task) for usage guidelines.\n\n\n\n#### Endpoint URL\n", + "operationId": "updateUserGroup", + "description": "\n Version: 9.0.0.cl or later\n\nUpdates the properties of a group object in ThoughtSpot.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `GROUP_ADMINISTRATION` (**Can manage groups**) privilege is required.\n\n#### Supported operations\n\nThis API endpoint lets you perform the following operations in a single API request:\n\n* Edit [privileges](https://developers.thoughtspot.com/docs/?pageid=api-user-management#group-privileges)\n* Add or remove users\n* Change sharing visibility settings\n* Add or remove sub-groups\n* Assign a default Liveboard or update the existing settings\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Metadata", - "10.4.0.cl" + "Groups", + "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FetchAsyncImportTaskStatusRequest" + "$ref": "#/components/schemas/UpdateUserGroupRequest" } } }, "required": true }, - "parameters": [], + "parameters": [ + { + "in": "path", + "name": "group_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "GUID or name of the group." + } + ], "responses": { - "200": { - "description": "Async TML Import Task statuses fetched successfully.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetAsyncImportStatusResponse" - } - } - } + "204": { + "description": "User group successfully updated." }, "400": { "description": "Invalid request.", @@ -6722,19 +6582,19 @@ } } }, - "/api/rest/2.0/metadata/liveboard/sql": { + "/api/rest/2.0/input-tables/create": { "post": { - "operationId": "fetchLiveboardSqlQuery", - "description": "\n Version: 9.0.0.cl or later\n\nFetches the underlying SQL query data for a Liveboard object and its visualizations.\n\nRequires at least view access to the Liveboard object.\n\nTo get SQL query data for a Liveboard, specify the GUID of the Liveboard. Optionally, you can add an array of visualization GUIDs to retrieve the SQL query data for visualizations in the Liveboard.\n\nUpon successful execution, the API returns the SQL queries for the specified object as shown in this example:\n```\n{\n \"metadata_id\": \"fa68ae91-7588-4136-bacd-d71fb12dda69\",\n \"metadata_name\": \"Total Sales\",\n \"metadata_type\": \"LIVEBOARD\",\n \"sql_queries\": [\n {\n \"metadata_id\": \"b3b6d2b9-089a-490c-8e16-b144650b7843\",\n \"metadata_name\": \"Total quantity purchased, Total sales by region\",\n \"sql_query\": \"SELECT \\n \\\"ta_1\\\".\\\"REGION\\\" \\\"ca_1\\\", \\n CASE\\n WHEN sum(\\\"ta_2\\\".\\\"QUANTITYPURCHASED\\\") IS NOT NULL THEN sum(\\\"ta_2\\\".\\\"QUANTITYPURCHASED\\\")\\n ELSE 0\\n END \\\"ca_2\\\", \\n CASE\\n WHEN sum(\\\"ta_2\\\".\\\"SALES\\\") IS NOT NULL THEN sum(\\\"ta_2\\\".\\\"SALES\\\")\\n ELSE 0\\n END \\\"ca_3\\\"\\nFROM \\\"RETAILAPPAREL\\\".\\\"PUBLIC\\\".\\\"FACT_RETAPP_SALES\\\" \\\"ta_2\\\"\\n JOIN \\\"RETAILAPPAREL\\\".\\\"PUBLIC\\\".\\\"DIM_RETAPP_STORES\\\" \\\"ta_1\\\"\\n ON \\\"ta_2\\\".\\\"STOREID\\\" = \\\"ta_1\\\".\\\"STOREID\\\"\\nGROUP BY \\\"ca_1\\\"\"\n }\n ]\n}\n```\n\n\n\n\n#### Endpoint URL\n", + "operationId": "createInputTable", + "description": "\n Version: 26.8.0.cl or later\n\nVersion: 26.8.0.cl or later\n\nCreates an input table and links it to a ThoughtSpot model (worksheet). An input table is a user-editable table stored in the model's external Cloud Data Warehouse (CDW) connection. It lets analysts enter or import data directly from the ThoughtSpot UI without requiring access to the underlying warehouse.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your ThoughtSpot instance, the `CAN_MANAGE_INPUT_TABLES` (**Can manage input tables**) privilege is required.\n\n#### Usage guidelines\n\nTo create an input table, provide the following in the request body:\n\n* **`table_name`** — Physical name of the table to create in the external warehouse.\n* **`model_identifier`** — GUID or name of the model (worksheet) to link the input table to. The connection, database, and schema used to create the physical table are derived from this model's metadata.\n* **`table_definition`** — Describes the table schema:\n * `referenced_columns` — List of column GUIDs from the linked model to include as read-only reference columns in the input table. These columns anchor the input data to existing model dimensions.\n * `new_columns` — List of new editable columns to create. Each column requires:\n * `name` — Column display name.\n * `data_type` — Warehouse data type (for example, `VARCHAR`, `DOUBLE`, `DATE`).\n * `type` — Semantic role of the column: `ATTRIBUTE` for dimension columns or `MEASURE` for numeric columns.\n\n**Note**: The physical table is created in the same connection, database, and schema as the linked model. Ensure the connection user has `CREATE TABLE` permissions in the target schema.\n\n#### Examples\n\nCreate an input table with one referenced model column and one new editable measure column:\n\n```json\n{\n \"table_name\": \"Sales Region Targets\",\n \"model_identifier\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"table_definition\": {\n \"referenced_columns\": [\"c7d8e9f0-1234-5678-abcd-ef0987654321\"],\n \"new_columns\": [\n {\n \"name\": \"target_revenue\",\n \"data_type\": \"DOUBLE\",\n \"type\": \"MEASURE\"\n }\n ]\n }\n}\n```\n\nCreate an input table with multiple new editable columns and no referenced columns:\n\n```json\n{\n \"table_name\": \"Budget Adjustments\",\n \"model_identifier\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"table_definition\": {\n \"referenced_columns\": [],\n \"new_columns\": [\n {\n \"name\": \"region\",\n \"data_type\": \"VARCHAR\",\n \"type\": \"ATTRIBUTE\"\n },\n {\n \"name\": \"adjustment_amount\",\n \"data_type\": \"DOUBLE\",\n \"type\": \"MEASURE\"\n },\n {\n \"name\": \"effective_date\",\n \"data_type\": \"DATE\",\n \"type\": \"ATTRIBUTE\"\n }\n ]\n }\n}\n```\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Metadata", - "9.0.0.cl" + "Input Tables", + "26.8.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FetchLiveboardSqlQueryRequest" + "$ref": "#/components/schemas/CreateInputTableRequest" } } }, @@ -6743,17 +6603,25 @@ "parameters": [], "responses": { "200": { - "description": "Fetching SQL query of specified metadata object is successful.", + "description": "Input table created successfully.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SqlQueryResponse" + "$ref": "#/components/schemas/InputTableResponse" + }, + "examples": { + "example_1": { + "summary": "Input table created successfully", + "value": { + "input_table_identifier": "f47ac10b-58cc-4372-a567-0e02b2c3d479" + } + } } } } }, "400": { - "description": "Invalid request.", + "description": "Bad request — invalid payload, no columns selected, or upload disabled on the connection.", "content": { "application/json": { "schema": { @@ -6773,7 +6641,17 @@ } }, "403": { - "description": "Forbidden access.", + "description": "Forbidden — caller does not have MODIFY permission on the model.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "Model not found.", "content": { "application/json": { "schema": { @@ -6783,7 +6661,7 @@ } }, "500": { - "description": "Unexpected error", + "description": "Unexpected error.", "content": { "application/json": { "schema": { @@ -6795,41 +6673,31 @@ } } }, - "/api/rest/2.0/metadata/tml/import": { + "/api/rest/2.0/input-tables/{input_table_identifier}/delete": { "post": { - "operationId": "importMetadataTML", - "description": "\n Version: 9.0.0.cl or later\n\nImports [TML](https://docs.thoughtspot.com/cloud/latest/tml) files into ThoughtSpot.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtsSpot**) privilege.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the following Data control privileges may be required:\n- `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**)\n- `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**)\n\n#### Usage guidelines\n\n* Import all related objects in a single TML Import API call. For example, Tables that use the same Connection object and Worksheets connected to these Tables.\n* Include the `fqn` property to distinguish objects that have the same name.\n For example, if you have multiple Connections or Worksheets with the same name on ThoughtSpot and the Connection or Worksheet referenced in your TML file does not have a unique name to distinguish, it may result in invalid object references.\n Adding `fqn` helps ThoughtSpot differentiate a Table from another with the same name.\n We recommend [exporting TML with FQNs](#/http/api-endpoints/metadata/export-metadata-tml) and using these during the import operation.\n* You can upload multiple TML files at a time.\n If you import a Worksheet along with Liveboards, Answers, and other dependent objects in a single API call, the imported objects will be immediately available for use.\n When you import only a Worksheet object, it may take some time for the Worksheet to become available in the ThoughtSpot system. Please wait for a few minutes, and then proceed to create an Answer and Liveboard from the newly imported Worksheet.\n\nFor more information, see [TML Documentation](https://developers.thoughtspot.com/docs/tml#_import_a_tml).\n\n\n\n\n#### Endpoint URL\n", + "operationId": "deleteInputTable", + "description": "\n Version: 26.8.0.cl or later\n\nVersion: 26.8.0.cl or later\n\nDeletes an input table. This operation unlinks the input table from its owner model, removes it from the connection metadata, and drops the physical table from the Cloud Data Warehouse (CDW). This action is irreversible — all data stored in the input table is permanently deleted.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your ThoughtSpot instance, the `CAN_MANAGE_INPUT_TABLES` (**Can manage input tables**) privilege is required.\n\n#### Usage guidelines\n\nSpecify the GUID of the input table to delete as the `input_table_identifier` path parameter. The owner model (worksheet) is derived from the input table's metadata and is used to locate and clean up the associated connection entry.\n\n**Note**: Deleting an input table does not delete the linked model. However, any Answers or Liveboards that reference columns from the deleted input table will lose access to that data and may return errors until the affected visualizations are updated.\n\n#### Example\n\nPass the input table GUID as a path parameter. This endpoint has no request body.\n\n```\nDELETE /api/rest/2.0/input-tables/a1b2c3d4-e5f6-7890-abcd-ef1234567890/delete\n```\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Metadata", - "9.0.0.cl" + "Input Tables", + "26.8.0.cl" + ], + "parameters": [ + { + "in": "path", + "name": "input_table_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique ID of the input table to delete." + } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ImportMetadataTMLRequest" - } - } - }, - "required": true - }, - "parameters": [], "responses": { - "200": { - "description": "Import metadata objects using specified TMLs is successful.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object" - } - } - } - } + "204": { + "description": "Successfully deleted the input table and dropped the physical CDW table." }, "400": { - "description": "Invalid request.", + "description": "Operation failed", "content": { "application/json": { "schema": { @@ -6859,7 +6727,7 @@ } }, "500": { - "description": "Unexpected error", + "description": "Operation failed", "content": { "application/json": { "schema": { @@ -6871,38 +6739,56 @@ } } }, - "/api/rest/2.0/metadata/tml/async/import": { + "/api/rest/2.0/input-tables/{input_table_identifier}/update": { "post": { - "operationId": "importMetadataTMLAsync", - "description": "\n Version: 10.4.0.cl or later\n\nSchedules a task to import [TML](https://docs.thoughtspot.com/cloud/latest/tml) files into ThoughtSpot. You can use this API endpoint to process TML objects asynchronously when importing TMLs of large and complex metadata objects into ThoughtSpot. Unlike the synchronous import TML operation, the API processes TML data in the background and returns a task ID, which can be used to check the status of the import task via `/api/rest/2.0/metadata/tml/async/status` API endpoint.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtsSpot**) privilege, and edit access to the TML objects.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the following Data control privileges may be required:\n- `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**)\n- `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**)\n\n#### Usage guidelines\n\nSee [Async TML API Documentation](https://developers.thoughtspot.com/docs/tml#_import_tml_objects_asynchronously) for usage guidelines.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "updateInputTable", + "description": "\n Version: 26.8.0.cl or later\n\nVersion: 26.8.0.cl or later\n\nWrites rows of data into an existing input table. The supplied rows replace the current contents of the table: each call serializes the provided values to CSV and loads them into the input table via DataManager, overwriting any previously stored rows.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your ThoughtSpot instance, the `CAN_MANAGE_INPUT_TABLES` (**Can manage input tables**) privilege is required. The caller must also have `MODIFY` permission on the input table object.\n\n#### Usage guidelines\n\nSpecify the input table GUID as the `input_table_identifier` path parameter and provide the row data in the request body:\n\n* **`columns`** — Ordered list of column names to write. Column names must exactly match the names defined when the input table was created. Only the listed columns are written; unlisted columns retain their existing values.\n* **`rows`** — List of rows to load. Each row is an array of string values in the same order as `columns`. All cell values must be passed as strings regardless of the column's underlying data type.\n\n**Note**: Each call fully replaces the previously loaded rows. To clear the table, send an empty `rows` array. Partial updates to individual rows are not supported; re-submit all rows on every write.\n\n#### Examples\n\nWrite two rows to an input table. Pass the input table GUID as the\n`input_table_identifier` path parameter:\n\n```\nPOST /api/rest/2.0/input-tables/{input_table_identifier}/update\n```\n\n```json\n{\n \"columns\": [\"region\", \"target_revenue\", \"effective_date\"],\n \"rows\": [\n [\"West\", \"1500000\", \"2025-01-01\"],\n [\"East\", \"2000000\", \"2025-01-01\"]\n ]\n}\n```\n\nThe response returns the number of rows written:\n\n```json\n{ \"rows_loaded\": 2 }\n```\n\nClear all rows from an input table:\n\n```json\n{\n \"columns\": [\"region\", \"target_revenue\"],\n \"rows\": []\n}\n```\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Metadata", - "10.4.0.cl" + "Input Tables", + "26.8.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ImportMetadataTMLAsyncRequest" + "$ref": "#/components/schemas/UpdateInputTableRequest" } } }, "required": true }, - "parameters": [], + "parameters": [ + { + "in": "path", + "name": "input_table_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique ID of the input table to update." + } + ], "responses": { "200": { - "description": "Async TML Import Task submitted successfully.", + "description": "Rows loaded successfully.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ImportEPackAsyncTaskStatus" + "$ref": "#/components/schemas/InputTableUpdateResponse" + }, + "examples": { + "example_1": { + "summary": "Rows loaded successfully", + "value": { + "rows_loaded": 3 + } + } } } } }, "400": { - "description": "Invalid request.", + "description": "Malformed request or unknown column name.", "content": { "application/json": { "schema": { @@ -6922,7 +6808,7 @@ } }, "403": { - "description": "Forbidden access.", + "description": "Forbidden — caller does not have MODIFY permission on the input table.", "content": { "application/json": { "schema": { @@ -6931,8 +6817,8 @@ } } }, - "500": { - "description": "Unexpected error", + "404": { + "description": "Input table not found.", "content": { "application/json": { "schema": { @@ -6940,24 +6826,33 @@ } } } - } - } - } - }, - "/api/rest/2.0/metadata/parameterize": { + }, + "500": { + "description": "Unexpected error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/rest/2.0/jobs/history/communication-channels/search": { "post": { - "operationId": "parameterizeMetadata", - "description": "\nParameterize fields in metadata objects.
Beta Version: 10.9.0.cl or later\n\n**Note:** This API endpoint is deprecated and will be removed from ThoughtSpot in a future release. Use [POST /api/rest/2.0/metadata/parameterize-fields](/api/rest/2.0/metadata/parameterize-fields) instead.\n\nAllows parameterizing fields in metadata objects in ThoughtSpot.\n\nRequires appropriate permissions to modify the metadata object.\n\nThe API endpoint allows parameterizing the following types of metadata objects:\n* Logical Tables\n* Connections\n* Connection Configs\n\nFor a Logical Table the field type must be `ATTRIBUTE` and field name can be one of:\n* databaseName\n* schemaName\n* tableName\n\nFor a Connection or Connection Config, the field type is always `CONNECTION_PROPERTY`. In this case, field_name specifies the exact property of the Connection or Connection Config that needs to be parameterized.\n\nFor Connection Config, the only supported field name is:\n* impersonate_user\n\n\n\n\n#### Endpoint URL\n", - "deprecated": true, + "operationId": "searchChannelHistory", + "description": "\n Version: 26.4.0.cl or later\n\nSearches delivery history for communication channels such as webhooks. Returns channel-level delivery status for each job execution record. Use this to monitor channel health and delivery success rates across events.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, users with `CAN_MANAGE_WEBHOOKS` (**Can manage webhooks**) privilege are also authorized to perform this action.\n\n**NOTE**: When `channel_type` is `WEBHOOK`, the following constraints apply:\n\n- `job_ids`, `channel_identifiers`, and `events` each accept at most one element.\n- When `job_ids` is provided, it is used as the sole lookup key and other filter fields are ignored.\n- When `job_ids` is not provided, `channel_identifiers` and `events` are both required, each containing exactly one element.\n- Records older than the configured retention period are not returned.\n- Use `start_epoch_time_in_millis` and/or `end_epoch_time_in_millis` to narrow results to a specific time window.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Metadata", - "10.9.0.cl" + "Jobs", + "26.4.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ParameterizeMetadataRequest" + "$ref": "#/components/schemas/SearchChannelHistoryRequest" } } }, @@ -6965,8 +6860,94 @@ }, "parameters": [], "responses": { - "204": { - "description": "Parameterize successful." + "200": { + "description": "Channel status logs retrieved successfully.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SearchChannelHistoryResponse" + }, + "examples": { + "example_1": { + "description": "Search webhook channel history by channel identifier and event", + "value": { + "jobs": [ + { + "id": "n.6170538a-a4d4-4712-91bf-39b353db2b72", + "status": "SUCCESS", + "creation_time_in_millis": 1771599720674, + "event": { + "type": "LIVEBOARD_SCHEDULE", + "id": "2bb2ff83-b8d9-4d2b-8913-b2589bb6831b", + "name": "schedule-identifier", + "run_id": "90c4f1b0-08c9-4a6c-8e61-49cffd9f1550" + }, + "recipients": [ + { + "type": "USER", + "id": "d211f619-8b72-45d3-92a7-69dde41159c7", + "name": "admin-user", + "email": "admin@example.com" + } + ], + "detail": "", + "try_count": 1 + }, + { + "id": "n.5c5bbedb-c425-48c0-8b54-a17267b08e7c", + "status": "SUCCESS", + "creation_time_in_millis": 1771599600508, + "event": { + "type": "LIVEBOARD_SCHEDULE", + "id": "2bb2ff83-b8d9-4d2b-8913-b2589bb6831b", + "name": "schedule-identifier", + "run_id": "b9834966-fe85-4fa9-8a10-9889c01d4826" + }, + "recipients": [ + { + "type": "USER", + "id": "d211f619-8b72-45d3-92a7-69dde41159c7", + "name": "admin-user", + "email": "admin@example.com" + } + ], + "detail": "", + "try_count": 1 + } + ] + } + }, + "example_2": { + "description": "Search webhook channel history by job ID", + "value": { + "jobs": [ + { + "id": "n.5c5bbedb-c425-48c0-8b54-a17267b08e7c", + "status": "SUCCESS", + "creation_time_in_millis": 1771599600508, + "event": { + "type": "LIVEBOARD_SCHEDULE", + "id": "2bb2ff83-b8d9-4d2b-8913-b2589bb6831b", + "name": "schedule-identifier", + "run_id": "b9834966-fe85-4fa9-8a10-9889c01d4826" + }, + "recipients": [ + { + "type": "USER", + "id": "d211f619-8b72-45d3-92a7-69dde41159c7", + "name": "admin-user", + "email": "admin@example.com" + } + ], + "detail": "", + "try_count": 1 + } + ] + } + } + } + } + } }, "400": { "description": "Invalid request.", @@ -7011,19 +6992,19 @@ } } }, - "/api/rest/2.0/metadata/parameterize-fields": { + "/api/rest/2.0/logs/fetch": { "post": { - "operationId": "parameterizeMetadataFields", - "description": "\nParameterize multiple fields of metadata objects. For example [schemaName, databaseName] for LOGICAL_TABLE.
Version: 26.5.0.cl or later\n\nAllows parameterizing multiple fields of metadata objects in ThoughtSpot. For example, you can parameterize [schemaName, databaseName] for LOGICAL_TABLE.\n\nRequires appropriate permissions to modify the metadata object.\n\nThe API endpoint allows parameterizing the following types of metadata objects:\n* Logical Tables\n* Connections\n* Connection Configs\n\nFor a Logical Table, the field type must be `ATTRIBUTE` and field names can include:\n* databaseName\n* schemaName\n* tableName\n\nFor a Connection or Connection Config, the field type is always `CONNECTION_PROPERTY`. In this case, field_names specifies the exact properties of the Connection or Connection Config that need to be parameterized.\n\nFor Connection Config, supported field names include:\n* impersonate_user\n\nYou can parameterize multiple fields at once by providing an array of field names.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "fetchLogs", + "description": "\n Version: 9.0.0.cl or later\n\nFetches security audit logs. \n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the [Admin Control](https://developers.thoughtspot.com/docs/rbac#_admin_control) privileges are required.\n\n\n#### Usage guidelines\n\nBy default, the API retrieves logs for the last 24 hours. You can set a custom duration in EPOCH time. Make sure the log duration specified in your API request doesn’t exceed 24 hours. If you must fetch logs for a longer time range, modify the duration and make multiple sequential API requests.\n\nUpon successful execution, the API returns logs with the following information:\n* timestamp of the event\n* event ID\n* event type\n* name and GUID of the user\n* IP address of ThoughtSpot instance\n\nFor more information see [Audit logs Documentation](https://developers.thoughtspot.com/docs/audit-logs).\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Metadata", - "26.5.0.cl" + "Log", + "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ParameterizeMetadataFieldsRequest" + "$ref": "#/components/schemas/FetchLogsRequest" } } }, @@ -7031,8 +7012,18 @@ }, "parameters": [], "responses": { - "204": { - "description": "Parameterize successful." + "200": { + "description": "Log fetched successfully.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LogResponse" + } + } + } + } }, "400": { "description": "Invalid request.", @@ -7077,19 +7068,19 @@ } } }, - "/api/rest/2.0/metadata/search": { + "/api/rest/2.0/localizations/manual-translation/delete": { "post": { - "operationId": "searchMetadata", - "description": "\n Version: 9.0.0.cl or later\n\nGets a list of metadata objects available on the ThoughtSpot system.\n\nThis API endpoint is available to all users who have view access to the object. Users with `ADMINISTRATION` (**Can administer ThoughtSpot**) privileges can view data for all metadata objects, including users and groups.\n\n#### Usage guidelines\n\n- To get all metadata objects, send the API request without any attributes.\n- To get metadata objects of a specific type, set the `type` attribute. For example, to fetch a Worksheet, set the type as `LOGICAL_TABLE`.\n- To filter metadata objects within type `LOGICAL_TABLE`, set the `subtypes` attribute. For example, to fetch a Worksheet, set the type as `LOGICAL_TABLE` & subtypes as `[WORKSHEET]`.\n- To get a specific metadata object, specify the GUID.\n- To customize your search and filter the API response, you can use several parameters.\n You can search for objects created or modified by specific users, by tags applied to the objects, or by using the include parameters like `include_auto_created_objects`, `include_dependent_objects`, `include_headers`, `include_incomplete_objects`, and so on.\n You can also define sorting options to sort the data retrieved in the API response.\n- To get discoverable objects when linientmodel is enabled you can use `include_discoverable_objects` as true else false. Default value is true.\n- For liveboard metadata type, to get the newer format, set the `liveboard_response_format` as V2. Default value is V1.\n- To retrieve only objects that are published, set the `include_only_published_objects` as true. Default value is false.\n\n**NOTE**: The following parameters support pagination of metadata records:\n\n- `tag_identifiers`\n- `type`\n- `subtypes`\n- `created_by_user_identifiers`\n- `modified_by_user_identifiers`\n- `owned_by_user_identifiers`\n- `exclude_objects`\n- `include_auto_created_objects`\n- `favorite_object_options`\n- `include_only_published_objects`\nIf you are using other parameters to search metadata, set `record_size` to `-1` and `record_offset` to `0`.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "deleteManualTranslations", + "description": "\nDelete manual translations.
Version: 26.7.0.cl or later\n\nDeletes all manual translations for the org.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**), `ORG_ADMINISTRATION` (**Can administer Org**), or `APPLICATION_ADMINISTRATION` (**Can administer application**) privilege.\n\n#### Usage guidelines\n\n- This deletes **all** translation entries for the targeted org. The operation cannot be undone.\n- Defaults to `ORG` scope if not specified.\n- Set `scope` to `CLUSTER` to delete translations uploaded in the All-Org context.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Metadata", - "9.0.0.cl" + "Manual Translation", + "26.7.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SearchMetadataRequest" + "$ref": "#/components/schemas/DeleteManualTranslationsRequest" } } }, @@ -7097,21 +7088,11 @@ }, "parameters": [], "responses": { - "200": { - "description": "Metadata objects search result.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/MetadataSearchResponse" - } - } - } - } + "204": { + "description": "Successfully deleted manual translations." }, "400": { - "description": "Invalid request.", + "description": "Operation failed", "content": { "application/json": { "schema": { @@ -7141,7 +7122,7 @@ } }, "500": { - "description": "Unexpected error", + "description": "Operation failed", "content": { "application/json": { "schema": { @@ -7153,19 +7134,19 @@ } } }, - "/api/rest/2.0/metadata/unparameterize": { + "/api/rest/2.0/localizations/manual-translation/export": { "post": { - "operationId": "unparameterizeMetadata", - "description": "\nRemove parameterization from fields in metadata objects.
Version: 26.5.0.cl or later\n\nAllows removing parameterization from fields in metadata objects in ThoughtSpot.\n\nRequires appropriate permissions to modify the metadata object.\n\nThe API endpoint allows unparameterizing the following types of metadata objects:\n* Logical Tables\n* Connections\n* Connection Configs\n\nFor a Logical Table the field type must be `ATTRIBUTE` and field name can be one of:\n* databaseName\n* schemaName\n* tableName\n\nFor a Connection or Connection Config, the field type is always `CONNECTION_PROPERTY`. In this case, field_name specifies the exact property of the Connection or Connection Config that needs to be unparameterized.\n\nFor Connection Config, the only supported field name is:\n* impersonate_user\n\n\n\n\n#### Endpoint URL\n", + "operationId": "exportManualTranslations", + "description": "\nExport manual translations as a CSV file.
Version: 26.7.0.cl or later\n\nDownloads all manual translations for the org as a CSV file.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**), `ORG_ADMINISTRATION` (**Can administer Org**), or `APPLICATION_ADMINISTRATION` (**Can administer application**) privilege.\n\n#### Usage guidelines\n\n- The response is a CSV file with columns: `content`, `locale`, `translated-content`.\n- Defaults to `ORG` scope if not specified.\n- Set `scope` to `CLUSTER` to export translations from the All-Org context.\n- Returns a `404` error if no translations exist for the targeted org or cluster scope.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Metadata", - "26.5.0.cl" + "Manual Translation", + "26.7.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UnparameterizeMetadataRequest" + "$ref": "#/components/schemas/ExportManualTranslationsRequest" } } }, @@ -7173,8 +7154,11 @@ }, "parameters": [], "responses": { - "204": { - "description": "Successfuly removed parameters." + "200": { + "description": "CSV file downloaded successfully.", + "content": { + "application/octet-stream": {} + } }, "400": { "description": "Invalid request.", @@ -7206,8 +7190,18 @@ } } }, + "404": { + "description": "No translations file found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "500": { - "description": "Unexpected error", + "description": "Unexpected error.", "content": { "application/json": { "schema": { @@ -7219,29 +7213,36 @@ } } }, - "/api/rest/2.0/metadata/headers/update": { + "/api/rest/2.0/localizations/manual-translation/locales/{locale}/export": { "post": { - "operationId": "updateMetadataHeader", - "description": "\nUpdate header attributes for a given list of header objects.
Beta Version: 10.6.0.cl or later\n\n## Prerequisites\n- **Privileges Required:**\n - `DATAMANAGEMENT` (Can manage data) or `ADMINISTRATION` (Can administer ThoughtSpot).\n- **Additional Privileges (if RBAC is enabled):**\n - `ORG_ADMINISTRATION` (Can manage orgs).\n\n---\n\n## Usage Guidelines\n\n### Parameters\n\n1. **headers_update** \n - **Description:** List of header objects with their attributes to be updated. Each object contains a list of attributes to be updated in the header.\n - **Usage:**\n - You must provide either `identifier` or `obj_identifier`, but not both. Both fields cannot be empty.\n - When `org_identifier` is set to `-1`, only the `identifier` value is accepted; `obj_identifier` is not allowed.\n\n2. **org_identifier** \n - **Description:** GUID (Globally Unique Identifier) or name of the organization. \n - **Usage:**\n - Leaving this field empty assumes that the changes should be applied to the current organization \n - Provide `org_guid` or `org_name` to uniquely identify the organization where changes need to be applied. .\n - Provide `-1` if changes have to be applied across all the org.\n\n---\n\n## Note\nCurrently, this API is enabled only for updating the `obj_identifier` attribute. Only `text` will be allowed in attribute's value.\n\n## Best Practices\n\n1. **Backup Before Conversion:** \n Always export metadata as a backup before initiating the update process\n\n---\n\n## Examples\n\n### Only `identifier` is given \n```json\n{\n \"headers_update\":\n [\n {\n \"identifier\": \"guid_1\",\n \"obj_identifier\": \"\",\n \"type\": \"LOGICAL_COLUMN\",\n \"attributes\":\n [\n {\n \"name\": \"obj_id\",\n \"value\": \"custom_object_id\"\n }\n ]\n }\n ],\n \"org_identifier\": \"orgGuid\"\n}\n```\n\n### Only `obj_identifier` is given\n```json\n{\n \"headers_update\":\n [\n {\n \"obj_identifier\": \"custom_object_id\",\n \"type\": \"ANSWER\",\n \"attributes\":\n [\n {\n \"name\": \"obj_id\",\n \"value\": \"custom_object_id\"\n }\n ]\n }\n ],\n \"org_identifier\": \"orgName\"\n}\n```\n\n### Executing update for all org `-1`\n```json\n{\n \"headers_update\":\n [\n {\n \"identifier\": \"guid_1\",\n \"type\": \"ANSWER\",\n \"attributes\":\n [\n {\n \"name\": \"obj_id\",\n \"value\": \"custom_object_id\"\n }\n ]\n }\n ],\n \"org_identifier\": -1\n}\n```\n\n### Optional `type` is not provided\n```json\n{\n \"headers_update\":\n [\n {\n \"identifier\": \"guid_1\",\n \"attributes\":\n [\n {\n \"name\": \"obj_id\",\n \"value\": \"custom_object_id\"\n }\n ]\n }\n ],\n \"org_identifier\": -1\n}\n```\n\n\n\n#### Endpoint URL\n", + "operationId": "getManualTranslationBundle", + "description": "\nGet translations bundle for a locale.
Version: 26.7.0.cl or later\n\nRetrieves all translations for a specific locale as a JSON map.\n\nAvailable to all authenticated users. No additional privileges are required.\n\n#### Usage guidelines\n\n- `locale` parameter must be a hyphenated locale code (for example, `fr-fr`, `de-de`, `JA-JP`).\n- Returns a JSON object with a `translations` map where each key is the original string and each value is the translated string.\n- If the org has no translations for the requested locale, the endpoint falls back to cluster-level translations.\n- Returns an empty `translations` map (not an error) if no entries exist at either level.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Metadata", - "10.6.0.cl" + "Manual Translation", + "26.7.0.cl" ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateMetadataHeaderRequest" + "parameters": [ + { + "in": "path", + "name": "locale", + "required": true, + "schema": { + "type": "string" + }, + "description": "Locale code for which to retrieve translations. For example, `fr-fr`, `de-de`, `JA-JP`." + } + ], + "responses": { + "200": { + "description": "Translation bundle retrieved successfully.", + "content": { + "application/json": { + "schema": { + "type": "object" + } } } }, - "required": true - }, - "parameters": [], - "responses": { - "204": { - "description": "Headers update was successful." - }, "400": { "description": "Invalid request.", "content": { @@ -7272,8 +7273,18 @@ } } }, + "404": { + "description": "No translations found for the requested locale.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "500": { - "description": "Unexpected error", + "description": "Unexpected error.", "content": { "application/json": { "schema": { @@ -7285,19 +7296,38 @@ } } }, - "/api/rest/2.0/metadata/update-obj-id": { + "/api/rest/2.0/localizations/manual-translation/import": { "post": { - "operationId": "updateMetadataObjId", - "description": "\nUpdate object IDs for given metadata objects.
Beta Version: 10.8.0.cl or later\n\n## Prerequisites\n- **Privileges Required:**\n - `DATAMANAGEMENT` (Can manage data) or `ADMINISTRATION` (Can administer ThoughtSpot).\n- **Additional Privileges (if RBAC is enabled):**\n - `ORG_ADMINISTRATION` (Can manage orgs).\n\n---\n\n## Usage Guidelines\n\n### Parameters\n\n1. **metadata** \n - **Description:** List of metadata objects to update their object IDs.\n - **Usage:**\n - Use either `current_obj_id` alone OR use `metadata_identifier` with `type` (when needed).\n - When using `metadata_identifier`, the `type` field is required if using a name instead of a GUID.\n - The `new_obj_id` field is always required.\n\n---\n\n## Note\nThis API is specifically designed for updating object IDs of metadata objects. It internally uses the header update mechanism to perform the changes.\n\n## Best Practices\n\n1. **Backup Before Update:** \n Always export metadata as a backup before initiating the update process.\n\n2. **Validation:**\n - When using `current_obj_id`, ensure it matches the existing object ID exactly.\n - When using `metadata_identifier` with a name, ensure the `type` is specified correctly.\n - Verify that the `new_obj_id` follows your naming conventions and is unique within your system.\n\n---\n\n## Examples\n\n### Using current_obj_id\n```json\n{\n \"metadata\": [\n {\n \"current_obj_id\": \"existing_object_id\",\n \"new_obj_id\": \"new_object_id\"\n }\n ]\n}\n```\n\n### Using metadata_identifier with GUID\n```json\n{\n \"metadata\": [\n {\n \"metadata_identifier\": \"01234567-89ab-cdef-0123-456789abcdef\",\n \"new_obj_id\": \"new_object_id\"\n }\n ]\n}\n```\n\n### Using metadata_identifier with name and type\n```json\n{\n \"metadata\": [\n {\n \"metadata_identifier\": \"My Answer\",\n \"type\": \"ANSWER\",\n \"new_obj_id\": \"new_object_id\"\n }\n ]\n}\n```\n\n### Multiple objects update\n```json\n{\n \"metadata\": [\n {\n \"current_obj_id\": \"existing_object_id_1\",\n \"new_obj_id\": \"new_object_id_1\"\n },\n {\n \"metadata_identifier\": \"My Worksheet\",\n \"type\": \"LOGICAL_TABLE\",\n \"new_obj_id\": \"new_object_id_2\"\n }\n ]\n}\n```\n\n\n\n\n#### Endpoint URL\n", + "operationId": "importManualTranslations", + "description": "\nImport manual translations from a CSV file.
Version: 26.7.0.cl or later\n\nUploads a CSV file containing manual translations and upserts them into the database.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**), `ORG_ADMINISTRATION` (**Can administer Org**), or `APPLICATION_ADMINISTRATION` (**Can administer application**) privilege.\n\n#### Usage guidelines\n\n- The CSV file must have exactly three columns in this order: `content`, `locale`, `translated-content`.\n- Maximum file size: **30 MB**. Maximum rows: **10,000**.\n- Only `.csv` files are accepted.\n- The import performs an **upsert**: existing entries matched by `(org_id, locale, content)` are updated; new entries are inserted. Entries not in the upload are left untouched.\n- Set `scope` to `CLUSTER` to upload translations to the All-Org context. Cluster-level translations act as defaults for orgs that have no translations for a locale.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Metadata", - "10.8.0.cl" + "Manual Translation", + "26.7.0.cl" ], "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/UpdateMetadataObjIdRequest" + "type": "object", + "properties": { + "translations_file": { + "description": "CSV file containing translations. The file must have three columns:\n`content`, `locale`, `translated-content`. Max file size: 30 MB.\nMax rows: 10,000.", + "type": "string", + "format": "binary" + }, + "scope": { + "description": "Org scope for the import. `ORG` (default) targets the calling\nuser's current org. `CLUSTER` targets the All-Org context.", + "default": "ORG", + "type": "string", + "enum": [ + "ORG", + "CLUSTER" + ] + } + }, + "required": [ + "translations_file" + ] } } }, @@ -7306,10 +7336,10 @@ "parameters": [], "responses": { "204": { - "description": "Headers update was successful." + "description": "Successfully imported manual translations." }, "400": { - "description": "Invalid request.", + "description": "Operation failed", "content": { "application/json": { "schema": { @@ -7339,7 +7369,7 @@ } }, "500": { - "description": "Unexpected error", + "description": "Operation failed", "content": { "application/json": { "schema": { @@ -7351,19 +7381,19 @@ } } }, - "/api/rest/2.0/orgs/create": { + "/api/rest/2.0/metadata/worksheets/convert": { "post": { - "operationId": "createOrg", - "description": "\n Version: 9.0.0.cl or later\n\nCreates an Org object.\n\nTo use this API, the [Orgs](https://docs.thoughtspot.com/cloud/latest/orgs-overview) feature must be enabled in your cluster.\n\nRequires cluster administration (**Can administer Org**) privileges.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `ORG_ADMINISTRATION` (**Can manage Orgs**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "convertWorksheetToModel", + "description": "\nConvert worksheets to models
Version: 10.6.0.cl or later\n\n## Prerequisites\n- **Privileges Required:**\n - `DATAMANAGEMENT` (Can manage data) or `ADMINISTRATION` (Can administer ThoughtSpot).\n- **Additional Privileges (if RBAC is enabled):**\n - `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (Can manage data models).\n\n---\n\n## Usage Guidelines\n\n### Parameters\n\n1. **worksheet_ids** \n - **Description:** A comma-separated list of GUIDs (Globally Unique Identifiers) specifying the Worksheets to be converted. \n - **Usage:** \n - Used only when `convert_all` is set to `false`. \n - Leave empty or omit when `convert_all` is set to `true`.\n\n2. **exclude_worksheet_ids** \n - **Description:** A comma-separated list of GUIDs specifying Worksheets to be excluded from conversion. \n - **Usage:** \n - Useful when `convert_all` is set to `true` and specific Worksheets should not be converted.\n\n3. **convert_all** \n - **Description:** Sets the scope of conversion.\n - **Options:** \n - `true`: Converts all Worksheets in the system, except those specified in `exclude_worksheet_ids`. \n - `false`: Converts only the Worksheets listed in `worksheet_ids`.\n\n4. **apply_changes** \n - **Description:** Specifies whether to apply changes directly to ThoughtSpot or to generate a preview before applying any changes.Used for validation of conversion.\n - **Options:** \n - `true`: Applies conversion changes directly to ThoughtSpot.\n - `false`: Generates only a preview of the changes and does not apply any changes to ThoughtSpot\n\n---\n\n## Best Practices\n\n1. **Backup Before Conversion:** \n Always export metadata as a backup before initiating the conversion process\n\n2. **Partial Conversion for Testing:** \n Test the conversion process by setting `convert_all` to `false` and specifying a small number of `worksheet_ids`.\n\n3. **Verify Dependencies:** \n Check for dependent objects, such as Tables and Connections, to avoid invalid references.\n\n4. **Review Changes:** \n Use `apply_changes: false` to preview the impact of the conversion before applying changes.\n\n---\n\n## Examples\n\n### Convert Specific Worksheets\n```json\n{\n \"worksheet_ids\": [\"guid1\", \"guid2\", \"guid3\"],\n \"exclude_worksheet_ids\": [],\n \"convert_all\": false,\n \"apply_changes\": true\n}\n```\n\n### Convert All Accessible Worksheets\n```json\n{\n \"worksheet_ids\": [],\n \"exclude_worksheet_ids\": [],\n \"convert_all\": true,\n \"apply_changes\": true\n}\n```\n\n### Exclude Specific Worksheets While Converting All Accessible Worksheets\n```json\n{\n \"worksheet_ids\": [],\n \"exclude_worksheet_ids\": [\"abc\"],\n \"convert_all\": true,\n \"apply_changes\": true\n}\n```\n\n\n\n#### Endpoint URL\n", "tags": [ - "Orgs", - "9.0.0.cl" + "Metadata", + "10.6.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateOrgRequest" + "$ref": "#/components/schemas/ConvertWorksheetToModelRequest" } } }, @@ -7372,22 +7402,11 @@ "parameters": [], "responses": { "200": { - "description": "Organization successfully created.", + "description": "Conversion of worksheets to model done successfully.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/OrgResponse" - }, - "examples": { - "example_1": { - "value": { - "id": 1980035173, - "name": "test_org", - "status": "ACTIVE", - "description": "test_org", - "visibility": "SHOW" - } - } + "$ref": "#/components/schemas/ResponseWorksheetToModelConversion" } } } @@ -7435,28 +7454,35 @@ } } }, - "/api/rest/2.0/orgs/{org_identifier}/delete": { + "/api/rest/2.0/metadata/copyobject": { "post": { - "operationId": "deleteOrg", - "description": "\n Version: 9.0.0.cl or later\n\nDeletes an Org object from the ThoughtSpot system.\n\nRequires cluster administration (**Can administer Org**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `ORG_ADMINISTRATION` (**Can manage Orgs**) privilege is required.\n\nWhen you delete an Org, all its users and objects created in that Org context are removed. However, if the users in the deleted Org also exists in other Orgs, they are removed only from the deleted Org.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "copyObject", + "description": "\nMakes a copy of an Answer or Liveboard
Version: 10.3.0.cl or later\n\nCreates a copy of a metadata object.\n\nRequires at least view access to the metadata object being copied.\n\nUpon successful execution, the API creates a copy of the metadata object specified in the API request and returns the ID of the new object.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Orgs", - "9.0.0.cl" - ], - "parameters": [ - { - "in": "path", - "name": "org_identifier", - "required": true, - "schema": { - "type": "string" - }, - "description": "ID or name of the Org" - } + "Metadata", + "10.3.0.cl" ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CopyObjectRequest" + } + } + }, + "required": true + }, + "parameters": [], "responses": { - "204": { - "description": "Organization successfully deleted." + "200": { + "description": "Successfully created a copy of the object", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResponseCopyObject" + } + } + } }, "400": { "description": "Invalid request.", @@ -7488,6 +7514,16 @@ } } }, + "404": { + "description": "Object not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "500": { "description": "Unexpected error", "content": { @@ -7501,19 +7537,19 @@ } } }, - "/api/rest/2.0/orgs/search": { + "/api/rest/2.0/metadata/delete": { "post": { - "operationId": "searchOrgs", - "description": "\n Version: 9.0.0.cl or later\n\nGets a list of Orgs configured on the ThoughtSpot system. To get details of a specific Org, specify the Org ID or name. You can also pass parameters such as status, visibility, and user identifiers to get a specific list of Orgs.\n\nRequires cluster administration (**Can administer Org**) privileges.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `ORG_ADMINISTRATION` (**Can manage Orgs**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "deleteMetadata", + "description": "\n Version: 9.0.0.cl or later\n\nRemoves the specified metadata object from the ThoughtSpot system.\n\nRequires edit access to the metadata object. \n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Orgs", + "Metadata", "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SearchOrgsRequest" + "$ref": "#/components/schemas/DeleteMetadataRequest" } } }, @@ -7521,38 +7557,8 @@ }, "parameters": [], "responses": { - "200": { - "description": "Organization search result.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/OrgResponse" - } - }, - "examples": { - "example_1": { - "value": [ - { - "id": 0, - "name": "Primary", - "status": "ACTIVE", - "description": "Primary Org", - "visibility": "SHOW" - }, - { - "id": 583464508, - "name": "test_org", - "status": "ACTIVE", - "description": "test_org", - "visibility": "SHOW" - } - ] - } - } - } - } + "204": { + "description": "Metadata objects successfully deleted." }, "400": { "description": "Invalid request.", @@ -7597,38 +7603,38 @@ } } }, - "/api/rest/2.0/orgs/{org_identifier}/update": { + "/api/rest/2.0/metadata/tml/export": { "post": { - "operationId": "updateOrg", - "description": "\n Version: 9.0.0.cl or later\n\nUpdates an Org object. You can modify Org properties such as name, description, and user associations.\n\nRequires cluster administration (**Can administer Org**) privileges.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `ORG_ADMINISTRATION` (**Can manage Orgs**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "exportMetadataTML", + "description": "\n Version: 9.0.0.cl or later\n\nExports the [TML](https://docs.thoughtspot.com/cloud/latest/tml) representation of metadata objects in JSON or YAML format.\n\nRequires `DATADOWNLOADING` (**Can download Data**) and at least view access to the metadata object.\n\n#### Usage guidelines\n\n* You can export one or several objects by passing metadata object GUIDs in the `metadata` array.\n* When exporting TML content for a Liveboard or Answer object, you can set `export_associated` to `true` to retrieve TML content for underlying Worksheets, Tables, or Views, including the GUID of each object within the headers. When `export_associated` is set to `true`, consider retrieving one metadata object at a time.\n* Set `export_fqns` to `true` to add FQNs of the referenced objects in the TML content. For example, if you send an API request to retrieve TML for a Liveboard and its associated objects, the API returns the TML content with FQNs of the referenced Worksheet. Exporting TML with FQNs is useful if ThoughtSpot has multiple objects with the same name and you want to eliminate ambiguity when importing TML files into ThoughtSpot. It eliminates the need for adding FQNs of the referenced objects manually during the import operation.\n* To export only the TML of feedbacks associated with an object, set the GUID of the object as `identifier`, and set the `type` as `FEEDBACK` in the `metadata` array.\n* To export the TML of an object along with the feedbacks associated with it, set the GUID of the object as `identifier`, set the `type` as `LOGIAL_TABLE` in the `metadata` array, and set `export_with_associated_feedbacks` in `export_options` to true.\n\nFor more information, see [TML Documentation](https://developers.thoughtspot.com/docs/tml#_export_a_tml).\n\nFor more information on feedbacks, see [Feedback Documentation](https://docs.thoughtspot.com/cloud/latest/sage-feedback).\n\n\n\n#### Endpoint URL\n", "tags": [ - "Orgs", + "Metadata", "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateOrgRequest" + "$ref": "#/components/schemas/ExportMetadataTMLRequest" } } }, "required": true }, - "parameters": [ - { - "in": "path", - "name": "org_identifier", - "required": true, - "schema": { - "type": "string" - }, - "description": "ID or name of the Org" - } - ], + "parameters": [], "responses": { - "204": { - "description": "Organization successfully updated." + "200": { + "description": "Export TMLs of specified metadata objects is successful.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object" + } + } + } + } }, "400": { "description": "Invalid request.", @@ -7673,19 +7679,19 @@ } } }, - "/api/rest/2.0/report/answer": { + "/api/rest/2.0/metadata/tml/export/batch": { "post": { - "operationId": "exportAnswerReport", - "description": "\n Version: 9.0.0.cl or later\n\nExports an Answer in the given file format. You can download the Answer data as a PDF, PNG, CSV, or XLSX file.\n\nRequires at least view access to the Answer.\n\n#### Usage guidelines\n\nIn the request body, specify the GUID or name of the Answer and set `file_format`. The default file format is CSV.\n\nUse the `type` parameter to specify whether the Answer being exported is a saved Answer (`SAVED`) or a pinned Answer on a Liveboard (`PINNED`). Defaults to `SAVED`. When using `PINNED`, the `metadata_identifier` must be the container id.\n\n**NOTE**:\n* The downloadable file returned in API response file is extensionless. Please rename the downloaded file by typing in the relevant extension.\n* HTML rendering is not supported for PDF exports of Answers with tables.\n\nOptionally, you can define [runtime overrides](https://developers.thoughtspot.com/docs/fetch-data-and-report-apis#_runtime_overrides) to apply to the Answer data. \n\n\n\n#### Endpoint URL\n", + "operationId": "exportMetadataTMLBatched", + "description": "\n Version: 10.1.0.cl or later\n\nExports the [TML](https://docs.thoughtspot.com/cloud/latest/tml) representation of metadata objects in JSON or YAML format.\n\n### **Permissions Required**\n\nRequires `DATAMANAGEMENT` (**Can manage data**) and `USERMANAGEMENT` (**Can manage users**) privileges.\n\n#### **Usage Guidelines**\n\nThis API is only applicable for `USER`, `GROUP`, and `ROLES` metadata types.\n\n- `batch_offset` Indicates the starting position within the complete dataset from which the API should begin returning objects. Useful for paginating results efficiently.\n- `batch_size` Specifies the number of objects or items to retrieve in a single request. Helps control response size for better performance.\n- `edoc_format` Defines the format of the TML content. The exported metadata can be in JSON or YAML format.\n- `export_dependent` Specifies whether to include dependent metadata objects in the export. Ensures related objects are also retrieved if needed.\n- `all_orgs_override` Indicates whether the export operation applies across all organizations. Useful for multi-tenant environments where cross-org exports are required.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Reports", - "9.0.0.cl" + "Metadata", + "10.1.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ExportAnswerReportRequest" + "$ref": "#/components/schemas/ExportMetadataTMLBatchedRequest" } } }, @@ -7694,9 +7700,13 @@ "parameters": [], "responses": { "200": { - "description": "Export report file of specified metadata object is successful.", + "description": "Export TMLs of specified metadata objects is successful.", "content": { - "application/octet-stream": {} + "application/json": { + "schema": { + "type": "object" + } + } } }, "400": { @@ -7742,19 +7752,19 @@ } } }, - "/api/rest/2.0/report/liveboard": { + "/api/rest/2.0/metadata/answer/sql": { "post": { - "operationId": "exportLiveboardReport", - "description": "\n Version: 9.0.0.cl or later\n\nExports a Liveboard and its visualizations in PDF, PNG, CSV, or XLSX file format.\nThe default `file_format` is CSV.\n\nRequires at least view access to the Liveboard.\n\n#### Usage guidelines\n\nIn the request body, specify the GUID or name of the Liveboard. To generate a Liveboard report with specific visualizations, add GUIDs or names of the visualizations.\n\n**NOTE**: \n\n* The downloadable file returned in API response file is extensionless. Please rename the downloaded file by typing in the relevant extension.\n\n* Optionally, you can define [runtime overrides](https://developers.thoughtspot.com/docs/fetch-data-and-report-apis#_runtime_overrides) to apply to the Answer data.\n\n* To include unsaved changes in the report, pass the `transient_pinboard_content` script generated from the `getExportRequestForCurrentPinboard` method in the Visual Embed SDK. Upon successful execution, the API returns the report with unsaved changes, including ad hoc changes to visualizations. For more information, see [Liveboard Report API](https://developers.thoughtspot.com/docs/fetch-data-and-report-apis#_liveboard_report_api). \n\n* Starting with ThoughtSpot Cloud 10.9.0.cl release, the Liveboard can be exported in the PNG format in the resolution of your choice. To enable this on your instance, contact ThoughtSpot support. When this feature is enabled, the options `include_cover_page`,`include_filter_page` within the `png_options` will not be available for PNG exports.\n\n* Starting with the ThoughtSpot Cloud 26.2.0.cl release,\n\n * Liveboards can be exported in CSV format. \n * All visualizations within a Liveboard can be exported as individual CSV files. \n * When exporting multiple visualizations or the entire Liveboard, the system returns the report as a compressed ZIP file containing the separate CSV files for each visualization.\n\n * Liveboards can also be exported in XLSX format. \n * All selected visualizations are consolidated into a single Excel workbook (.xlsx), with each visualization placed in its own worksheet (tab). \n * XLSX exports are limited to a maximum of 255 worksheets (tabs) per workbook.\n\n\n\n#### Endpoint URL\n", + "operationId": "fetchAnswerSqlQuery", + "description": "\n Version: 9.0.0.cl or later\n\nFetches the underlying SQL query data for an Answer object.\n\nRequires at least view access to the Answer object.\n\nUpon successful execution, the API returns the SQL queries for the specified object as shown in this example:\n```\n{\n \"metadata_id\":\"8fbe44a8-46ad-4b16-8d39-184b2fada490\",\n \"metadata_name\":\"Total sales\",\n \"metadata_type\":\"ANSWER\",\n \"sql_queries\":[\n {\n \"metadata_id\":\"8fbe44a8-46ad-4b16-8d39-184b2fada490\",\n \"metadata_name\":\"Total sales -test\",\n \"sql_query\":\"SELECT \\n \\\"ta_1\\\".\\\"REGION\\\" \\\"ca_1\\\", \\n \\\"ta_2\\\".\\\"PRODUCTNAME\\\" \\\"ca_2\\\", \\n \\\"ta_1\\\".\\\"STORENAME\\\" \\\"ca_3\\\", \\n CASE\\n WHEN sum(\\\"ta_3\\\".\\\"SALES\\\") IS NOT NULL THEN sum(\\\"ta_3\\\".\\\"SALES\\\")\\n ELSE 0\\n END \\\"ca_4\\\", \\n CASE\\n WHEN sum(\\\"ta_3\\\".\\\"QUANTITYPURCHASED\\\") IS NOT NULL THEN sum(\\\"ta_3\\\".\\\"QUANTITYPURCHASED\\\")\\n ELSE 0\\n END \\\"ca_5\\\"\\nFROM \\\"RETAILAPPAREL\\\".\\\"PUBLIC\\\".\\\"FACT_RETAPP_SALES\\\" \\\"ta_3\\\"\\n JOIN \\\"RETAILAPPAREL\\\".\\\"PUBLIC\\\".\\\"DIM_RETAPP_STORES\\\" \\\"ta_1\\\"\\n ON \\\"ta_3\\\".\\\"STOREID\\\" = \\\"ta_1\\\".\\\"STOREID\\\"\\n JOIN \\\"RETAILAPPAREL\\\".\\\"PUBLIC\\\".\\\"DIM_RETAPP_PRODUCTS\\\" \\\"ta_2\\\"\\n ON \\\"ta_3\\\".\\\"PRODUCTID\\\" = \\\"ta_2\\\".\\\"PRODUCTID\\\"\\nGROUP BY \\n \\\"ca_1\\\", \\n \\\"ca_2\\\", \\n \\\"ca_3\\\"\\n\"\n }\n ]\n}\n```\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Reports", + "Metadata", "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ExportLiveboardReportRequest" + "$ref": "#/components/schemas/FetchAnswerSqlQueryRequest" } } }, @@ -7763,9 +7773,13 @@ "parameters": [], "responses": { "200": { - "description": "Export report file of specified metadata object is successful.", + "description": "Fetching SQL query of specified metadata object is successful.", "content": { - "application/octet-stream": {} + "application/json": { + "schema": { + "$ref": "#/components/schemas/SqlQueryResponse" + } + } } }, "400": { @@ -7811,19 +7825,19 @@ } } }, - "/api/rest/2.0/roles/create": { + "/api/rest/2.0/metadata/tml/async/status": { "post": { - "operationId": "createRole", - "description": "\n Version: 9.5.0.cl or later\n\nCreates a Role object in ThoughtSpot.\n\nAvailable only if [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance. To create a Role, the `ROLE_ADMINISTRATION` (**Can manage roles**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "fetchAsyncImportTaskStatus", + "description": "\n Version: 10.4.0.cl or later\n\nGets information about the status of the TML async import task scheduled using the `/api/rest/2.0/metadata/tml/async/import` API call.\n\nTo fetch the task details, specify the ID of the TML async import task. \n\nRequires access to the task ID. The API allows users who initiated the asynchronous TML import via `/api/rest/2.0/metadata/tml/async/import` to view the status of their tasks. Users with administration privilege can view the status of all import tasks initiated by the users in their Org.\n\n#### Usage guidelines\n\nSee [TML API Documentation](https://developers.thoughtspot.com/docs/tml#_fetch_status_of_the_tml_import_task) for usage guidelines.\n\n\n\n#### Endpoint URL\n", "tags": [ - "Roles", - "9.5.0.cl" + "Metadata", + "10.4.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateRoleRequest" + "$ref": "#/components/schemas/FetchAsyncImportTaskStatusRequest" } } }, @@ -7832,17 +7846,17 @@ "parameters": [], "responses": { "200": { - "description": "Role successfully created.", + "description": "Async TML Import Task statuses fetched successfully.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RoleResponse" + "$ref": "#/components/schemas/GetAsyncImportStatusResponse" } } } }, "400": { - "description": "Invalid parameters.", + "description": "Invalid request.", "content": { "application/json": { "schema": { @@ -7872,7 +7886,7 @@ } }, "500": { - "description": "Internal error", + "description": "Unexpected error", "content": { "application/json": { "schema": { @@ -7884,31 +7898,38 @@ } } }, - "/api/rest/2.0/roles/{role_identifier}/delete": { + "/api/rest/2.0/metadata/liveboard/sql": { "post": { - "operationId": "deleteRole", - "description": "\n Version: 9.5.0.cl or later\n\nDeletes a Role object from the ThoughtSpot system.\n\nAvailable only if [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance. To delete a Role, the `ROLE_ADMINISTRATION` (**Can manage roles**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "fetchLiveboardSqlQuery", + "description": "\n Version: 9.0.0.cl or later\n\nFetches the underlying SQL query data for a Liveboard object and its visualizations.\n\nRequires at least view access to the Liveboard object.\n\nTo get SQL query data for a Liveboard, specify the GUID of the Liveboard. Optionally, you can add an array of visualization GUIDs to retrieve the SQL query data for visualizations in the Liveboard.\n\nUpon successful execution, the API returns the SQL queries for the specified object as shown in this example:\n```\n{\n \"metadata_id\": \"fa68ae91-7588-4136-bacd-d71fb12dda69\",\n \"metadata_name\": \"Total Sales\",\n \"metadata_type\": \"LIVEBOARD\",\n \"sql_queries\": [\n {\n \"metadata_id\": \"b3b6d2b9-089a-490c-8e16-b144650b7843\",\n \"metadata_name\": \"Total quantity purchased, Total sales by region\",\n \"sql_query\": \"SELECT \\n \\\"ta_1\\\".\\\"REGION\\\" \\\"ca_1\\\", \\n CASE\\n WHEN sum(\\\"ta_2\\\".\\\"QUANTITYPURCHASED\\\") IS NOT NULL THEN sum(\\\"ta_2\\\".\\\"QUANTITYPURCHASED\\\")\\n ELSE 0\\n END \\\"ca_2\\\", \\n CASE\\n WHEN sum(\\\"ta_2\\\".\\\"SALES\\\") IS NOT NULL THEN sum(\\\"ta_2\\\".\\\"SALES\\\")\\n ELSE 0\\n END \\\"ca_3\\\"\\nFROM \\\"RETAILAPPAREL\\\".\\\"PUBLIC\\\".\\\"FACT_RETAPP_SALES\\\" \\\"ta_2\\\"\\n JOIN \\\"RETAILAPPAREL\\\".\\\"PUBLIC\\\".\\\"DIM_RETAPP_STORES\\\" \\\"ta_1\\\"\\n ON \\\"ta_2\\\".\\\"STOREID\\\" = \\\"ta_1\\\".\\\"STOREID\\\"\\nGROUP BY \\\"ca_1\\\"\"\n }\n ]\n}\n```\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Roles", - "9.5.0.cl" - ], - "parameters": [ - { - "in": "path", - "name": "role_identifier", - "required": true, - "schema": { - "type": "string" - }, - "description": "Unique ID or name of the Role. ReadOnly roles cannot be deleted." - } + "Metadata", + "9.0.0.cl" ], - "responses": { - "204": { - "description": "Role successfully deleted." + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FetchLiveboardSqlQueryRequest" + } + } }, - "400": { - "description": "Invalid request.", + "required": true + }, + "parameters": [], + "responses": { + "200": { + "description": "Fetching SQL query of specified metadata object is successful.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SqlQueryResponse" + } + } + } + }, + "400": { + "description": "Invalid request.", "content": { "application/json": { "schema": { @@ -7938,7 +7959,7 @@ } }, "500": { - "description": "Internal error", + "description": "Unexpected error", "content": { "application/json": { "schema": { @@ -7950,19 +7971,19 @@ } } }, - "/api/rest/2.0/roles/search": { + "/api/rest/2.0/metadata/tml/import": { "post": { - "operationId": "searchRoles", - "description": "\n Version: 9.5.0.cl or later\n\nGets a list of Role objects from the ThoughtSpot system.\n\nAvailable if [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance. To search for Roles, the `ROLE_ADMINISTRATION` (**Can manage roles**) privilege is required.\n\nTo get details of a specific Role object, specify the GUID or name. You can also filter the API response based on user group and Org identifiers, privileges assigned to the Role, and deprecation status.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "importMetadataTML", + "description": "\n Version: 9.0.0.cl or later\n\nImports [TML](https://docs.thoughtspot.com/cloud/latest/tml) files into ThoughtSpot.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtsSpot**) privilege.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the following Data control privileges may be required:\n- `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**)\n- `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**)\n\n#### Usage guidelines\n\n* Import all related objects in a single TML Import API call. For example, Tables that use the same Connection object and Worksheets connected to these Tables.\n* Include the `fqn` property to distinguish objects that have the same name.\n For example, if you have multiple Connections or Worksheets with the same name on ThoughtSpot and the Connection or Worksheet referenced in your TML file does not have a unique name to distinguish, it may result in invalid object references.\n Adding `fqn` helps ThoughtSpot differentiate a Table from another with the same name.\n We recommend [exporting TML with FQNs](#/http/api-endpoints/metadata/export-metadata-tml) and using these during the import operation.\n* You can upload multiple TML files at a time.\n If you import a Worksheet along with Liveboards, Answers, and other dependent objects in a single API call, the imported objects will be immediately available for use.\n When you import only a Worksheet object, it may take some time for the Worksheet to become available in the ThoughtSpot system. Please wait for a few minutes, and then proceed to create an Answer and Liveboard from the newly imported Worksheet.\n\nFor more information, see [TML Documentation](https://developers.thoughtspot.com/docs/tml#_import_a_tml).\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Roles", - "9.5.0.cl" + "Metadata", + "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SearchRolesRequest" + "$ref": "#/components/schemas/ImportMetadataTMLRequest" } } }, @@ -7971,13 +7992,13 @@ "parameters": [], "responses": { "200": { - "description": "Roles search result.", + "description": "Import metadata objects using specified TMLs is successful.", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/SearchRoleResponse" + "type": "object" } } } @@ -8014,7 +8035,7 @@ } }, "500": { - "description": "Internal error", + "description": "Unexpected error", "content": { "application/json": { "schema": { @@ -8026,42 +8047,32 @@ } } }, - "/api/rest/2.0/roles/{role_identifier}/update": { + "/api/rest/2.0/metadata/tml/async/import": { "post": { - "operationId": "updateRole", - "description": "\n Version: 9.5.0.cl or later\n\nUpdates the properties of a Role object.\n\nAvailable only if [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance. To update a Role, the `ROLE_ADMINISTRATION` (**Can manage roles**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "importMetadataTMLAsync", + "description": "\n Version: 10.4.0.cl or later\n\nSchedules a task to import [TML](https://docs.thoughtspot.com/cloud/latest/tml) files into ThoughtSpot. You can use this API endpoint to process TML objects asynchronously when importing TMLs of large and complex metadata objects into ThoughtSpot. Unlike the synchronous import TML operation, the API processes TML data in the background and returns a task ID, which can be used to check the status of the import task via `/api/rest/2.0/metadata/tml/async/status` API endpoint.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) or `ADMINISTRATION` (**Can administer ThoughtsSpot**) privilege, and edit access to the TML objects.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the following Data control privileges may be required:\n- `CAN_CREATE_OR_EDIT_CONNECTIONS` (**Can create/edit Connections**)\n- `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**)\n\n#### Usage guidelines\n\nSee [Async TML API Documentation](https://developers.thoughtspot.com/docs/tml#_import_tml_objects_asynchronously) for usage guidelines.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Roles", - "9.5.0.cl" + "Metadata", + "10.4.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateRoleRequest" + "$ref": "#/components/schemas/ImportMetadataTMLAsyncRequest" } } }, "required": true }, - "parameters": [ - { - "in": "path", - "name": "role_identifier", - "required": true, - "schema": { - "type": "string" - }, - "description": "Unique ID or name of the Role." - } - ], + "parameters": [], "responses": { "200": { - "description": "Role successfully updated.", + "description": "Async TML Import Task submitted successfully.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RoleResponse" + "$ref": "#/components/schemas/ImportEPackAsyncTaskStatus" } } } @@ -8109,19 +8120,20 @@ } } }, - "/api/rest/2.0/schedules/create": { + "/api/rest/2.0/metadata/parameterize": { "post": { - "operationId": "createSchedule", - "description": "\nCreate schedule.
Version: 9.4.0.cl or later\n\nCreates a Liveboard schedule job.\n\nRequires at least edit access to Liveboards. To create a schedule on behalf of another user, you need `ADMINISTRATION` (**Can administer Org**) or `JOBSCHEDULING` (**Can schedule for others**) privilege and edit access to the Liveboard.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `JOBSCHEDULING` (**Can schedule for others**) privilege is required.\n\n#### Usage guidelines\n\n* The description text is mandatory. The description text appears as **Description: ** in the Liveboard schedule email notifications.\n* For Liveboards with both charts and tables, schedule creation is only supported in PDF and XLS formats. Schedules created in CSV formats for such Liveboards will fail to run. If `PDF` is set as the `file_format`, enable `pdf_options` to get the correct attachment. Not doing so may cause the attachment to be rendered empty.\n* To include only specific visualizations, specify the visualization GUIDs in the `visualization_identifiers` array.\n* You can schedule a Liveboard job to run periodically by setting frequency parameters. You can set the schedule to run daily, weekly, monthly or every n minutes or hours. The scheduled job can also be configured to run at a specific time of the day or on specific days of the week or month. Please ensure that when setting the schedule frequency for _minute of the object_, only values that are multiples of 5 are included.\n* If the `frequency` parameters are defined, you can set the time zone to a value that matches your server's time zone. For example, `US/Central`, `Etc/UTC`, `CET`. The default time zone is `America/Los_Angeles`.\n\nFor more information about Liveboard jobs, see [ThoughtSpot Product Documentation](https://docs.thoughtspot.com/cloud/latest/liveboard-schedule).\n\n\n\n#### Endpoint URL\n", + "operationId": "parameterizeMetadata", + "description": "\nParameterize fields in metadata objects.
Beta Version: 10.9.0.cl or later\n\n**Note:** This API endpoint is deprecated and will be removed from ThoughtSpot in a future release. Use [POST /api/rest/2.0/metadata/parameterize-fields](/api/rest/2.0/metadata/parameterize-fields) instead.\n\nAllows parameterizing fields in metadata objects in ThoughtSpot.\n\nRequires appropriate permissions to modify the metadata object.\n\nThe API endpoint allows parameterizing the following types of metadata objects:\n* Logical Tables\n* Connections\n* Connection Configs\n\nFor a Logical Table the field type must be `ATTRIBUTE` and field name can be one of:\n* databaseName\n* schemaName\n* tableName\n\nFor a Connection or Connection Config, the field type is always `CONNECTION_PROPERTY`. In this case, field_name specifies the exact property of the Connection or Connection Config that needs to be parameterized.\n\nFor Connection Config, the only supported field name is:\n* impersonate_user\n\n\n\n\n#### Endpoint URL\n", + "deprecated": true, "tags": [ - "Schedules", - "9.4.0.cl" + "Metadata", + "10.9.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateScheduleRequest" + "$ref": "#/components/schemas/ParameterizeMetadataRequest" } } }, @@ -8129,15 +8141,8 @@ }, "parameters": [], "responses": { - "200": { - "description": "Schedule successfully created.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ResponseSchedule" - } - } - } + "204": { + "description": "Parameterize successful." }, "400": { "description": "Invalid request.", @@ -8182,28 +8187,28 @@ } } }, - "/api/rest/2.0/schedules/{schedule_identifier}/delete": { + "/api/rest/2.0/metadata/parameterize-fields": { "post": { - "operationId": "deleteSchedule", - "description": "\nDeletes a scheduled job.
Version: 9.4.0.cl or later\n\nDeletes a scheduled Liveboard job.\n\nRequires at least edit access to Liveboard or `ADMINISTRATION` (**Can administer Org**) privilege. \nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `JOBSCHEDULING` (**Can schedule for others**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "parameterizeMetadataFields", + "description": "\nParameterize multiple fields of metadata objects. For example [schemaName, databaseName] for LOGICAL_TABLE.
Version: 26.5.0.cl or later\n\nAllows parameterizing multiple fields of metadata objects in ThoughtSpot. For example, you can parameterize [schemaName, databaseName] for LOGICAL_TABLE.\n\nRequires appropriate permissions to modify the metadata object.\n\nThe API endpoint allows parameterizing the following types of metadata objects:\n* Logical Tables\n* Connections\n* Connection Configs\n\nFor a Logical Table, the field type must be `ATTRIBUTE` and field names can include:\n* databaseName\n* schemaName\n* tableName\n\nFor a Connection or Connection Config, the field type is always `CONNECTION_PROPERTY`. In this case, field_names specifies the exact properties of the Connection or Connection Config that need to be parameterized.\n\nFor Connection Config, supported field names include:\n* impersonate_user\n\nYou can parameterize multiple fields at once by providing an array of field names.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Schedules", - "9.4.0.cl" - ], - "parameters": [ - { - "in": "path", - "name": "schedule_identifier", - "required": true, - "schema": { - "type": "string" - }, - "description": "Unique ID or name of the scheduled job." - } + "Metadata", + "26.5.0.cl" ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ParameterizeMetadataFieldsRequest" + } + } + }, + "required": true + }, + "parameters": [], "responses": { "204": { - "description": "Schedule successfully deleted." + "description": "Parameterize successful." }, "400": { "description": "Invalid request.", @@ -8248,19 +8253,19 @@ } } }, - "/api/rest/2.0/schedules/search": { + "/api/rest/2.0/metadata/search": { "post": { - "operationId": "searchSchedules", - "description": "\nSearch Schedules
Version: 9.4.0.cl or later\n\nGets a list of scheduled jobs configured for a Liveboard.\n\nTo get details of a specific scheduled job, specify the name or GUID of the scheduled job.\n\nRequires at least view access to Liveboards.\n\n**NOTE**: When filtering schedules by parameters other than `metadata`, set `record_size` to `-1` and `record_offset` to `0` for accurate results.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "searchMetadata", + "description": "\n Version: 9.0.0.cl or later\n\nGets a list of metadata objects available on the ThoughtSpot system.\n\nThis API endpoint is available to all users who have view access to the object. Users with `ADMINISTRATION` (**Can administer ThoughtSpot**) privileges can view data for all metadata objects, including users and groups.\n\n#### Usage guidelines\n\n- To get all metadata objects, send the API request without any attributes.\n- To get metadata objects of a specific type, set the `type` attribute. For example, to fetch a Worksheet, set the type as `LOGICAL_TABLE`.\n- To filter metadata objects within type `LOGICAL_TABLE`, set the `subtypes` attribute. For example, to fetch a Worksheet, set the type as `LOGICAL_TABLE` & subtypes as `[WORKSHEET]`.\n- To get a specific metadata object, specify the GUID.\n- To customize your search and filter the API response, you can use several parameters.\n You can search for objects created or modified by specific users, by tags applied to the objects, or by using the include parameters like `include_auto_created_objects`, `include_dependent_objects`, `include_headers`, `include_incomplete_objects`, and so on.\n You can also define sorting options to sort the data retrieved in the API response.\n- To get discoverable objects when linientmodel is enabled you can use `include_discoverable_objects` as true else false. Default value is true.\n- For liveboard metadata type, to get the newer format, set the `liveboard_response_format` as V2. Default value is V1.\n- To retrieve only objects that are published, set the `include_only_published_objects` as true. Default value is false.\n\n**NOTE**: The following parameters support pagination of metadata records:\n\n- `tag_identifiers`\n- `type`\n- `subtypes`\n- `created_by_user_identifiers`\n- `modified_by_user_identifiers`\n- `owned_by_user_identifiers`\n- `exclude_objects`\n- `include_auto_created_objects`\n- `favorite_object_options`\n- `include_only_published_objects`\nIf you are using other parameters to search metadata, set `record_size` to `-1` and `record_offset` to `0`.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Schedules", - "9.4.0.cl" + "Metadata", + "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SearchSchedulesRequest" + "$ref": "#/components/schemas/SearchMetadataRequest" } } }, @@ -8269,13 +8274,13 @@ "parameters": [], "responses": { "200": { - "description": "Schedule search result.", + "description": "Metadata objects search result.", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/ResponseSchedule" + "$ref": "#/components/schemas/MetadataSearchResponse" } } } @@ -8324,38 +8329,28 @@ } } }, - "/api/rest/2.0/schedules/{schedule_identifier}/update": { + "/api/rest/2.0/metadata/unparameterize": { "post": { - "operationId": "updateSchedule", - "description": "\nUpdate schedule.
Version: 9.4.0.cl or later\n\nUpdates a scheduled Liveboard job.\n\nRequires at least edit access to Liveboards. To update a schedule on behalf of another user, you need `ADMINISTRATION` (**Can administer Org**) or `JOBSCHEDULING` (**Can schedule for others**) privilege and edit access to the Liveboard.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `JOBSCHEDULING` (**Can schedule for others**) privilege is required.\n\nThe API endpoint allows you to pause a scheduled job, change the status of a paused job. You can also edit the recipients list, frequency of the job, format of the file to send to the recipients in email notifications, PDF options, and time zone setting.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "unparameterizeMetadata", + "description": "\nRemove parameterization from fields in metadata objects.
Version: 26.5.0.cl or later\n\nAllows removing parameterization from fields in metadata objects in ThoughtSpot.\n\nRequires appropriate permissions to modify the metadata object.\n\nThe API endpoint allows unparameterizing the following types of metadata objects:\n* Logical Tables\n* Connections\n* Connection Configs\n\nFor a Logical Table the field type must be `ATTRIBUTE` and field name can be one of:\n* databaseName\n* schemaName\n* tableName\n\nFor a Connection or Connection Config, the field type is always `CONNECTION_PROPERTY`. In this case, field_name specifies the exact property of the Connection or Connection Config that needs to be unparameterized.\n\nFor Connection Config, the only supported field name is:\n* impersonate_user\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Schedules", - "9.4.0.cl" + "Metadata", + "26.5.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateScheduleRequest" + "$ref": "#/components/schemas/UnparameterizeMetadataRequest" } } }, "required": true }, - "parameters": [ - { - "in": "path", - "name": "schedule_identifier", - "required": true, - "schema": { - "type": "string" - }, - "description": "Unique ID or name of the schedule." - } - ], + "parameters": [], "responses": { "204": { - "description": "Schedule successfully updated." + "description": "Successfuly removed parameters." }, "400": { "description": "Invalid request.", @@ -8400,19 +8395,19 @@ } } }, - "/api/rest/2.0/security/metadata/assign": { + "/api/rest/2.0/metadata/headers/update": { "post": { - "operationId": "assignChangeAuthor", - "description": "\n Version: 9.0.0.cl or later\n\nTransfers the ownership of one or several objects from one user to another.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `USER_ADMINISTRATION` (**Can manage users**) privilege and edit access to the objects are required.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "updateMetadataHeader", + "description": "\nUpdate header attributes for a given list of header objects.
Beta Version: 10.6.0.cl or later\n\n## Prerequisites\n- **Privileges Required:**\n - `DATAMANAGEMENT` (Can manage data) or `ADMINISTRATION` (Can administer ThoughtSpot).\n- **Additional Privileges (if RBAC is enabled):**\n - `ORG_ADMINISTRATION` (Can manage orgs).\n\n---\n\n## Usage Guidelines\n\n### Parameters\n\n1. **headers_update** \n - **Description:** List of header objects with their attributes to be updated. Each object contains a list of attributes to be updated in the header.\n - **Usage:**\n - You must provide either `identifier` or `obj_identifier`, but not both. Both fields cannot be empty.\n - When `org_identifier` is set to `-1`, only the `identifier` value is accepted; `obj_identifier` is not allowed.\n\n2. **org_identifier** \n - **Description:** GUID (Globally Unique Identifier) or name of the organization. \n - **Usage:**\n - Leaving this field empty assumes that the changes should be applied to the current organization \n - Provide `org_guid` or `org_name` to uniquely identify the organization where changes need to be applied. .\n - Provide `-1` if changes have to be applied across all the org.\n\n---\n\n## Note\nCurrently, this API is enabled only for updating the `obj_identifier` attribute. Only `text` will be allowed in attribute's value.\n\n## Best Practices\n\n1. **Backup Before Conversion:** \n Always export metadata as a backup before initiating the update process\n\n---\n\n## Examples\n\n### Only `identifier` is given \n```json\n{\n \"headers_update\":\n [\n {\n \"identifier\": \"guid_1\",\n \"obj_identifier\": \"\",\n \"type\": \"LOGICAL_COLUMN\",\n \"attributes\":\n [\n {\n \"name\": \"obj_id\",\n \"value\": \"custom_object_id\"\n }\n ]\n }\n ],\n \"org_identifier\": \"orgGuid\"\n}\n```\n\n### Only `obj_identifier` is given\n```json\n{\n \"headers_update\":\n [\n {\n \"obj_identifier\": \"custom_object_id\",\n \"type\": \"ANSWER\",\n \"attributes\":\n [\n {\n \"name\": \"obj_id\",\n \"value\": \"custom_object_id\"\n }\n ]\n }\n ],\n \"org_identifier\": \"orgName\"\n}\n```\n\n### Executing update for all org `-1`\n```json\n{\n \"headers_update\":\n [\n {\n \"identifier\": \"guid_1\",\n \"type\": \"ANSWER\",\n \"attributes\":\n [\n {\n \"name\": \"obj_id\",\n \"value\": \"custom_object_id\"\n }\n ]\n }\n ],\n \"org_identifier\": -1\n}\n```\n\n### Optional `type` is not provided\n```json\n{\n \"headers_update\":\n [\n {\n \"identifier\": \"guid_1\",\n \"attributes\":\n [\n {\n \"name\": \"obj_id\",\n \"value\": \"custom_object_id\"\n }\n ]\n }\n ],\n \"org_identifier\": -1\n}\n```\n\n\n\n#### Endpoint URL\n", "tags": [ - "Security", - "9.0.0.cl" + "Metadata", + "10.6.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AssignChangeAuthorRequest" + "$ref": "#/components/schemas/UpdateMetadataHeaderRequest" } } }, @@ -8421,7 +8416,7 @@ "parameters": [], "responses": { "204": { - "description": "Author assignment for given metadata objects is successful." + "description": "Headers update was successful." }, "400": { "description": "Invalid request.", @@ -8466,19 +8461,19 @@ } } }, - "/api/rest/2.0/security/column/rules/fetch": { + "/api/rest/2.0/metadata/update-obj-id": { "post": { - "operationId": "fetchColumnSecurityRules", - "description": "\nBeta Version: 10.12.0.cl or later\n\nFetches column security rules for specified tables.\n\nThis API endpoint retrieves column-level security rules configured for tables. It returns information about which columns are secured and which groups have access to those columns.\n\n#### Usage guidelines\n\n- Provide an array of table identifiers using either `identifier` (GUID or name) or `obj_identifier` (object ID)\n- At least one of `identifier` or `obj_identifier` must be provided for each table\n- The API returns column security rules for all specified tables\n- Users must have appropriate permissions to access security rules for the specified tables\n\n#### Required permissions\n\n- `ADMINISTRATION` - Can administer ThoughtSpot\n- `DATAMANAGEMENT` - Can manage data\n- `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` - Can manage worksheet views and tables\n\n#### Example request\n\n```json\n{\n \"tables\": [\n {\n \"identifier\": \"table-guid\",\n \"obj_identifier\": \"table-object-id\"\n }\n ]\n}\n```\n\n#### Response format\n\nThe API returns an array of `ColumnSecurityRuleResponse` objects wrapped in a `data` field. Each `ColumnSecurityRuleResponse` object contains:\n- Table information (GUID and object ID) \n- Array of column security rules with column details, group access, and source table information\n\n#### Example response\n\n```json\n{\n \"data\": [\n {\n \"guid\": \"table-guid\",\n \"objId\": \"table-object-id\",\n \"columnSecurityRules\": [\n {\n \"column\": {\n \"id\": \"col_123\",\n \"name\": \"Salary\"\n },\n \"groups\": [\n {\n \"id\": \"group_1\",\n \"name\": \"HR Department\"\n }\n ],\n \"sourceTableDetails\": {\n \"id\": \"source-table-guid\",\n \"name\": \"Employee_Data\"\n }\n }\n ]\n }\n ]\n}\n```\n\n\n\n#### Endpoint URL\n", + "operationId": "updateMetadataObjId", + "description": "\nUpdate object IDs for given metadata objects.
Beta Version: 10.8.0.cl or later\n\n## Prerequisites\n- **Privileges Required:**\n - `DATAMANAGEMENT` (Can manage data) or `ADMINISTRATION` (Can administer ThoughtSpot).\n- **Additional Privileges (if RBAC is enabled):**\n - `ORG_ADMINISTRATION` (Can manage orgs).\n\n---\n\n## Usage Guidelines\n\n### Parameters\n\n1. **metadata** \n - **Description:** List of metadata objects to update their object IDs.\n - **Usage:**\n - Use either `current_obj_id` alone OR use `metadata_identifier` with `type` (when needed).\n - When using `metadata_identifier`, the `type` field is required if using a name instead of a GUID.\n - The `new_obj_id` field is always required.\n\n---\n\n## Note\nThis API is specifically designed for updating object IDs of metadata objects. It internally uses the header update mechanism to perform the changes.\n\n## Best Practices\n\n1. **Backup Before Update:** \n Always export metadata as a backup before initiating the update process.\n\n2. **Validation:**\n - When using `current_obj_id`, ensure it matches the existing object ID exactly.\n - When using `metadata_identifier` with a name, ensure the `type` is specified correctly.\n - Verify that the `new_obj_id` follows your naming conventions and is unique within your system.\n\n---\n\n## Examples\n\n### Using current_obj_id\n```json\n{\n \"metadata\": [\n {\n \"current_obj_id\": \"existing_object_id\",\n \"new_obj_id\": \"new_object_id\"\n }\n ]\n}\n```\n\n### Using metadata_identifier with GUID\n```json\n{\n \"metadata\": [\n {\n \"metadata_identifier\": \"01234567-89ab-cdef-0123-456789abcdef\",\n \"new_obj_id\": \"new_object_id\"\n }\n ]\n}\n```\n\n### Using metadata_identifier with name and type\n```json\n{\n \"metadata\": [\n {\n \"metadata_identifier\": \"My Answer\",\n \"type\": \"ANSWER\",\n \"new_obj_id\": \"new_object_id\"\n }\n ]\n}\n```\n\n### Multiple objects update\n```json\n{\n \"metadata\": [\n {\n \"current_obj_id\": \"existing_object_id_1\",\n \"new_obj_id\": \"new_object_id_1\"\n },\n {\n \"metadata_identifier\": \"My Worksheet\",\n \"type\": \"LOGICAL_TABLE\",\n \"new_obj_id\": \"new_object_id_2\"\n }\n ]\n}\n```\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Security", - "10.12.0.cl" + "Metadata", + "10.8.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FetchColumnSecurityRulesRequest" + "$ref": "#/components/schemas/UpdateMetadataObjIdRequest" } } }, @@ -8486,21 +8481,11 @@ }, "parameters": [], "responses": { - "200": { - "description": "Successfully fetched column security rules", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ColumnSecurityRuleResponse" - } - } - } - } + "204": { + "description": "Headers update was successful." }, "400": { - "description": "Bad request - Table not found or invalid parameters", + "description": "Invalid request.", "content": { "application/json": { "schema": { @@ -8520,7 +8505,7 @@ } }, "403": { - "description": "Forbidden - User doesn't have permission to access security rules for this table", + "description": "Forbidden access.", "content": { "application/json": { "schema": { @@ -8530,7 +8515,7 @@ } }, "500": { - "description": "Internal server error", + "description": "Unexpected error", "content": { "application/json": { "schema": { @@ -8542,19 +8527,19 @@ } } }, - "/api/rest/2.0/security/metadata/fetch-object-privileges": { + "/api/rest/2.0/orgs/create": { "post": { - "operationId": "fetchObjectPrivileges", - "description": "\n Version: 26.3.0.cl or later\n\nThis API fetches the object privileges present for the given list of principals (user or group), on the given set of objects. It supports pagination, which can be enabled and configured using the request parameters. It provides users access to certain features based on privilege based access control.\n\n#### Usage guidelines\n\n- Specify the `type` (`USER` or `USER_GROUP`) and `identifier` (either GUID or name) of the principals for which you want to retrieve object privilege information in the `principals` array.\n- Specify the `type` (`LOGICAL_TABLE`) and `identifier` (either GUID or name) of the metadata objects for which you want to retrieve object privilege information in the `metadata` array. Only `LOGICAL_TABLE` metadata type is supported for now. It may be extended for other metadata types in future.\n- To control the offset from where principals have to be fetched, use `record_offset`. When `record_offset` is 0, information is fetched from the beginning.\n- To control the number of principals to be fetched, use `record_size`. Default `record_size` is 20.\n- Ensure `record_offset` for a subsequent request is one more than the value of `record_size` of the previous request.\n- Ensure using correct Authorization Bearer Token corresponding to specific user & org. \n\n#### Example request\n\n```json\n{\n \"principals\": [\n {\n \"type\": \"type-1\",\n \"identifier\": \"principal-guid-or-name-1\"\n },\n {\n \"type\": \"type-2\",\n \"identifier\": \"principal-guid-or-name-2\"\n }\n ],\n \"metadata\": [\n {\n \"type\": \"metadata-type-1\",\n \"identifier\": \"metadata-guid-or-name-1\"\n },\n {\n \"type\": \"metadata-type-2\",\n \"identifier\": \"metadata-guid-or-name-2\"\n }\n ],\n \"record_offset\": 0,\n \"record_size\": 20\n}\n```\n\n\n#### Response format\n\nThe API returns an array of `metadata_object_privileges` objects wrapped in JSON. Each `metadata_object_privileges` object contains:\n- Metadata information (GUID, name and type)\n- Array of `principal_object_privilege_info`.\n- Each `principal_object_privilege_info` contains:\n - Principal type. All principals of this type are listed as described below.\n - Array of `principal_object_privileges`.\n - Each `principal_object_privileges` contains:\n - Principal information (GUID, name, subtype)\n - List of applied object level privileges.\n\n#### Example response\n\n```json\n{\n \"metadata_object_privileges\": [\n {\n \"metadata_id\": \"metadata-guid-1\",\n \"metadata_name\": \"metadata-name-1\",\n \"metadata_type\": \"metadata-type-1\",\n \"principal_object_privilege_info\": [\n {\n \"principal_type\": \"principal-type-1\",\n \"principal_object_privileges\": [\n {\n \"principal_id\": \"principal-guid-1\",\n \"principal_name\": \"principal-name-1\",\n \"principal_sub_type\": \"principal-sub-type-1\",\n \"object_privileges\": \"[object-privilege-1, object-privilege-2]\"\n },\n {\n \"principal_id\": \"principal-guid-2\",\n \"principal_name\": \"principal-name-2\",\n \"principal_sub_type\": \"principal-sub-type-2\",\n \"object_privileges\": \"[object-privilege-1, object-privilege-2]\"\n }\n ]\n },\n {\n \"principal_type\": \"principal-type-2\",\n \"principal_object_privileges\": [\n {\n \"principal_id\": \"principal-guid-3\",\n \"principal_name\": \"principal-guid-4\",\n \"principal_sub_type\": \"principal-sub-type-4\",\n \"object_privileges\": \"[object-privilege-1]\"\n }\n ]\n }\n ]\n },\n {\n \"metadata_id\": \"metadata-guid-2\",\n \"metadata_name\": \"metadata-name-2\",\n \"metadata_type\": \"metadata-type-2\",\n \"principal_object_privilege_info\": [\n {\n \"principal_type\": \"principal-type-1\",\n \"principal_object_privileges\": [\n {\n \"principal_id\": \"principal-guid-1\",\n \"principal_name\": \"principal-name-1\",\n \"principal_sub_type\": \"principal-sub-type-1\",\n \"object_privileges\": \"[object-privilege-3, object-privilege-4]\"\n },\n {\n \"principal_id\": \"principal-guid-2\",\n \"principal_name\": \"principal-name-2\",\n \"principal_sub_type\": \"principal-sub-type-2\",\n \"object_privileges\": \"[object-privilege-4]\"\n }\n ]\n }\n ]\n }\n ]\n}\n```\n\n\n\n#### Endpoint URL\n", + "operationId": "createOrg", + "description": "\n Version: 9.0.0.cl or later\n\nCreates an Org object.\n\nTo use this API, the [Orgs](https://docs.thoughtspot.com/cloud/latest/orgs-overview) feature must be enabled in your cluster.\n\nRequires cluster administration (**Can administer Org**) privileges.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `ORG_ADMINISTRATION` (**Can manage Orgs**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Security", - "26.3.0.cl" + "Orgs", + "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FetchObjectPrivilegesRequest" + "$ref": "#/components/schemas/CreateOrgRequest" } } }, @@ -8563,11 +8548,22 @@ "parameters": [], "responses": { "200": { - "description": "Fetching defined object privileges of metadata objects is successful.", + "description": "Organization successfully created.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ObjectPrivilegesOfMetadataResponse" + "$ref": "#/components/schemas/OrgResponse" + }, + "examples": { + "example_1": { + "value": { + "id": 1980035173, + "name": "test_org", + "status": "ACTIVE", + "description": "test_org", + "visibility": "SHOW" + } + } } } } @@ -8615,71 +8611,28 @@ } } }, - "/api/rest/2.0/security/principals/fetch-permissions": { + "/api/rest/2.0/orgs/{org_identifier}/delete": { "post": { - "operationId": "fetchPermissionsOfPrincipals", - "description": "\n Version: 9.0.0.cl or later\n\nFetches object permission details for a given principal object such as a user and group.\n\nRequires view access to the metadata object. \n\n#### Usage guidelines\n\n* To get a list of all metadata objects that a user or group can access, specify the `type` and GUID or name of the principal.\n* To get permission details for a specific object, add the `type` and GUID or name of the metadata object to your API request.\n\nUpon successful execution, the API returns a list of metadata objects and permission details for each object. \n\n\n\n\n#### Endpoint URL\n", + "operationId": "deleteOrg", + "description": "\n Version: 9.0.0.cl or later\n\nDeletes an Org object from the ThoughtSpot system.\n\nRequires cluster administration (**Can administer Org**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `ORG_ADMINISTRATION` (**Can manage Orgs**) privilege is required.\n\nWhen you delete an Org, all its users and objects created in that Org context are removed. However, if the users in the deleted Org also exists in other Orgs, they are removed only from the deleted Org.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Security", + "Orgs", "9.0.0.cl" ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FetchPermissionsOfPrincipalsRequest" - } - } - }, - "required": true - }, - "parameters": [], - "responses": { - "200": { - "description": "Fetching permissions of principals is successful.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PermissionOfPrincipalsResponse" - }, - "examples": { - "example_1": { - "value": { - "principal_permission_details": [ - { - "principal_id": "7f5e7f87-09a1-487c-a1da-c4bb35e45270", - "principal_name": "test_user", - "principal_type": "USER", - "principal_sub_type": "LOCAL_USER", - "metadata_permission_info": [ - { - "metadata_type": "LIVEBOARD", - "metadata_permissions": [ - { - "metadata_id": "2ff57a24-cf90-485f-8b4b-45fc17474c6f", - "metadata_name": "Learn how to use ThoughtSpot", - "metadata_owner": { - "id": "2ff57a24-cf90-485f-8b4b-45fc17474c6f", - "name": "Learn how to use ThoughtSpot" - }, - "metadata_author": { - "id": "59481331-ee53-42be-a548-bd87be6ddd4a", - "name": "tsadmin" - }, - "permission": "READ_ONLY", - "shared_permission": "NO_ACCESS", - "group_permission": [] - } - ] - } - ] - } - ] - } - } - } - } - } + "parameters": [ + { + "in": "path", + "name": "org_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "ID or name of the Org" + } + ], + "responses": { + "204": { + "description": "Organization successfully deleted." }, "400": { "description": "Invalid request.", @@ -8724,19 +8677,19 @@ } } }, - "/api/rest/2.0/security/metadata/fetch-permissions": { + "/api/rest/2.0/orgs/search": { "post": { - "operationId": "fetchPermissionsOnMetadata", - "description": "\n Version: 9.0.0.cl or later\n\nFetches permission details for a given metadata object.\n\nRequires view access to the metadata object.\n\n#### Usage guidelines\n\n* To fetch a list of users and groups for a metadata object, specify `type` and GUID or name of the metadata object.\n* To get permission details for a specific user or group, add `type` and GUID or name of the principal object to your API request.\n\nUpon successful execution, the API returns permission details and principal information for the object specified in the API request.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "searchOrgs", + "description": "\n Version: 9.0.0.cl or later\n\nGets a list of Orgs configured on the ThoughtSpot system. To get details of a specific Org, specify the Org ID or name. You can also pass parameters such as status, visibility, and user identifiers to get a specific list of Orgs.\n\nRequires cluster administration (**Can administer Org**) privileges.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `ORG_ADMINISTRATION` (**Can manage Orgs**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Security", + "Orgs", "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/FetchPermissionsOnMetadataRequest" + "$ref": "#/components/schemas/SearchOrgsRequest" } } }, @@ -8745,66 +8698,33 @@ "parameters": [], "responses": { "200": { - "description": "Fetching permissions of metadata objects is successful.", + "description": "Organization search result.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PermissionOfMetadataResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/OrgResponse" + } }, "examples": { "example_1": { - "value": { - "metadata_permission_details": [ - { - "metadata_id": "a62a5bf3-9f16-45b2-a174-7d30b3b577a9", - "metadata_name": "testing", - "metadata_type": "LIVEBOARD", - "metadata_owner": { - "id": "a62a5bf3-9f16-45b2-a174-7d30b3b577a9", - "name": "testing" - }, - "metadata_author": { - "id": "59481331-ee53-42be-a548-bd87be6ddd4a", - "name": "tsadmin" - }, - "principal_permission_info": [ - { - "principal_type": "USER_GROUP", - "principal_sub_type": "LOCAL_GROUP", - "principal_permissions": [ - { - "principal_id": "d0326b56-ef23-4c8a-8327-a30e99bcc72b", - "principal_name": "Administrator", - "permission": "MODIFY", - "shared_permission": "NO_ACCESS", - "group_permission": [] - } - ] - }, - { - "principal_type": "USER", - "principal_sub_type": "LOCAL_USER", - "principal_permissions": [ - { - "principal_id": "0f0dd0f7-7411-4195-a4aa-0dc6b58413c9", - "principal_name": "su", - "permission": "MODIFY", - "shared_permission": "NO_ACCESS", - "group_permission": [] - }, - { - "principal_id": "59481331-ee53-42be-a548-bd87be6ddd4a", - "principal_name": "tsadmin", - "permission": "MODIFY", - "shared_permission": "NO_ACCESS", - "group_permission": [] - } - ] - } - ] - } - ] - } + "value": [ + { + "id": 0, + "name": "Primary", + "status": "ACTIVE", + "description": "Primary Org", + "visibility": "SHOW" + }, + { + "id": 583464508, + "name": "test_org", + "status": "ACTIVE", + "description": "test_org", + "visibility": "SHOW" + } + ] } } } @@ -8853,31 +8773,41 @@ } } }, - "/api/rest/2.0/security/metadata/manage-object-privilege": { + "/api/rest/2.0/orgs/{org_identifier}/update": { "post": { - "operationId": "manageObjectPrivilege", - "description": "\n Version: 26.3.0.cl or later\n\nThis API allows the addition or deletion of object level privileges for a set of users and groups, on a set of metadata objects. It provides users to access certain features based on privilege based access control.\n\n#### Usage guidelines\n\n- Specify the `operation`. The supported operations are: `ADD`, `REMOVE`.\n- Specify the type of the objects on which the object privileges are being provided in `metadata_type`. Only `LOGICAL_TABLE` metadata type is supported for now. It may be extended for other metadata types in future.\n- Specify the list of object privilege types in the `object_privilege_types` array. The supported object privilege types are: `SPOTTER_COACHING_PRIVILEGE`.\n- Specify the identifiers (either GUID or name) for the metadata objects in the `metadata_identifiers` array.\n- Specify the `type` (`USER` or `USER_GROUP`) and `identifier` (either GUID or name) of the principals to which you want to apply the given operation and given object privileges in the `principals` array.\n- Ensure using correct Authorization Bearer Token corresponding to specific user & org.\n\n#### Example request\n\n```json\n{\n \"operation\": \"operation-type\",\n \"metadata_type\": \"metadata-type\",\n \"object_privilege_types\": [\"privilege-type-1\", \"privilege-type-2\"],\n \"metadata_identifiers\": [\"metadata-guid-or-name-1\", \"metadata-guid-or-name-1\"],\n \"principals\": [\n {\n \"type\": \"type-1\", \n \"identifier\": \"principal-guid-or-name-1\"\n },\n {\n \"type\": \"type-2\",\n \"identifier\": \"principal-guid-or-name-2\"\n }\n ]\n}\n```\n\n> ###### Note:\n> * Only admin users, users with edit access and users with coaching privilege on a given data-model can add or remove principals related to SPOTTER_COACHING_PRIVILEGE \n\n\n\n#### Endpoint URL\n", + "operationId": "updateOrg", + "description": "\n Version: 9.0.0.cl or later\n\nUpdates an Org object. You can modify Org properties such as name, description, and user associations.\n\nRequires cluster administration (**Can administer Org**) privileges.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `ORG_ADMINISTRATION` (**Can manage Orgs**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Security", - "26.3.0.cl" + "Orgs", + "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ManageObjectPrivilegeRequest" + "$ref": "#/components/schemas/UpdateOrgRequest" } } }, "required": true }, - "parameters": [], + "parameters": [ + { + "in": "path", + "name": "org_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "ID or name of the Org" + } + ], "responses": { "204": { - "description": "Object privileges added/removed successfully" + "description": "Organization successfully updated." }, "400": { - "description": "Invalid request", + "description": "Invalid request.", "content": { "application/json": { "schema": { @@ -8887,7 +8817,7 @@ } }, "401": { - "description": "Unauthorized access", + "description": "Unauthorized access.", "content": { "application/json": { "schema": { @@ -8897,7 +8827,7 @@ } }, "403": { - "description": "Forbidden access", + "description": "Forbidden access.", "content": { "application/json": { "schema": { @@ -8919,19 +8849,19 @@ } } }, - "/api/rest/2.0/security/metadata/publish": { + "/api/rest/2.0/report/answer": { "post": { - "operationId": "publishMetadata", - "description": "\n Version: 26.5.0.cl or later\n\nAllows publishing metadata objects across organizations in ThoughtSpot.\n\nRequires ADMINISTRATION role and TENANT scope.\n\nThe API endpoint allows publishing the following types of metadata objects:\n* Liveboards\n* Answers\n* Logical Tables\n\nThis API will essentially share the objects along with it's dependencies to\nthe org admins of the orgs to which it is being published.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "exportAnswerReport", + "description": "\n Version: 9.0.0.cl or later\n\nExports an Answer in the given file format. You can download the Answer data as a PDF, PNG, CSV, or XLSX file.\n\nRequires at least view access to the Answer.\n\n#### Usage guidelines\n\nIn the request body, specify the GUID or name of the Answer and set `file_format`. The default file format is CSV.\n\nUse the `type` parameter to specify whether the Answer being exported is a saved Answer (`SAVED`) or a pinned Answer on a Liveboard (`PINNED`). Defaults to `SAVED`. When using `PINNED`, the `metadata_identifier` must be the container id.\n\n**NOTE**:\n* The downloadable file returned in API response file is extensionless. Please rename the downloaded file by typing in the relevant extension.\n* HTML rendering is not supported for PDF exports of Answers with tables.\n\nOptionally, you can define [runtime overrides](https://developers.thoughtspot.com/docs/fetch-data-and-report-apis#_runtime_overrides) to apply to the Answer data. \n\n\n\n#### Endpoint URL\n", "tags": [ - "Security", - "26.5.0.cl" + "Reports", + "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PublishMetadataRequest" + "$ref": "#/components/schemas/ExportAnswerReportRequest" } } }, @@ -8939,8 +8869,11 @@ }, "parameters": [], "responses": { - "204": { - "description": "Publishing metadata objects is successful." + "200": { + "description": "Export report file of specified metadata object is successful.", + "content": { + "application/octet-stream": {} + } }, "400": { "description": "Invalid request.", @@ -8985,19 +8918,19 @@ } } }, - "/api/rest/2.0/security/metadata/share": { + "/api/rest/2.0/report/liveboard": { "post": { - "operationId": "shareMetadata", - "description": "\n Version: 9.0.0.cl or later\n\nAllows sharing one or several metadata objects with users and groups in ThoughtSpot.\n\nRequires edit access to the metadata object.\n\n#### Supported metadata objects:\n* Liveboards\n* Visualizations\n* Answers\n* Models\n* Views\n* Connections\n* Collections\n\n#### Object permissions\n\nYou can provide `READ_ONLY` or `MODIFY` access when sharing an object with another user or group. The `READ_ONLY` permission grants view access to the shared object, whereas `MODIFY` provides edit access.\n\nTo prevent a user or group from accessing the shared object, specify the GUID or name of the principal and set `shareMode` to `NO_ACCESS`.\n\n#### Sharing a visualization\n\n* Sharing a visualization implicitly shares the entire Liveboard with the recipient.\n* Object permissions set for a shared visualization also apply to the Liveboard unless overridden by another API request or via UI.\n* If email notifications for object sharing are enabled, a notification with a link to the shared visualization will be sent to the recipient’s email address. Although this link opens the shared visualization, recipients can also access other visualizations in the Liveboard.\n\n#### Sharing a collection\n\nCollections support **dual permissions** that provide fine-grained control:\n\n* **Collection permissions** (`share_mode`) - controls access to the collection itself (view, edit, delete the collection)\n* **Content permissions** (`content_share_mode`) - controls access to objects within the collection (view, edit objects inside)\n\n**Default Behavior:**\n- If only `share_mode` is specified, the content permissions default to `READ_ONLY` (except when `share_mode` is `NO_ACCESS`, then content also gets `NO_ACCESS`)\n- To give users edit access to collection contents, explicitly set `content_share_mode: \"MODIFY\"`\n\n## Examples\n\nThe following JSON examples can be copy-pasted as request bodies for the REST v2 API endpoint:\n\n```bash\nPOST /callosum/v1/v2/security/metadata/share\nContent-Type: application/x-www-form-urlencoded\n```\n\n### Basic collection sharing\nShare a collection with read-only access:\n\n```json\n{\n \"metadata_type\": \"COLLECTION\",\n \"metadata_identifiers\": [\"Sales Reports Collection\"],\n \"permissions\": [{\n \"principal\": {\n \"type\": \"USER\",\n \"identifier\": \"alice@company.com\"\n },\n \"share_mode\": \"READ_ONLY\"\n }],\n \"notification\": {\n \"message\": \"I've shared the Sales Reports collection with you\",\n \"notify_on_share\": true\n }\n}\n```\n\n### Collection sharing with dual permissions\nShare a collection with different permissions for the collection vs. its contents:\n\n```json\n{\n \"metadata_type\": \"COLLECTION\",\n \"metadata_identifiers\": [\"Marketing Analytics\"],\n \"permissions\": [{\n \"principal\": {\n \"type\": \"USER\",\n \"identifier\": \"bob@company.com\"\n },\n \"share_mode\": \"MODIFY\",\n \"content_share_mode\": \"READ_ONLY\"\n }, {\n \"principal\": {\n \"type\": \"USER_GROUP\",\n \"identifier\": \"Marketing Team\"\n },\n \"share_mode\": \"READ_ONLY\",\n \"content_share_mode\": \"READ_ONLY\"\n }],\n \"notification\": {\n \"emails\": [\"bob@company.com\"],\n \"message\": \"You can edit the collection but content is read-only\",\n \"enable_custom_url\": false,\n \"notify_on_share\": true\n },\n \"has_lenient_discoverability\": false\n}\n```\n\n### Multiple collections sharing\nShare multiple collections with different users:\n\n```json\n{\n \"metadata\": [\n {\n \"type\": \"COLLECTION\",\n \"identifier\": \"Q4 Reports\"\n },\n {\n \"type\": \"COLLECTION\",\n \"identifier\": \"Executive Dashboard Collection\"\n }\n ],\n \"permissions\": [{\n \"principal\": {\n \"type\": \"USER_GROUP\",\n \"identifier\": \"Executives\"\n },\n \"share_mode\": \"MODIFY\"\n }, {\n \"principal\": {\n \"type\": \"USER\",\n \"identifier\": \"manager@company.com\"\n },\n \"share_mode\": \"READ_ONLY\",\n \"content_share_mode\": \"MODIFY\"\n }],\n \"notification\": {\n \"message\": \"Sharing quarterly collections with leadership team\",\n \"notify_on_share\": true\n }\n}\n```\n\n### Remove collection access\nRemove access to a collection by setting share_mode to NO_ACCESS:\n\n```json\n{\n \"metadata_type\": \"COLLECTION\",\n \"metadata_identifiers\": [\"Confidential Reports\"],\n \"permissions\": [{\n \"principal\": {\n \"type\": \"USER\",\n \"identifier\": \"former-employee@company.com\"\n },\n \"share_mode\": \"NO_ACCESS\"\n }],\n \"notification\": {\n \"notify_on_share\": false\n }\n}\n```\n\n### Collection Permission Scenarios\n\n**Scenario 1: Collection Admin**\n- `share_mode: MODIFY` + `content_share_mode: MODIFY` = Full control over collection and its contents\n\n**Scenario 2: Collection Curator**\n- `share_mode: MODIFY` + `content_share_mode: READ_ONLY` = Can manage collection structure but not edit contents\n\n**Scenario 3: Content Editor**\n- `share_mode: READ_ONLY` + `content_share_mode: MODIFY` = Can edit objects within collection but can't change collection itself\n\n**Scenario 4: Viewer**\n- `share_mode: READ_ONLY` + `content_share_mode: READ_ONLY` = View-only access to collection and contents\n\n\n\n\n#### Endpoint URL\n", + "operationId": "exportLiveboardReport", + "description": "\n Version: 9.0.0.cl or later\n\nExports a Liveboard and its visualizations in PDF, PNG, CSV, or XLSX file format.\nThe default `file_format` is CSV.\n\nRequires at least view access to the Liveboard.\n\n#### Usage guidelines\n\nIn the request body, specify the GUID or name of the Liveboard. To generate a Liveboard report with specific visualizations, add GUIDs or names of the visualizations.\n\n**NOTE**: \n\n* The downloadable file returned in API response file is extensionless. Please rename the downloaded file by typing in the relevant extension.\n\n* Optionally, you can define [runtime overrides](https://developers.thoughtspot.com/docs/fetch-data-and-report-apis#_runtime_overrides) to apply to the Answer data.\n\n* To include unsaved changes in the report, pass the `transient_pinboard_content` script generated from the `getExportRequestForCurrentPinboard` method in the Visual Embed SDK. Upon successful execution, the API returns the report with unsaved changes, including ad hoc changes to visualizations. For more information, see [Liveboard Report API](https://developers.thoughtspot.com/docs/fetch-data-and-report-apis#_liveboard_report_api). \n\n* Starting with ThoughtSpot Cloud 10.9.0.cl release, the Liveboard can be exported in the PNG format in the resolution of your choice. To enable this on your instance, contact ThoughtSpot support. When this feature is enabled, the options `include_cover_page`,`include_filter_page` within the `png_options` will not be available for PNG exports.\n\n* Starting with the ThoughtSpot Cloud 26.2.0.cl release,\n\n * Liveboards can be exported in CSV format. \n * All visualizations within a Liveboard can be exported as individual CSV files. \n * When exporting multiple visualizations or the entire Liveboard, the system returns the report as a compressed ZIP file containing the separate CSV files for each visualization.\n\n * Liveboards can also be exported in XLSX format. \n * All selected visualizations are consolidated into a single Excel workbook (.xlsx), with each visualization placed in its own worksheet (tab). \n * XLSX exports are limited to a maximum of 255 worksheets (tabs) per workbook.\n\n\n\n#### Endpoint URL\n", "tags": [ - "Security", + "Reports", "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ShareMetadataRequest" + "$ref": "#/components/schemas/ExportLiveboardReportRequest" } } }, @@ -9005,8 +8938,11 @@ }, "parameters": [], "responses": { - "204": { - "description": "Sharing metadata objects is successful." + "200": { + "description": "Export report file of specified metadata object is successful.", + "content": { + "application/octet-stream": {} + } }, "400": { "description": "Invalid request.", @@ -9051,19 +8987,19 @@ } } }, - "/api/rest/2.0/security/metadata/unpublish": { + "/api/rest/2.0/roles/create": { "post": { - "operationId": "unpublishMetadata", - "description": "\n Version: 26.5.0.cl or later\n\nAllows unpublishing metadata objects from organizations in ThoughtSpot.\n\nRequires ADMINISTRATION role and TENANT scope.\n\nThe API endpoint allows unpublishing the following types of metadata objects:\n* Liveboards\n* Answers\n* Logical Tables\n\nWhen unpublishing objects, you can:\n* Include dependencies by setting `include_dependencies` to true - this will unpublish all dependent objects if no other published object is using them\n* Force unpublish by setting `force` to true - this will break all dependent objects in the unpublished organizations\n\n\n\n\n#### Endpoint URL\n", + "operationId": "createRole", + "description": "\n Version: 9.5.0.cl or later\n\nCreates a Role object in ThoughtSpot.\n\nAvailable only if [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance. To create a Role, the `ROLE_ADMINISTRATION` (**Can manage roles**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Security", - "26.5.0.cl" + "Roles", + "9.5.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UnpublishMetadataRequest" + "$ref": "#/components/schemas/CreateRoleRequest" } } }, @@ -9071,11 +9007,18 @@ }, "parameters": [], "responses": { - "204": { - "description": "Unpublishing metadata objects is successful." + "200": { + "description": "Role successfully created.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoleResponse" + } + } + } }, "400": { - "description": "Invalid request.", + "description": "Invalid parameters.", "content": { "application/json": { "schema": { @@ -9105,7 +9048,7 @@ } }, "500": { - "description": "Unexpected error", + "description": "Internal error", "content": { "application/json": { "schema": { @@ -9117,31 +9060,31 @@ } } }, - "/api/rest/2.0/security/column/rules/update": { + "/api/rest/2.0/roles/{role_identifier}/delete": { "post": { - "operationId": "updateColumnSecurityRules", - "description": "\nBeta Version: 10.12.0.cl or later\n\nCreates, updates, or deletes column security rules for specified tables.\n\nThis API endpoint allows you to create, update, or delete column-level security rules on columns of a table. The operation follows an \"all or none\" policy: if defining security rules for any of the provided columns fails, the entire operation will be rolled back, and no rules will be created.\n\n#### Usage guidelines\n\n- Provide table identifier using either `identifier` (GUID or name) or `obj_identifier` (object ID)\n- Use `clear_csr: true` to remove all column security rules from the table\n- For each column, specify the security rule using `column_security_rules` array\n- Use `is_unsecured: true` to mark a specific column as unprotected\n- Use `group_access` operations to manage group associations:\n - `ADD`: Add groups to the column's access list\n - `REMOVE`: Remove groups from the column's access list\n - `REPLACE`: Replace all existing groups with the specified groups\n\n#### Required permissions\n\n- `ADMINISTRATION` - Can administer ThoughtSpot\n- `DATAMANAGEMENT` - Can manage data (if RBAC is disabled)\n- `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` - Can manage worksheet views and tables (if RBAC is enabled)\n\n#### Example request\n\n```json\n{\n \"identifier\": \"table-guid\",\n \"obj_identifier\": \"table-object-id\",\n \"clear_csr\": false,\n \"column_security_rules\": [\n {\n \"column_identifier\": \"col id or col name\",\n \"is_unsecured\": false,\n \"group_access\": [\n {\n \"operation\": \"ADD\",\n \"group_identifiers\": [\"hr_group_id\", \"hr_group_name\", \"finance_group_id\"]\n }\n ]\n },\n {\n \"column_identifier\": \"col id or col name\",\n \"is_unsecured\": true\n },\n {\n \"column_identifier\": \"col id or col name\",\n \"is_unsecured\": false,\n \"group_access\": [\n {\n \"operation\": \"REPLACE\",\n \"group_identifiers\": [\"management_group_id\", \"management_group_name\"]\n }\n ]\n }\n ]\n}\n```\n\n#### Request Body Schema\n\n- `identifier` (string, optional): GUID or name of the table for which we want to create column security rules\n- `obj_identifier` (string, optional): The object ID of the table\n- `clear_csr` (boolean, optional): If true, then all the secured columns will be marked as unprotected, and all the group associations will be removed\n- `column_security_rules` (array of objects, required): An array where each object defines the security rule for a specific column\n\nEach column security rule object contains:\n- `column_identifier` (string, required): Column identifier (col_id or name)\n- `is_unsecured` (boolean, optional): If true, the column will be marked as unprotected and all groups associated with it will be removed\n- `group_access` (array of objects, optional): Array of group operation objects\n\nEach group operation object contains:\n- `operation` (string, required): Operation type - ADD, REMOVE, or REPLACE\n- `group_identifiers` (array of strings, required): Array of group identifiers (name or GUID) on which the operation will be performed\n\n#### Response\n\nThis API does not return any response body. A successful operation returns HTTP 200 status code.\n\n#### Operation Types\n\n- **ADD**: Adds the specified groups to the column's access list\n- **REMOVE**: Removes the specified groups from the column's access list \n- **REPLACE**: Replaces all existing groups with the specified groups \n\n\n\n#### Endpoint URL\n", + "operationId": "deleteRole", + "description": "\n Version: 9.5.0.cl or later\n\nDeletes a Role object from the ThoughtSpot system.\n\nAvailable only if [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance. To delete a Role, the `ROLE_ADMINISTRATION` (**Can manage roles**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Security", - "10.12.0.cl" + "Roles", + "9.5.0.cl" ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateColumnSecurityRulesRequest" - } - } - }, - "required": true - }, - "parameters": [], - "responses": { + "parameters": [ + { + "in": "path", + "name": "role_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique ID or name of the Role. ReadOnly roles cannot be deleted." + } + ], + "responses": { "204": { - "description": "Successfully updated column security rules" + "description": "Role successfully deleted." }, "400": { - "description": "Bad request - Invalid parameters or table not found", + "description": "Invalid request.", "content": { "application/json": { "schema": { @@ -9161,7 +9104,7 @@ } }, "403": { - "description": "Forbidden - User doesn't have permission to modify security rules for this table", + "description": "Forbidden access.", "content": { "application/json": { "schema": { @@ -9171,7 +9114,7 @@ } }, "500": { - "description": "Internal server error", + "description": "Internal error", "content": { "application/json": { "schema": { @@ -9183,19 +9126,19 @@ } } }, - "/api/rest/2.0/system/preferences/communication-channels/configure": { + "/api/rest/2.0/roles/search": { "post": { - "operationId": "configureCommunicationChannelPreferences", - "description": "\nBeta Version: 10.14.0.cl or later\n\nConfigure communication channel preferences.\n- Use `cluster_preferences` to update the default preferences for your ThoughtSpot application instance.\n- If your instance has [Orgs](https://docs.thoughtspot.com/cloud/latest/orgs-overview), use `org_preferences` to specify Org-specific preferences that override the defaults.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, users with `APPLICATION_ADMINISTRATION` (**Can manage application settings**) privilege are also authorized to perform this action.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "searchRoles", + "description": "\n Version: 9.5.0.cl or later\n\nGets a list of Role objects from the ThoughtSpot system.\n\nAvailable if [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance. To search for Roles, the `ROLE_ADMINISTRATION` (**Can manage roles**) privilege is required.\n\nTo get details of a specific Role object, specify the GUID or name. You can also filter the API response based on user group and Org identifiers, privileges assigned to the Role, and deprecation status.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "System", - "10.14.0.cl" + "Roles", + "9.5.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ConfigureCommunicationChannelPreferencesRequest" + "$ref": "#/components/schemas/SearchRolesRequest" } } }, @@ -9203,8 +9146,18 @@ }, "parameters": [], "responses": { - "204": { - "description": "Communication channel preferences successfully updated." + "200": { + "description": "Roles search result.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SearchRoleResponse" + } + } + } + } }, "400": { "description": "Invalid request.", @@ -9237,7 +9190,7 @@ } }, "500": { - "description": "Unexpected error", + "description": "Internal error", "content": { "application/json": { "schema": { @@ -9249,28 +9202,45 @@ } } }, - "/api/rest/2.0/system/security-settings/configure": { + "/api/rest/2.0/roles/{role_identifier}/update": { "post": { - "operationId": "configureSecuritySettings", - "description": "\n Version: 26.2.0.cl or later\n\nConfigure security settings for your ThoughtSpot application instance.\n- Use `cluster_preferences` to update cluster-level security settings including CORS whitelisted URLs, CSP settings, SAML redirect URLs, partitioned cookies, and non-embed access configuration.\n- Use `org_preferences` to configure Org-specific security settings. If your instance has [Orgs](https://docs.thoughtspot.com/cloud/latest/orgs-overview), this allows configuring CORS and non-embed access settings specific to the Org.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege. Cluster-level SAML and script-src settings require `ADMINISTRATION` privilege.\nSee [Security Settings](https://developers.thoughtspot.com/docs/security-settings) for more details.\n\n\n\n#### Endpoint URL\n", + "operationId": "updateRole", + "description": "\n Version: 9.5.0.cl or later\n\nUpdates the properties of a Role object.\n\nAvailable only if [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance. To update a Role, the `ROLE_ADMINISTRATION` (**Can manage roles**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "System", - "26.2.0.cl" + "Roles", + "9.5.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ConfigureSecuritySettingsRequest" + "$ref": "#/components/schemas/UpdateRoleRequest" } } }, "required": true }, - "parameters": [], + "parameters": [ + { + "in": "path", + "name": "role_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique ID or name of the Role." + } + ], "responses": { - "204": { - "description": "Successfully configured the security settings." + "200": { + "description": "Role successfully updated.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoleResponse" + } + } + } }, "400": { "description": "Invalid request.", @@ -9315,31 +9285,32 @@ } } }, - "/api/rest/2.0/system/config": { - "get": { - "operationId": "getSystemConfig", - "description": "\n Version: 9.0.0.cl or later\n\nRetrieves the current configuration details of the cluster. If the request is successful, the API returns a list configuration settings applied on the cluster.\n\nRequires `ADMINISTRATION`(**Can administer ThoughtSpot**) privilege to view these complete configuration settings of the cluster.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `SYSTEM_INFO_ADMINISTRATION` (**Can view system activities**) privilege is required.\n\nThis API does not require any parameters to be passed in the request.\n\n\n\n\n#### Endpoint URL\n", + "/api/rest/2.0/schedules/create": { + "post": { + "operationId": "createSchedule", + "description": "\nCreate schedule.
Version: 9.4.0.cl or later\n\nCreates a Liveboard schedule job.\n\nRequires at least edit access to Liveboards. To create a schedule on behalf of another user, you need `ADMINISTRATION` (**Can administer Org**) or `JOBSCHEDULING` (**Can schedule for others**) privilege and edit access to the Liveboard.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `JOBSCHEDULING` (**Can schedule for others**) privilege is required.\n\n#### Usage guidelines\n\n* The description text is mandatory. The description text appears as **Description: ** in the Liveboard schedule email notifications.\n* For Liveboards with both charts and tables, schedule creation is only supported in PDF and XLS formats. Schedules created in CSV formats for such Liveboards will fail to run. If `PDF` is set as the `file_format`, enable `pdf_options` to get the correct attachment. Not doing so may cause the attachment to be rendered empty.\n* To include only specific visualizations, specify the visualization GUIDs in the `visualization_identifiers` array.\n* You can schedule a Liveboard job to run periodically by setting frequency parameters. You can set the schedule to run daily, weekly, monthly or every n minutes or hours. The scheduled job can also be configured to run at a specific time of the day or on specific days of the week or month. Please ensure that when setting the schedule frequency for _minute of the object_, only values that are multiples of 5 are included.\n* If the `frequency` parameters are defined, you can set the time zone to a value that matches your server's time zone. For example, `US/Central`, `Etc/UTC`, `CET`. The default time zone is `America/Los_Angeles`.\n\nFor more information about Liveboard jobs, see [ThoughtSpot Product Documentation](https://docs.thoughtspot.com/cloud/latest/liveboard-schedule).\n\n\n\n#### Endpoint URL\n", "tags": [ - "System", - "9.0.0.cl" + "Schedules", + "9.4.0.cl" ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateScheduleRequest" + } + } + }, + "required": true + }, "parameters": [], "responses": { "200": { - "description": "Cluster config information.", + "description": "Schedule successfully created.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SystemConfig" - }, - "examples": { - "example_1": { - "value": { - "onboarding_content_url": "", - "saml_enabled": false, - "okta_enabled": false - } - } + "$ref": "#/components/schemas/ResponseSchedule" } } } @@ -9387,54 +9358,28 @@ } } }, - "/api/rest/2.0/system": { - "get": { - "operationId": "getSystemInformation", - "description": "\n Version: 9.0.0.cl or later\n\nGets system information such as the release version, locale, time zone, deployment environment, date format, and date time format of the cluster.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privileges.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `SYSTEM_INFO_ADMINISTRATION` (**Can view system activities**) privilege is required.\n\nThis API does not require any parameters to be passed in the request. \n\n\n\n\n#### Endpoint URL\n", + "/api/rest/2.0/schedules/{schedule_identifier}/delete": { + "post": { + "operationId": "deleteSchedule", + "description": "\nDeletes a scheduled job.
Version: 9.4.0.cl or later\n\nDeletes a scheduled Liveboard job.\n\nRequires at least edit access to Liveboard or `ADMINISTRATION` (**Can administer Org**) privilege. \nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `JOBSCHEDULING` (**Can schedule for others**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "System", - "9.0.0.cl" + "Schedules", + "9.4.0.cl" + ], + "parameters": [ + { + "in": "path", + "name": "schedule_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique ID or name of the scheduled job." + } ], - "parameters": [], "responses": { - "200": { - "description": "Cluster information.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SystemInfo" - }, - "examples": { - "example_1": { - "value": { - "id": "local", - "name": "local", - "release_version": "test", - "time_zone": "America/Los_Angeles", - "locale": "", - "date_format": "MM/dd/yyyy", - "api_version": "v1", - "type": "SW", - "environment": "DEV", - "license": "EAE", - "date_time_format": "MM/dd/yyyy h:mm a", - "time_format": "HH:mm:ss", - "system_user_id": "67e15c06-d153-4924-a4cd-ff615393b60f", - "super_user_id": "0f0dd0f7-7411-4195-a4aa-0dc6b58413c9", - "hidden_object_id": "31745bb4-defd-4e8b-8de9-8fd01db78827", - "system_group_id": "179d8867-cf36-4a8d-a019-63a226fd3196", - "tsadmin_user_id": "59481331-ee53-42be-a548-bd87be6ddd4a", - "admin_group_id": "d0326b56-ef23-4c8a-8327-a30e99bcc72b", - "all_tables_connection_id": "bfc6feb4-8dac-402c-8ae8-78b43d318777", - "all_user_group_id": "b25ee394-9d13-49e3-9385-cd97f5b253b4", - "accept_language": "undefined", - "all_user_group_member_user_count": 13, - "logical_model_version": 43 - } - } - } - } - } + "204": { + "description": "Schedule successfully deleted." }, "400": { "description": "Invalid request.", @@ -9479,22 +9424,35 @@ } } }, - "/api/rest/2.0/system/config-overrides": { - "get": { - "operationId": "getSystemOverrideInfo", - "description": "\n Version: 9.2.0.cl or later\n\nGets a list of configuration overrides applied on the cluster. \n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `APPLICATION_ADMINISTRATION` (**Can manage application settings**) privilege is required.\n\nThis API does not require any parameters to be passed in the request. \n\n\n\n\n#### Endpoint URL\n", + "/api/rest/2.0/schedules/search": { + "post": { + "operationId": "searchSchedules", + "description": "\nSearch Schedules
Version: 9.4.0.cl or later\n\nGets a list of scheduled jobs configured for a Liveboard.\n\nTo get details of a specific scheduled job, specify the name or GUID of the scheduled job.\n\nRequires at least view access to Liveboards.\n\n**NOTE**: When filtering schedules by parameters other than `metadata`, set `record_size` to `-1` and `record_offset` to `0` for accurate results.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "System", - "9.2.0.cl" + "Schedules", + "9.4.0.cl" ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SearchSchedulesRequest" + } + } + }, + "required": true + }, "parameters": [], "responses": { "200": { - "description": "Cluster configuration which can be overridden.", + "description": "Schedule search result.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SystemOverrideInfo" + "type": "array", + "items": { + "$ref": "#/components/schemas/ResponseSchedule" + } } } } @@ -9542,68 +9500,41 @@ } } }, - "/api/rest/2.0/system/preferences/communication-channels/search": { + "/api/rest/2.0/schedules/{schedule_identifier}/update": { "post": { - "operationId": "searchCommunicationChannelPreferences", - "description": "\nBeta Version: 10.14.0.cl or later\n\nFetch communication channel preferences.\n- Use `cluster_preferences` to fetch the default preferences for your ThoughtSpot application instance.\n- If your instance has [Orgs](https://docs.thoughtspot.com/cloud/latest/orgs-overview), use `org_preferences` to fetch any Org-specific preferences that override the defaults.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, users with `APPLICATION_ADMINISTRATION` (**Can manage application settings**) privilege are also authorized to perform this action.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "updateSchedule", + "description": "\nUpdate schedule.
Version: 9.4.0.cl or later\n\nUpdates a scheduled Liveboard job.\n\nRequires at least edit access to Liveboards. To update a schedule on behalf of another user, you need `ADMINISTRATION` (**Can administer Org**) or `JOBSCHEDULING` (**Can schedule for others**) privilege and edit access to the Liveboard.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `JOBSCHEDULING` (**Can schedule for others**) privilege is required.\n\nThe API endpoint allows you to pause a scheduled job, change the status of a paused job. You can also edit the recipients list, frequency of the job, format of the file to send to the recipients in email notifications, PDF options, and time zone setting.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "System", - "10.14.0.cl" + "Schedules", + "9.4.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SearchCommunicationChannelPreferencesRequest" + "$ref": "#/components/schemas/UpdateScheduleRequest" } } }, "required": true }, - "parameters": [], + "parameters": [ + { + "in": "path", + "name": "schedule_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique ID or name of the schedule." + } + ], "responses": { - "200": { - "description": "Communication channel preferences retrieved successfully.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CommunicationChannelPreferencesResponse" - }, - "examples": { - "example_1": { - "value": { - "cluster_preferences": [ - { - "event_type": "LIVEBOARD_SCHEDULE", - "channels": [ - "WEBHOOK" - ] - } - ], - "org_preferences": [ - { - "org": { - "id": "583464508", - "name": "test_org" - }, - "preferences": [ - { - "event_type": "LIVEBOARD_SCHEDULE", - "channels": [ - "EMAIL" - ] - } - ] - } - ] - } - } - } - } - } - }, - "400": { - "description": "Invalid request.", + "204": { + "description": "Schedule successfully updated." + }, + "400": { + "description": "Invalid request.", "content": { "application/json": { "schema": { @@ -9645,19 +9576,19 @@ } } }, - "/api/rest/2.0/system/security-settings/search": { + "/api/rest/2.0/security/metadata/assign": { "post": { - "operationId": "searchSecuritySettings", - "description": "\n Version: 26.2.0.cl or later\n\nFetch security settings for your ThoughtSpot application instance.\n- Use `scope: CLUSTER` to retrieve cluster-level security settings, including CORS and CSP allowlists, SAML redirect URLs, and settings that control access to non-embedded pages.\n- Use `scope: ORG` to retrieve Org-level security settings. If your instance has [Orgs](https://docs.thoughtspot.com/cloud/latest/orgs-overview), this returns CORS and non-embed access settings specific to the Org.\n- If `scope` is not specified, returns both cluster and Org-specific settings based on user privileges.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege.\nSee [Security Settings](https://developers.thoughtspot.com/docs/security-settings) for more details.\n\n\n\n#### Endpoint URL\n", + "operationId": "assignChangeAuthor", + "description": "\n Version: 9.0.0.cl or later\n\nTransfers the ownership of one or several objects from one user to another.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `USER_ADMINISTRATION` (**Can manage users**) privilege and edit access to the objects are required.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "System", - "26.2.0.cl" + "Security", + "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SearchSecuritySettingsRequest" + "$ref": "#/components/schemas/AssignChangeAuthorRequest" } } }, @@ -9665,79 +9596,8 @@ }, "parameters": [], "responses": { - "200": { - "description": "Successfully retrieved the list of security settings.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SecuritySettingsResponse" - }, - "examples": { - "example_1": { - "value": { - "cluster_preferences": { - "enable_partitioned_cookies": false, - "cors_whitelisted_urls": [ - "example.com" - ], - "csp_settings": { - "connect_src_urls": [ - "https://connect.example.com" - ], - "font_src_urls": [ - "https://font.example.com" - ], - "visual_embed_hosts": [ - "https://embed.example.com" - ], - "iframe_src_urls": [ - "https://embed.example.com" - ], - "img_src_urls": [ - "https://img.example.com" - ], - "script_src_urls": { - "enabled": true, - "urls": [ - "https://script.example.com" - ] - }, - "style_src_urls": [ - "https://style.example.com" - ] - }, - "saml_redirect_urls": [ - "https://saml.example.com" - ], - "non_embed_access": { - "block_full_app_access": true - } - }, - "org_preferences": [ - { - "org": { - "id": 0, - "name": "Primary" - }, - "cors_whitelisted_urls": [ - "https://cors.example.com" - ], - "non_embed_access": { - "block_full_app_access": true, - "groups_with_access": [ - { - "id": "1234567890", - "name": "Group Name" - } - ] - } - } - ] - } - } - } - } - } + "204": { + "description": "Author assignment for given metadata objects is successful." }, "400": { "description": "Invalid request.", @@ -9782,19 +9642,19 @@ } } }, - "/api/rest/2.0/system/config-update": { + "/api/rest/2.0/security/column/rules/fetch": { "post": { - "operationId": "updateSystemConfig", - "description": "\n Version: 9.2.0.cl or later\n\nUpdates the current configuration of the cluster. You must send the configuration data in JSON format.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privileges.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `APPLICATION_ADMINISTRATION` (**Can manage application settings**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "fetchColumnSecurityRules", + "description": "\nBeta Version: 10.12.0.cl or later\n\nFetches column security rules for specified tables.\n\nThis API endpoint retrieves column-level security rules configured for tables. It returns information about which columns are secured and which groups have access to those columns.\n\n#### Usage guidelines\n\n- Provide an array of table identifiers using either `identifier` (GUID or name) or `obj_identifier` (object ID)\n- At least one of `identifier` or `obj_identifier` must be provided for each table\n- The API returns column security rules for all specified tables\n- Users must have appropriate permissions to access security rules for the specified tables\n\n#### Required permissions\n\n- `ADMINISTRATION` - Can administer ThoughtSpot\n- `DATAMANAGEMENT` - Can manage data\n- `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` - Can manage worksheet views and tables\n\n#### Example request\n\n```json\n{\n \"tables\": [\n {\n \"identifier\": \"table-guid\",\n \"obj_identifier\": \"table-object-id\"\n }\n ]\n}\n```\n\n#### Response format\n\nThe API returns an array of `ColumnSecurityRuleResponse` objects wrapped in a `data` field. Each `ColumnSecurityRuleResponse` object contains:\n- Table information (GUID and object ID) \n- Array of column security rules with column details, group access, and source table information\n\n#### Example response\n\n```json\n{\n \"data\": [\n {\n \"guid\": \"table-guid\",\n \"objId\": \"table-object-id\",\n \"columnSecurityRules\": [\n {\n \"column\": {\n \"id\": \"col_123\",\n \"name\": \"Salary\"\n },\n \"groups\": [\n {\n \"id\": \"group_1\",\n \"name\": \"HR Department\"\n }\n ],\n \"sourceTableDetails\": {\n \"id\": \"source-table-guid\",\n \"name\": \"Employee_Data\"\n }\n }\n ]\n }\n ]\n}\n```\n\n\n\n#### Endpoint URL\n", "tags": [ - "System", - "9.2.0.cl" + "Security", + "10.12.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateSystemConfigRequest" + "$ref": "#/components/schemas/FetchColumnSecurityRulesRequest" } } }, @@ -9802,11 +9662,21 @@ }, "parameters": [], "responses": { - "204": { - "description": "Configuration successfully updated." + "200": { + "description": "Successfully fetched column security rules", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ColumnSecurityRuleResponse" + } + } + } + } }, "400": { - "description": "Invalid request.", + "description": "Bad request - Table not found or invalid parameters", "content": { "application/json": { "schema": { @@ -9826,7 +9696,7 @@ } }, "403": { - "description": "Forbidden access.", + "description": "Forbidden - User doesn't have permission to access security rules for this table", "content": { "application/json": { "schema": { @@ -9836,7 +9706,7 @@ } }, "500": { - "description": "Unexpected error", + "description": "Internal server error", "content": { "application/json": { "schema": { @@ -9848,19 +9718,19 @@ } } }, - "/api/rest/2.0/system/communication-channels/validate": { + "/api/rest/2.0/security/metadata/fetch-object-privileges": { "post": { - "operationId": "validateCommunicationChannel", - "description": "\nBeta Version: 26.4.0.cl or later\n\nValidates a communication channel configuration to ensure it is properly set up and can receive events.\n- Use `channel_type` to specify the type of communication channel to validate (e.g., WEBHOOK).\n- Use `channel_identifier` to provide the unique identifier or name for the communication channel.\n- Use `event_type` to specify the event type to validate for this channel.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege. For webhook channels, users with `CAN_MANAGE_WEBHOOKS` (**Can manage webhooks**) privilege are also authorized to perform this action.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "fetchObjectPrivileges", + "description": "\n Version: 26.3.0.cl or later\n\nThis API fetches the object privileges present for the given list of principals (user or group), on the given set of objects. It supports pagination, which can be enabled and configured using the request parameters. It provides users access to certain features based on privilege based access control.\n\n#### Usage guidelines\n\n- Specify the `type` (`USER` or `USER_GROUP`) and `identifier` (either GUID or name) of the principals for which you want to retrieve object privilege information in the `principals` array.\n- Specify the `type` (`LOGICAL_TABLE`) and `identifier` (either GUID or name) of the metadata objects for which you want to retrieve object privilege information in the `metadata` array. Only `LOGICAL_TABLE` metadata type is supported for now. It may be extended for other metadata types in future.\n- To control the offset from where principals have to be fetched, use `record_offset`. When `record_offset` is 0, information is fetched from the beginning.\n- To control the number of principals to be fetched, use `record_size`. Default `record_size` is 20.\n- Ensure `record_offset` for a subsequent request is one more than the value of `record_size` of the previous request.\n- Ensure using correct Authorization Bearer Token corresponding to specific user & org. \n\n#### Example request\n\n```json\n{\n \"principals\": [\n {\n \"type\": \"type-1\",\n \"identifier\": \"principal-guid-or-name-1\"\n },\n {\n \"type\": \"type-2\",\n \"identifier\": \"principal-guid-or-name-2\"\n }\n ],\n \"metadata\": [\n {\n \"type\": \"metadata-type-1\",\n \"identifier\": \"metadata-guid-or-name-1\"\n },\n {\n \"type\": \"metadata-type-2\",\n \"identifier\": \"metadata-guid-or-name-2\"\n }\n ],\n \"record_offset\": 0,\n \"record_size\": 20\n}\n```\n\n\n#### Response format\n\nThe API returns an array of `metadata_object_privileges` objects wrapped in JSON. Each `metadata_object_privileges` object contains:\n- Metadata information (GUID, name and type)\n- Array of `principal_object_privilege_info`.\n- Each `principal_object_privilege_info` contains:\n - Principal type. All principals of this type are listed as described below.\n - Array of `principal_object_privileges`.\n - Each `principal_object_privileges` contains:\n - Principal information (GUID, name, subtype)\n - List of applied object level privileges.\n\n#### Example response\n\n```json\n{\n \"metadata_object_privileges\": [\n {\n \"metadata_id\": \"metadata-guid-1\",\n \"metadata_name\": \"metadata-name-1\",\n \"metadata_type\": \"metadata-type-1\",\n \"principal_object_privilege_info\": [\n {\n \"principal_type\": \"principal-type-1\",\n \"principal_object_privileges\": [\n {\n \"principal_id\": \"principal-guid-1\",\n \"principal_name\": \"principal-name-1\",\n \"principal_sub_type\": \"principal-sub-type-1\",\n \"object_privileges\": \"[object-privilege-1, object-privilege-2]\"\n },\n {\n \"principal_id\": \"principal-guid-2\",\n \"principal_name\": \"principal-name-2\",\n \"principal_sub_type\": \"principal-sub-type-2\",\n \"object_privileges\": \"[object-privilege-1, object-privilege-2]\"\n }\n ]\n },\n {\n \"principal_type\": \"principal-type-2\",\n \"principal_object_privileges\": [\n {\n \"principal_id\": \"principal-guid-3\",\n \"principal_name\": \"principal-guid-4\",\n \"principal_sub_type\": \"principal-sub-type-4\",\n \"object_privileges\": \"[object-privilege-1]\"\n }\n ]\n }\n ]\n },\n {\n \"metadata_id\": \"metadata-guid-2\",\n \"metadata_name\": \"metadata-name-2\",\n \"metadata_type\": \"metadata-type-2\",\n \"principal_object_privilege_info\": [\n {\n \"principal_type\": \"principal-type-1\",\n \"principal_object_privileges\": [\n {\n \"principal_id\": \"principal-guid-1\",\n \"principal_name\": \"principal-name-1\",\n \"principal_sub_type\": \"principal-sub-type-1\",\n \"object_privileges\": \"[object-privilege-3, object-privilege-4]\"\n },\n {\n \"principal_id\": \"principal-guid-2\",\n \"principal_name\": \"principal-name-2\",\n \"principal_sub_type\": \"principal-sub-type-2\",\n \"object_privileges\": \"[object-privilege-4]\"\n }\n ]\n }\n ]\n }\n ]\n}\n```\n\n\n\n#### Endpoint URL\n", "tags": [ - "System", - "26.4.0.cl" + "Security", + "26.3.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidateCommunicationChannelRequest" + "$ref": "#/components/schemas/FetchObjectPrivilegesRequest" } } }, @@ -9869,11 +9739,11 @@ "parameters": [], "responses": { "200": { - "description": "communication channel configuration validated successfully.", + "description": "Fetching defined object privileges of metadata objects is successful.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CommunicationChannelValidateResponse" + "$ref": "#/components/schemas/ObjectPrivilegesOfMetadataResponse" } } } @@ -9921,19 +9791,19 @@ } } }, - "/api/rest/2.0/tags/assign": { + "/api/rest/2.0/security/principals/fetch-permissions": { "post": { - "operationId": "assignTag", - "description": "\n Version: 9.0.0.cl or later\n\nAssigns tags to Liveboards, Answers, Tables, and Worksheets.\n\nRequires edit access to the metadata object.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "fetchPermissionsOfPrincipals", + "description": "\n Version: 9.0.0.cl or later\n\nFetches object permission details for a given principal object such as a user and group.\n\nRequires view access to the metadata object. \n\n#### Usage guidelines\n\n* To get a list of all metadata objects that a user or group can access, specify the `type` and GUID or name of the principal.\n* To get permission details for a specific object, add the `type` and GUID or name of the metadata object to your API request.\n\nUpon successful execution, the API returns a list of metadata objects and permission details for each object. \n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Tags", + "Security", "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AssignTagRequest" + "$ref": "#/components/schemas/FetchPermissionsOfPrincipalsRequest" } } }, @@ -9941,8 +9811,51 @@ }, "parameters": [], "responses": { - "204": { - "description": "Tags successfully assigned." + "200": { + "description": "Fetching permissions of principals is successful.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PermissionOfPrincipalsResponse" + }, + "examples": { + "example_1": { + "value": { + "principal_permission_details": [ + { + "principal_id": "7f5e7f87-09a1-487c-a1da-c4bb35e45270", + "principal_name": "test_user", + "principal_type": "USER", + "principal_sub_type": "LOCAL_USER", + "metadata_permission_info": [ + { + "metadata_type": "LIVEBOARD", + "metadata_permissions": [ + { + "metadata_id": "2ff57a24-cf90-485f-8b4b-45fc17474c6f", + "metadata_name": "Learn how to use ThoughtSpot", + "metadata_owner": { + "id": "2ff57a24-cf90-485f-8b4b-45fc17474c6f", + "name": "Learn how to use ThoughtSpot" + }, + "metadata_author": { + "id": "59481331-ee53-42be-a548-bd87be6ddd4a", + "name": "tsadmin" + }, + "permission": "READ_ONLY", + "shared_permission": "NO_ACCESS", + "group_permission": [] + } + ] + } + ] + } + ] + } + } + } + } + } }, "400": { "description": "Invalid request.", @@ -9987,19 +9900,19 @@ } } }, - "/api/rest/2.0/tags/create": { + "/api/rest/2.0/security/metadata/fetch-permissions": { "post": { - "operationId": "createTag", - "description": "\n Version: 9.0.0.cl or later\n\nCreates a tag object.\n\nTags are labels that identify a metadata object. For example, you can create a tag to designate subject areas, such as sales, HR, marketing, and finance.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `TAGMANAGEMENT` (**Can manage tags**) privilege is required to create, edit, and delete tags.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "fetchPermissionsOnMetadata", + "description": "\n Version: 9.0.0.cl or later\n\nFetches permission details for a given metadata object.\n\nRequires view access to the metadata object.\n\n#### Usage guidelines\n\n* To fetch a list of users and groups for a metadata object, specify `type` and GUID or name of the metadata object.\n* To get permission details for a specific user or group, add `type` and GUID or name of the principal object to your API request.\n\nUpon successful execution, the API returns permission details and principal information for the object specified in the API request.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Tags", + "Security", "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateTagRequest" + "$ref": "#/components/schemas/FetchPermissionsOnMetadataRequest" } } }, @@ -10008,98 +9921,70 @@ "parameters": [], "responses": { "200": { - "description": "Tag successfully created.", + "description": "Fetching permissions of metadata objects is successful.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Tag" + "$ref": "#/components/schemas/PermissionOfMetadataResponse" }, "examples": { "example_1": { "value": { - "name": "test5", - "id": "6abf5aec-3485-4f83-b25f-8c55b92e2b20", - "color": "#342323", - "deleted": false, - "hidden": false, - "external": false, - "deprecated": false, - "creation_time_in_millis": 1685441468684, - "modification_time_in_millis": 1685441468684, - "author_id": "59481331-ee53-42be-a548-bd87be6ddd4a", - "modifier_id": "59481331-ee53-42be-a548-bd87be6ddd4a", - "owner_id": "6abf5aec-3485-4f83-b25f-8c55b92e2b20" - } - } - } - } - } - }, - "400": { - "description": "Invalid request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized access.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden access.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "500": { - "description": "Unexpected error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "metadata_permission_details": [ + { + "metadata_id": "a62a5bf3-9f16-45b2-a174-7d30b3b577a9", + "metadata_name": "testing", + "metadata_type": "LIVEBOARD", + "metadata_owner": { + "id": "a62a5bf3-9f16-45b2-a174-7d30b3b577a9", + "name": "testing" + }, + "metadata_author": { + "id": "59481331-ee53-42be-a548-bd87be6ddd4a", + "name": "tsadmin" + }, + "principal_permission_info": [ + { + "principal_type": "USER_GROUP", + "principal_sub_type": "LOCAL_GROUP", + "principal_permissions": [ + { + "principal_id": "d0326b56-ef23-4c8a-8327-a30e99bcc72b", + "principal_name": "Administrator", + "permission": "MODIFY", + "shared_permission": "NO_ACCESS", + "group_permission": [] + } + ] + }, + { + "principal_type": "USER", + "principal_sub_type": "LOCAL_USER", + "principal_permissions": [ + { + "principal_id": "0f0dd0f7-7411-4195-a4aa-0dc6b58413c9", + "principal_name": "su", + "permission": "MODIFY", + "shared_permission": "NO_ACCESS", + "group_permission": [] + }, + { + "principal_id": "59481331-ee53-42be-a548-bd87be6ddd4a", + "principal_name": "tsadmin", + "permission": "MODIFY", + "shared_permission": "NO_ACCESS", + "group_permission": [] + } + ] + } + ] + } + ] + } + } } } } - } - } - } - }, - "/api/rest/2.0/tags/{tag_identifier}/delete": { - "post": { - "operationId": "deleteTag", - "description": "\n Version: 9.0.0.cl or later\n\nDeletes a tag object from the ThoughtSpot system\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `TAGMANAGEMENT` (**Can manage tags**) privilege is required to create, edit, and delete tags.\n\n\n\n\n#### Endpoint URL\n", - "tags": [ - "Tags", - "9.0.0.cl" - ], - "parameters": [ - { - "in": "path", - "name": "tag_identifier", - "required": true, - "schema": { - "type": "string" - }, - "description": "Tag identifier Tag name or Tag id." - } - ], - "responses": { - "204": { - "description": "Tag successfully deleted." }, "400": { "description": "Invalid request.", @@ -10144,19 +10029,19 @@ } } }, - "/api/rest/2.0/tags/search": { + "/api/rest/2.0/security/metadata/manage-object-privilege": { "post": { - "operationId": "searchTags", - "description": "\n Version: 9.0.0.cl or later\n\nGets a list of tag objects available on the ThoughtSpot system. To get details of a specific tag object, specify the GUID or name.\n\nAny authenticated user can search for tag objects.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "manageObjectPrivilege", + "description": "\n Version: 26.3.0.cl or later\n\nThis API allows the addition or deletion of object level privileges for a set of users and groups, on a set of metadata objects. It provides users to access certain features based on privilege based access control.\n\n#### Usage guidelines\n\n- Specify the `operation`. The supported operations are: `ADD`, `REMOVE`.\n- Specify the type of the objects on which the object privileges are being provided in `metadata_type`. Only `LOGICAL_TABLE` metadata type is supported for now. It may be extended for other metadata types in future.\n- Specify the list of object privilege types in the `object_privilege_types` array. The supported object privilege types are: `SPOTTER_COACHING_PRIVILEGE`.\n- Specify the identifiers (either GUID or name) for the metadata objects in the `metadata_identifiers` array.\n- Specify the `type` (`USER` or `USER_GROUP`) and `identifier` (either GUID or name) of the principals to which you want to apply the given operation and given object privileges in the `principals` array.\n- Ensure using correct Authorization Bearer Token corresponding to specific user & org.\n\n#### Example request\n\n```json\n{\n \"operation\": \"operation-type\",\n \"metadata_type\": \"metadata-type\",\n \"object_privilege_types\": [\"privilege-type-1\", \"privilege-type-2\"],\n \"metadata_identifiers\": [\"metadata-guid-or-name-1\", \"metadata-guid-or-name-1\"],\n \"principals\": [\n {\n \"type\": \"type-1\", \n \"identifier\": \"principal-guid-or-name-1\"\n },\n {\n \"type\": \"type-2\",\n \"identifier\": \"principal-guid-or-name-2\"\n }\n ]\n}\n```\n\n> ###### Note:\n> * Only admin users, users with edit access and users with coaching privilege on a given data-model can add or remove principals related to SPOTTER_COACHING_PRIVILEGE \n\n\n\n#### Endpoint URL\n", "tags": [ - "Tags", - "9.0.0.cl" + "Security", + "26.3.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SearchTagsRequest" + "$ref": "#/components/schemas/ManageObjectPrivilegeRequest" } } }, @@ -10164,55 +10049,11 @@ }, "parameters": [], "responses": { - "200": { - "description": "Tags search result.", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Tag" - } - }, - "examples": { - "example_1": { - "value": [ - { - "name": "test4", - "id": "0935bbb5-17e2-43ab-b657-da6bf347cbb4", - "color": "#342323", - "deleted": false, - "hidden": false, - "external": false, - "deprecated": false, - "creation_time_in_millis": 1684937524885, - "modification_time_in_millis": 1684937524885, - "author_id": "59481331-ee53-42be-a548-bd87be6ddd4a", - "modifier_id": "59481331-ee53-42be-a548-bd87be6ddd4a", - "owner_id": "0935bbb5-17e2-43ab-b657-da6bf347cbb4" - }, - { - "name": "test6", - "id": "65a5c39a-daf5-4cae-975f-44283628494e", - "color": "#342323", - "deleted": false, - "hidden": false, - "external": false, - "deprecated": false, - "creation_time_in_millis": 1684988834183, - "modification_time_in_millis": 1684988887888, - "author_id": "59481331-ee53-42be-a548-bd87be6ddd4a", - "modifier_id": "59481331-ee53-42be-a548-bd87be6ddd4a", - "owner_id": "65a5c39a-daf5-4cae-975f-44283628494e" - } - ] - } - } - } - } + "204": { + "description": "Object privileges added/removed successfully" }, "400": { - "description": "Invalid request.", + "description": "Invalid request", "content": { "application/json": { "schema": { @@ -10222,7 +10063,7 @@ } }, "401": { - "description": "Unauthorized access.", + "description": "Unauthorized access", "content": { "application/json": { "schema": { @@ -10232,7 +10073,7 @@ } }, "403": { - "description": "Forbidden access.", + "description": "Forbidden access", "content": { "application/json": { "schema": { @@ -10254,19 +10095,19 @@ } } }, - "/api/rest/2.0/tags/unassign": { + "/api/rest/2.0/security/metadata/publish": { "post": { - "operationId": "unassignTag", - "description": "\n Version: 9.0.0.cl or later\n\nRemoves the tags applied to a Liveboard, Answer, Table, or Worksheet.\n\nRequires edit access to the metadata object.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "publishMetadata", + "description": "\n Version: 26.5.0.cl or later\n\nAllows publishing metadata objects across organizations in ThoughtSpot.\n\nRequires ADMINISTRATION role and TENANT scope.\n\nThe API endpoint allows publishing the following types of metadata objects:\n* Liveboards\n* Answers\n* Logical Tables\n\nThis API will essentially share the objects along with it's dependencies to\nthe org admins of the orgs to which it is being published.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Tags", - "9.0.0.cl" + "Security", + "26.5.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UnassignTagRequest" + "$ref": "#/components/schemas/PublishMetadataRequest" } } }, @@ -10275,7 +10116,7 @@ "parameters": [], "responses": { "204": { - "description": "Tags successfully unassigned." + "description": "Publishing metadata objects is successful." }, "400": { "description": "Invalid request.", @@ -10320,38 +10161,28 @@ } } }, - "/api/rest/2.0/tags/{tag_identifier}/update": { + "/api/rest/2.0/security/metadata/share": { "post": { - "operationId": "updateTag", - "description": "\n Version: 9.0.0.cl or later\n\nUpdates a tag object.\n\nYou can modify the `name` and `color` properties of a tag object. \n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `TAGMANAGEMENT` (**Can manage tags**) privilege is required to create, edit, and delete tags.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "shareMetadata", + "description": "\n Version: 9.0.0.cl or later\n\nAllows sharing one or several metadata objects with users and groups in ThoughtSpot.\n\nRequires edit access to the metadata object.\n\n#### Supported metadata objects:\n* Liveboards\n* Visualizations\n* Answers\n* Models\n* Views\n* Connections\n* Collections\n\n#### Object permissions\n\nYou can provide `READ_ONLY` or `MODIFY` access when sharing an object with another user or group. The `READ_ONLY` permission grants view access to the shared object, whereas `MODIFY` provides edit access.\n\nTo prevent a user or group from accessing the shared object, specify the GUID or name of the principal and set `shareMode` to `NO_ACCESS`.\n\n#### Sharing a visualization\n\n* Sharing a visualization implicitly shares the entire Liveboard with the recipient.\n* Object permissions set for a shared visualization also apply to the Liveboard unless overridden by another API request or via UI.\n* If email notifications for object sharing are enabled, a notification with a link to the shared visualization will be sent to the recipient’s email address. Although this link opens the shared visualization, recipients can also access other visualizations in the Liveboard.\n\n#### Sharing a collection\n\nCollections support **dual permissions** that provide fine-grained control:\n\n* **Collection permissions** (`share_mode`) - controls access to the collection itself (view, edit, delete the collection)\n* **Content permissions** (`content_share_mode`) - controls access to objects within the collection (view, edit objects inside)\n\n**Default Behavior:**\n- If only `share_mode` is specified, the content permissions default to `READ_ONLY` (except when `share_mode` is `NO_ACCESS`, then content also gets `NO_ACCESS`)\n- To give users edit access to collection contents, explicitly set `content_share_mode: \"MODIFY\"`\n\n## Examples\n\nThe following JSON examples can be copy-pasted as request bodies for the REST v2 API endpoint:\n\n```bash\nPOST /callosum/v1/v2/security/metadata/share\nContent-Type: application/x-www-form-urlencoded\n```\n\n### Basic collection sharing\nShare a collection with read-only access:\n\n```json\n{\n \"metadata_type\": \"COLLECTION\",\n \"metadata_identifiers\": [\"Sales Reports Collection\"],\n \"permissions\": [{\n \"principal\": {\n \"type\": \"USER\",\n \"identifier\": \"alice@company.com\"\n },\n \"share_mode\": \"READ_ONLY\"\n }],\n \"notification\": {\n \"message\": \"I've shared the Sales Reports collection with you\",\n \"notify_on_share\": true\n }\n}\n```\n\n### Collection sharing with dual permissions\nShare a collection with different permissions for the collection vs. its contents:\n\n```json\n{\n \"metadata_type\": \"COLLECTION\",\n \"metadata_identifiers\": [\"Marketing Analytics\"],\n \"permissions\": [{\n \"principal\": {\n \"type\": \"USER\",\n \"identifier\": \"bob@company.com\"\n },\n \"share_mode\": \"MODIFY\",\n \"content_share_mode\": \"READ_ONLY\"\n }, {\n \"principal\": {\n \"type\": \"USER_GROUP\",\n \"identifier\": \"Marketing Team\"\n },\n \"share_mode\": \"READ_ONLY\",\n \"content_share_mode\": \"READ_ONLY\"\n }],\n \"notification\": {\n \"emails\": [\"bob@company.com\"],\n \"message\": \"You can edit the collection but content is read-only\",\n \"enable_custom_url\": false,\n \"notify_on_share\": true\n },\n \"has_lenient_discoverability\": false\n}\n```\n\n### Multiple collections sharing\nShare multiple collections with different users:\n\n```json\n{\n \"metadata\": [\n {\n \"type\": \"COLLECTION\",\n \"identifier\": \"Q4 Reports\"\n },\n {\n \"type\": \"COLLECTION\",\n \"identifier\": \"Executive Dashboard Collection\"\n }\n ],\n \"permissions\": [{\n \"principal\": {\n \"type\": \"USER_GROUP\",\n \"identifier\": \"Executives\"\n },\n \"share_mode\": \"MODIFY\"\n }, {\n \"principal\": {\n \"type\": \"USER\",\n \"identifier\": \"manager@company.com\"\n },\n \"share_mode\": \"READ_ONLY\",\n \"content_share_mode\": \"MODIFY\"\n }],\n \"notification\": {\n \"message\": \"Sharing quarterly collections with leadership team\",\n \"notify_on_share\": true\n }\n}\n```\n\n### Remove collection access\nRemove access to a collection by setting share_mode to NO_ACCESS:\n\n```json\n{\n \"metadata_type\": \"COLLECTION\",\n \"metadata_identifiers\": [\"Confidential Reports\"],\n \"permissions\": [{\n \"principal\": {\n \"type\": \"USER\",\n \"identifier\": \"former-employee@company.com\"\n },\n \"share_mode\": \"NO_ACCESS\"\n }],\n \"notification\": {\n \"notify_on_share\": false\n }\n}\n```\n\n### Collection Permission Scenarios\n\n**Scenario 1: Collection Admin**\n- `share_mode: MODIFY` + `content_share_mode: MODIFY` = Full control over collection and its contents\n\n**Scenario 2: Collection Curator**\n- `share_mode: MODIFY` + `content_share_mode: READ_ONLY` = Can manage collection structure but not edit contents\n\n**Scenario 3: Content Editor**\n- `share_mode: READ_ONLY` + `content_share_mode: MODIFY` = Can edit objects within collection but can't change collection itself\n\n**Scenario 4: Viewer**\n- `share_mode: READ_ONLY` + `content_share_mode: READ_ONLY` = View-only access to collection and contents\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Tags", + "Security", "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateTagRequest" + "$ref": "#/components/schemas/ShareMetadataRequest" } } }, "required": true }, - "parameters": [ - { - "in": "path", - "name": "tag_identifier", - "required": true, - "schema": { - "type": "string" - }, - "description": "Name or Id of the tag." - } - ], + "parameters": [], "responses": { "204": { - "description": "Tag successfully updated." + "description": "Sharing metadata objects is successful." }, "400": { "description": "Invalid request.", @@ -10396,19 +10227,19 @@ } } }, - "/api/rest/2.0/users/activate": { + "/api/rest/2.0/security/metadata/unpublish": { "post": { - "operationId": "activateUser", - "description": "\n Version: 9.7.0.cl or later\n\nActivates a deactivated user account.\n\nRequires `ADMINISTRATION` (**Can administer Thoughtspot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `USER_ADMINISTRATION` (**Can manage users**) privilege is required.\n\nTo activate an inactive user account, the API request body must include the following information:\n\n- Username or the GUID of the user account.\n- Auth token generated for the deactivated user. The auth token is sent in the API response when a user is deactivated.\n- Password for the user account.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "unpublishMetadata", + "description": "\n Version: 26.5.0.cl or later\n\nAllows unpublishing metadata objects from organizations in ThoughtSpot.\n\nRequires ADMINISTRATION role and TENANT scope.\n\nThe API endpoint allows unpublishing the following types of metadata objects:\n* Liveboards\n* Answers\n* Logical Tables\n\nWhen unpublishing objects, you can:\n* Include dependencies by setting `include_dependencies` to true - this will unpublish all dependent objects if no other published object is using them\n* Force unpublish by setting `force` to true - this will break all dependent objects in the unpublished organizations\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Users", - "9.7.0.cl" + "Security", + "26.5.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ActivateUserRequest" + "$ref": "#/components/schemas/UnpublishMetadataRequest" } } }, @@ -10416,15 +10247,8 @@ }, "parameters": [], "responses": { - "200": { - "description": "User activated successfully.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - } + "204": { + "description": "Unpublishing metadata objects is successful." }, "400": { "description": "Invalid request.", @@ -10469,19 +10293,19 @@ } } }, - "/api/rest/2.0/users/change-password": { + "/api/rest/2.0/security/column/rules/update": { "post": { - "operationId": "changeUserPassword", - "description": "\n Version: 9.0.0.cl or later\n\nUpdates the current password of the user.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `USER_ADMINISTRATION` (**Can manage users**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "updateColumnSecurityRules", + "description": "\nBeta Version: 10.12.0.cl or later\n\nCreates, updates, or deletes column security rules for specified tables.\n\nThis API endpoint allows you to create, update, or delete column-level security rules on columns of a table. The operation follows an \"all or none\" policy: if defining security rules for any of the provided columns fails, the entire operation will be rolled back, and no rules will be created.\n\n#### Usage guidelines\n\n- Provide table identifier using either `identifier` (GUID or name) or `obj_identifier` (object ID)\n- Use `clear_csr: true` to remove all column security rules from the table\n- For each column, specify the security rule using `column_security_rules` array\n- Use `is_unsecured: true` to mark a specific column as unprotected\n- Use `group_access` operations to manage group associations:\n - `ADD`: Add groups to the column's access list\n - `REMOVE`: Remove groups from the column's access list\n - `REPLACE`: Replace all existing groups with the specified groups\n\n#### Required permissions\n\n- `ADMINISTRATION` - Can administer ThoughtSpot\n- `DATAMANAGEMENT` - Can manage data (if RBAC is disabled)\n- `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` - Can manage worksheet views and tables (if RBAC is enabled)\n\n#### Example request\n\n```json\n{\n \"identifier\": \"table-guid\",\n \"obj_identifier\": \"table-object-id\",\n \"clear_csr\": false,\n \"column_security_rules\": [\n {\n \"column_identifier\": \"col id or col name\",\n \"is_unsecured\": false,\n \"group_access\": [\n {\n \"operation\": \"ADD\",\n \"group_identifiers\": [\"hr_group_id\", \"hr_group_name\", \"finance_group_id\"]\n }\n ]\n },\n {\n \"column_identifier\": \"col id or col name\",\n \"is_unsecured\": true\n },\n {\n \"column_identifier\": \"col id or col name\",\n \"is_unsecured\": false,\n \"group_access\": [\n {\n \"operation\": \"REPLACE\",\n \"group_identifiers\": [\"management_group_id\", \"management_group_name\"]\n }\n ]\n }\n ]\n}\n```\n\n#### Request Body Schema\n\n- `identifier` (string, optional): GUID or name of the table for which we want to create column security rules\n- `obj_identifier` (string, optional): The object ID of the table\n- `clear_csr` (boolean, optional): If true, then all the secured columns will be marked as unprotected, and all the group associations will be removed\n- `column_security_rules` (array of objects, required): An array where each object defines the security rule for a specific column\n\nEach column security rule object contains:\n- `column_identifier` (string, required): Column identifier (col_id or name)\n- `is_unsecured` (boolean, optional): If true, the column will be marked as unprotected and all groups associated with it will be removed\n- `group_access` (array of objects, optional): Array of group operation objects\n\nEach group operation object contains:\n- `operation` (string, required): Operation type - ADD, REMOVE, or REPLACE\n- `group_identifiers` (array of strings, required): Array of group identifiers (name or GUID) on which the operation will be performed\n\n#### Response\n\nThis API does not return any response body. A successful operation returns HTTP 200 status code.\n\n#### Operation Types\n\n- **ADD**: Adds the specified groups to the column's access list\n- **REMOVE**: Removes the specified groups from the column's access list \n- **REPLACE**: Replaces all existing groups with the specified groups \n\n\n\n#### Endpoint URL\n", "tags": [ - "Users", - "9.0.0.cl" + "Security", + "10.12.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ChangeUserPasswordRequest" + "$ref": "#/components/schemas/UpdateColumnSecurityRulesRequest" } } }, @@ -10490,10 +10314,10 @@ "parameters": [], "responses": { "204": { - "description": "User password change operation successful." + "description": "Successfully updated column security rules" }, "400": { - "description": "Invalid request.", + "description": "Bad request - Invalid parameters or table not found", "content": { "application/json": { "schema": { @@ -10513,7 +10337,7 @@ } }, "403": { - "description": "Forbidden access.", + "description": "Forbidden - User doesn't have permission to modify security rules for this table", "content": { "application/json": { "schema": { @@ -10523,7 +10347,7 @@ } }, "500": { - "description": "Unexpected error", + "description": "Internal server error", "content": { "application/json": { "schema": { @@ -10535,19 +10359,19 @@ } } }, - "/api/rest/2.0/users/create": { + "/api/rest/2.0/customization/styles/fonts/delete": { "post": { - "operationId": "createUser", - "description": "\n Version: 9.0.0.cl or later\n\nCreates a user in ThoughtSpot.\n\nThe API endpoint allows you to configure several user properties such as email address, account status, share notification preferences, and sharing visibility. You can provision the user to [groups](https://docs.thoughtspot.com/cloud/latest/groups-privileges) and [Orgs](https://docs.thoughtspot.com/cloud/latest/orgs-overview). You can also add Liveboard, Answer, and Worksheet objects to the user’s favorites list, assign a default Liveboard for the user, and set user preferences.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `USER_ADMINISTRATION` (**Can manage users**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "deleteStyleFonts", + "description": "\n Version: 26.7.0.cl or later\n\nDeletes one or more custom fonts from the cluster-level or org-level font library. If a deleted font is assigned to visualization areas, those assignments automatically fallback to the cluster/system default font. The response lists all affected areas where the font was explicitly set. Note: dry_run defaults to true. To actually delete fonts, you must explicitly pass dry_run: false.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege.\n\n#### Usage guidelines\n\n- Provide one or more font UUIDs or names in `font_identifiers`.\n- Set `scope` to `CLUSTER` to delete from the cluster-level library. Set `scope` to `ORG` (default) to delete from the authenticated user's org library.\n- Use `dry_run: true` to preview which visualization areas would be affected without actually deleting the font. The response lists affected assignments; no changes are applied.\n- Deletions cannot be undone. Re-upload the font file using `uploadStyleFont` if needed.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Users", - "9.0.0.cl" + "Style Customization", + "26.7.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateUserRequest" + "$ref": "#/components/schemas/DeleteStyleFontsRequest" } } }, @@ -10556,11 +10380,36 @@ "parameters": [], "responses": { "200": { - "description": "User successfully created.", + "description": "Font deleted successfully.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/User" + "$ref": "#/components/schemas/StyleFontDeleteData" + }, + "examples": { + "example_1": { + "summary": "Font deleted with affected assignments", + "value": { + "affected_assignments": [ + { + "org": { + "id": 1234567890, + "name": "Sales" + }, + "visualization_areas": [ + "CHART_X_AXIS_LABELS", + "CHART_Y_AXIS_LABELS" + ] + } + ] + } + }, + "example_2": { + "summary": "Font deleted with no affected assignments", + "value": { + "affected_assignments": [] + } + } } } } @@ -10571,6 +10420,21 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "invalid_request": { + "summary": "Invalid request", + "value": { + "error": { + "message": { + "code": 10002, + "incident_id_guid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "trace_id_guid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "debug": "Field 'font_identifiers' must contain at least one identifier." + } + } + } + } } } } @@ -10581,6 +10445,21 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "unauthorized_access": { + "summary": "Unauthorized access", + "value": { + "error": { + "message": { + "code": 10097, + "incident_id_guid": "b2c3d4e5-f678-9012-bcde-f23456789012", + "trace_id_guid": "b2c3d4e5-f678-9012-bcde-f23456789012", + "debug": "Authentication required to delete custom fonts from the font library." + } + } + } + } } } } @@ -10591,6 +10470,21 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "forbidden_access": { + "summary": "Forbidden access", + "value": { + "error": { + "message": { + "code": 10023, + "incident_id_guid": "c3d4e5f6-7890-1234-cdef-345678901234", + "trace_id_guid": "c3d4e5f6-7890-1234-cdef-345678901234", + "debug": "Only Tenant admin can delete cluster-level fonts." + } + } + } + } } } } @@ -10601,6 +10495,21 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "unexpected_error": { + "summary": "Unexpected error", + "value": { + "error": { + "message": { + "code": 10038, + "incident_id_guid": "d4e5f678-9012-3456-defa-456789012345", + "trace_id_guid": "d4e5f678-9012-3456-defa-456789012345", + "debug": "Unexpected server error while deleting fonts from the font library." + } + } + } + } } } } @@ -10608,19 +10517,19 @@ } } }, - "/api/rest/2.0/users/deactivate": { + "/api/rest/2.0/customization/styles/logos/export": { "post": { - "operationId": "deactivateUser", - "description": "\n Version: 9.7.0.cl or later\n\nDeactivates a user account.\n\nRequires `ADMINISTRATION` (**Can administer Thoughtspot**) privilege. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `USER_ADMINISTRATION` (**Can manage users**) privilege is required.\n\nTo deactivate a user account, the API request body must include the following information:\n\n- Username or the GUID of the user account\n- Base URL of the ThoughtSpot instance\n\nIf the API request is successful, ThoughtSpot returns the activation URL in the response. The activation URL is valid for 14 days and can be used to re-activate the account and reset the password of the deactivated account.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "exportStyleLogos", + "description": "\n Version: 26.7.0.cl or later\n\nDownloads the active logos (default and wide slots) at the requested scope as a single ZIP archive containing both logo image files. If no custom logo has been uploaded at the ORG scope, the archive contains the resolved logo falling through from the cluster. If no cluster logo has been uploaded, no file is returned.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege.\n\n#### Usage guidelines\n\n- Set `scope` to `CLUSTER` to download cluster-level logos.\n- Set `scope` to `ORG` (default) to download logos for the authenticated user's org.\n- The response is a ZIP archive (`application/zip`). Save the response body directly to a `.zip` file.\n- The archive always contains two files — one for the DEFAULT slot and one for the WIDE slot — even if no custom logo is set at the requested scope.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Users", - "9.7.0.cl" + "Style Customization", + "26.7.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeactivateUserRequest" + "$ref": "#/components/schemas/ExportStyleLogosRequest" } } }, @@ -10629,13 +10538,9 @@ "parameters": [], "responses": { "200": { - "description": "User deactivated successfully.", + "description": "Logo ZIP archive retrieved successfully.", "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ResponseActivationURL" - } - } + "application/octet-stream": {} } }, "400": { @@ -10681,28 +10586,283 @@ } } }, - "/api/rest/2.0/users/{user_identifier}/delete": { + "/api/rest/2.0/customization/styles/search": { "post": { - "operationId": "deleteUser", - "description": "\n Version: 9.0.0.cl or later\n\nDeletes a user from the ThoughtSpot system.\n\nIf you want to remove a user from a specific Org but not from ThoughtSpot, update the group and Org mapping properties of the user object via a POST API call to the [/api/rest/2.0/users/{user_identifier}/update](#/http/api-endpoints/users/update-user) endpoint.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `USER_ADMINISTRATION` (**Can manage users**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "searchStyleCustomizations", + "description": "\n Version: 26.7.0.cl or later\n\nRetrieves style preferences at cluster level or for the authenticated user's org. Cluster-level preferences serve as defaults for all orgs. Org-level preferences override cluster defaults.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege.\n\n#### Usage guidelines\n\n- Set `scope` to `CLUSTER` to retrieve cluster-level style defaults.\n- Set `scope` to `ORG` (default) to retrieve preferences for the authenticated user's org.\n- Each field in the response includes an `is_overridden` flag indicating whether the value was explicitly set at the requested scope or inherited from a parent scope (cluster or system default).\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Users", - "9.0.0.cl" - ], - "parameters": [ - { - "in": "path", - "name": "user_identifier", - "required": true, - "schema": { - "type": "string" - }, - "description": "GUID / name of the user" - } + "Style Customization", + "26.7.0.cl" ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SearchStyleCustomizationsRequest" + } + } + }, + "required": true + }, + "parameters": [], "responses": { - "204": { - "description": "User successfully deleted." + "200": { + "description": "Style preferences retrieved successfully.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/StylePreference" + } + }, + "examples": { + "example_1": { + "value": [ + { + "scope": "CLUSTER", + "navigation_panel": { + "theme": "DARK", + "is_overridden": false + }, + "chart_color_palette": { + "colors": [ + { + "primary": "#2359B6", + "secondary": [ + "#1A4690", + "#0E2E66", + "#07194A", + "#030D30" + ] + }, + { + "primary": "#E8552D", + "secondary": [ + "#C4421A", + "#9E2F0D", + "#7A2005", + "#581302" + ] + }, + { + "primary": "#F5A623", + "secondary": [ + "#D08B0E", + "#A86E05", + "#825202", + "#5E3900" + ] + }, + { + "primary": "#7ED321", + "secondary": [ + "#62A815", + "#488009", + "#305A03", + "#1C3800" + ] + }, + { + "primary": "#9B59B6", + "secondary": [ + "#7D3F9A", + "#612C7E", + "#481C62", + "#320F48" + ] + }, + { + "primary": "#1ABC9C", + "secondary": [ + "#0E9E81", + "#077F67", + "#03624E", + "#014838" + ] + }, + { + "primary": "#E74C3C", + "secondary": [ + "#C0392B", + "#9A2518", + "#761409", + "#540703" + ] + }, + { + "primary": "#3498DB", + "secondary": [ + "#1A7DC0", + "#0E60A0", + "#074580", + "#032C60" + ] + } + ], + "disable_color_rotation": false, + "is_overridden": false + }, + "embedded_footer_text": { + "value": "", + "is_overridden": false + }, + "logo": { + "default_logo": { + "id": "a1b2c3d4-0001-0001-0001-000000000001", + "is_overridden": false + }, + "wide_logo": { + "id": "a1b2c3d4-0002-0002-0002-000000000002", + "is_overridden": false + } + }, + "visualization_fonts": { + "chart_visualization_fonts": [ + { + "visualization_area": "CHART_X_AXIS_LABELS", + "font_id": null, + "font_name": null, + "is_overridden": false + } + ], + "table_visualization_fonts": [ + { + "visualization_area": "TABLE_VALUE_CELLS", + "font_id": null, + "font_name": null, + "is_overridden": false + } + ] + } + }, + { + "scope": "ORG", + "org": { + "id": 1234567890, + "name": "Sales" + }, + "navigation_panel": { + "theme": "CUSTOM", + "base_color": "#2359B6", + "is_overridden": true + }, + "chart_color_palette": { + "colors": [ + { + "primary": "#2359B6", + "secondary": [ + "#1A4690", + "#0E2E66", + "#07194A", + "#030D30" + ] + }, + { + "primary": "#E8552D", + "secondary": [ + "#C4421A", + "#9E2F0D", + "#7A2005", + "#581302" + ] + }, + { + "primary": "#F5A623", + "secondary": [ + "#D08B0E", + "#A86E05", + "#825202", + "#5E3900" + ] + }, + { + "primary": "#7ED321", + "secondary": [ + "#62A815", + "#488009", + "#305A03", + "#1C3800" + ] + }, + { + "primary": "#9B59B6", + "secondary": [ + "#7D3F9A", + "#612C7E", + "#481C62", + "#320F48" + ] + }, + { + "primary": "#1ABC9C", + "secondary": [ + "#0E9E81", + "#077F67", + "#03624E", + "#014838" + ] + }, + { + "primary": "#E74C3C", + "secondary": [ + "#C0392B", + "#9A2518", + "#761409", + "#540703" + ] + }, + { + "primary": "#3498DB", + "secondary": [ + "#1A7DC0", + "#0E60A0", + "#074580", + "#032C60" + ] + } + ], + "disable_color_rotation": false, + "is_overridden": false + }, + "embedded_footer_text": { + "value": "Powered by Sales Analytics", + "is_overridden": true + }, + "logo": { + "default_logo": { + "id": "b2c3d4e5-0001-0001-0001-000000000011", + "is_overridden": true + }, + "wide_logo": { + "id": "b2c3d4e5-0002-0002-0002-000000000022", + "is_overridden": true + } + }, + "visualization_fonts": { + "chart_visualization_fonts": [ + { + "visualization_area": "CHART_X_AXIS_LABELS", + "font_id": "c3d4e5f6-1111-1111-1111-111111111111", + "font_name": "Acme Sans", + "is_overridden": true + } + ], + "table_visualization_fonts": [ + { + "visualization_area": "TABLE_VALUE_CELLS", + "font_id": null, + "font_name": "Optimo-Plain, Helvetica Neue, Helvetica, Arial, sans-serif", + "is_overridden": false + } + ] + } + } + ] + } + } + } + } }, "400": { "description": "Invalid request.", @@ -10710,6 +10870,21 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "invalid_request": { + "summary": "Invalid request", + "value": { + "error": { + "message": { + "code": 10002, + "incident_id_guid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "trace_id_guid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "debug": "Field 'org_identifiers' is only allowed when scope is ORG." + } + } + } + } } } } @@ -10720,6 +10895,21 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "unauthorized_access": { + "summary": "Unauthorized access", + "value": { + "error": { + "message": { + "code": 10097, + "incident_id_guid": "b2c3d4e5-f678-9012-bcde-f23456789012", + "trace_id_guid": "b2c3d4e5-f678-9012-bcde-f23456789012", + "debug": "Authentication required to retrieve style preferences for the cluster or org." + } + } + } + } } } } @@ -10730,6 +10920,21 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "forbidden_access": { + "summary": "Forbidden access", + "value": { + "error": { + "message": { + "code": 10023, + "incident_id_guid": "c3d4e5f6-7890-1234-cdef-345678901234", + "trace_id_guid": "c3d4e5f6-7890-1234-cdef-345678901234", + "debug": "Cluster config can only be accessed from PRIMARY org." + } + } + } + } } } } @@ -10740,6 +10945,21 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "unexpected_error": { + "summary": "Unexpected error", + "value": { + "error": { + "message": { + "code": 10038, + "incident_id_guid": "d4e5f678-9012-3456-defa-456789012345", + "trace_id_guid": "d4e5f678-9012-3456-defa-456789012345", + "debug": "Unexpected server error while retrieving style customization preferences." + } + } + } + } } } } @@ -10747,19 +10967,19 @@ } } }, - "/api/rest/2.0/users/force-logout": { + "/api/rest/2.0/customization/styles/fonts/search": { "post": { - "operationId": "forceLogoutUsers", - "description": "\n Version: 9.0.0.cl or later\n\nEnforces logout on current user sessions. \n\nUse this API with caution as it may invalidate active user sessions and force users to re-login. Make sure you specify the usernames or GUIDs. If you pass null values in the API call, all user sessions on your cluster become invalid, and the users are forced to re-login.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `USER_ADMINISTRATION` (**Can manage users**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "searchStyleFonts", + "description": "\n Version: 26.7.0.cl or later\n\nReturns custom fonts from the cluster-level or org-level font library. Omitting all filter fields returns all fonts in the target scope.\n\nWhen `include_font_assignments` is `true`, the response includes only the visualization areas explicitly assigned to each font. For cluster-scoped fonts, `org` is returned as `null`.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege.\n\n#### Usage guidelines\n\n- Set `scope` to `CLUSTER` to search the cluster-level library. Set `scope` to `ORG` (default) to search the authenticated user's org library.\n- Use `font_identifier` to look up a specific font by UUID or name.\n- Use `name_pattern` for partial, case-insensitive name matching.\n- Set `include_font_assignments` to `true` to include visualization areas this font is currently assigned to. Defaults to `false`.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Users", - "9.0.0.cl" + "Style Customization", + "26.7.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ForceLogoutUsersRequest" + "$ref": "#/components/schemas/SearchStyleFontsRequest" } } }, @@ -10767,28 +10987,109 @@ }, "parameters": [], "responses": { - "204": { - "description": "Force logging out of users operation successful." - }, - "400": { - "description": "Invalid request.", + "200": { + "description": "Custom fonts retrieved successfully.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" + "type": "array", + "items": { + "$ref": "#/components/schemas/StyleFontRecord" + } + }, + "examples": { + "example_1": { + "value": [ + { + "id": "c3d4e5f6-1111-1111-1111-111111111111", + "scope": "ORG", + "org": { + "id": 1234567890, + "name": "Sales" + }, + "name": "Acme Sans", + "weight": "NORMAL", + "style": "NORMAL", + "color": "#333333", + "creation_time_in_millis": 1714000000000, + "assignments": [ + { + "org": { + "id": 1234567890, + "name": "Sales" + }, + "visualization_areas": [ + "CHART_X_AXIS_LABELS", + "CHART_Y_AXIS_LABELS" + ] + } + ] + }, + { + "id": "d4e5f6a7-2222-2222-2222-222222222222", + "scope": "CLUSTER", + "name": "Corporate Bold", + "weight": "BOLD", + "style": "NORMAL", + "color": "#000000", + "creation_time_in_millis": 1713500000000, + "assignments": [] + } + ] + } } } } }, - "401": { - "description": "Unauthorized access.", + "400": { + "description": "Invalid request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" - } - } - } + }, + "examples": { + "invalid_request": { + "summary": "Invalid request", + "value": { + "error": { + "message": { + "code": 10002, + "incident_id_guid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "trace_id_guid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "debug": "Only one of 'font_identifier' or 'name_pattern' may be provided." + } + } + } + } + } + } + } + }, + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "unauthorized_access": { + "summary": "Unauthorized access", + "value": { + "error": { + "message": { + "code": 10097, + "incident_id_guid": "b2c3d4e5-f678-9012-bcde-f23456789012", + "trace_id_guid": "b2c3d4e5-f678-9012-bcde-f23456789012", + "debug": "Authentication required to search the cluster-level or org-level font library." + } + } + } + } + } + } + } }, "403": { "description": "Forbidden access.", @@ -10796,6 +11097,21 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "forbidden_access": { + "summary": "Forbidden access", + "value": { + "error": { + "message": { + "code": 10023, + "incident_id_guid": "c3d4e5f6-7890-1234-cdef-345678901234", + "trace_id_guid": "c3d4e5f6-7890-1234-cdef-345678901234", + "debug": "Cluster config can only be accessed from PRIMARY org." + } + } + } + } } } } @@ -10806,6 +11122,21 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "unexpected_error": { + "summary": "Unexpected error", + "value": { + "error": { + "message": { + "code": 10038, + "incident_id_guid": "d4e5f678-9012-3456-defa-456789012345", + "trace_id_guid": "d4e5f678-9012-3456-defa-456789012345", + "debug": "Unexpected server error while searching the font library." + } + } + } + } } } } @@ -10813,19 +11144,102 @@ } } }, - "/api/rest/2.0/users/import": { + "/api/rest/2.0/customization/styles/update": { "post": { - "operationId": "importUsers", - "description": "\n Version: 9.0.0.cl or later\n\nImports user data from external databases into ThoughtSpot. During the user import operation:\n\n* If the specified users are not available in ThoughtSpot, the users are created and assigned a default password. Defining a `default_password` in the API request is optional.\n* If `delete_unspecified_users` is set to `true`, the users not specified in the API request, excluding the `tsadmin`, `guest`, `system` and `su` users, are deleted.\n* If the specified user objects are already available in ThoughtSpot, the object properties are updated and synchronized as per the input data in the API request.\n\nA successful API call returns the object that represents the changes made in the ThoughtSpot system.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `USER_ADMINISTRATION` (**Can manage users**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "updateStyleCustomization", + "description": "\n Version: 26.7.0.cl or later\n\nUpdates style preferences at cluster level or for the authenticated user's org, including navigation panel color, chart color palette, embedded footer text, logo, and font assignments per visualization area. Cluster-level preferences serve as defaults for all orgs. Org-level preferences override cluster defaults. Resetting an Org-level preference falls back to Cluster-level preference, which on reset falls back to system defaults.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege.\n\n#### Usage guidelines\n\nTwo operations are supported via the `operation` field:\n\n- **REPLACE** (default): Applies the fields provided in the request. Omitted fields remain unchanged.\n- **RESET**: Reverts specific fields to defaults. Specify which fields to reset using `reset_options.style` (for style fields) and `reset_options.visualization_areas` (for font assignments). Fields not listed in `reset_options` are not affected.\n\n#### Logo upload\n\nLogo files are uploaded as binary fields using `multipart/form-data`:\n\n- `default_logo`: Square app icon and favicon. Recommended size: 140×140 px. Accepted formats: PNG, JPG.\n- `wide_logo`: Horizontal top nav bar logo. Recommended size: 230×45 px. Accepted formats: PNG, JPG.\n\nTo reset a logo to the default, use `operation: RESET` with `reset_options.style` set to `DEFAULT_LOGO` or `WIDE_LOGO`.\n\n#### Navigation panel color\n\nSet `navigation_panel.theme` to one of:\n\n- `DARK`: Default dark theme.\n- `TWO_TONE`: Dual-tone panel style.\n- `CUSTOM`: User-defined color. Provide `navigation_panel.base_color` as a 6-digit hex string (e.g. `#2359B6`).\n\n#### Chart color palette\n\nProvide exactly 8 color entries in `chart_color_palette.colors`. Each entry requires a `primary` hex color. If `secondary` shades are omitted, the server auto-generates 4 shades from the primary color.\n\n#### Font assignments\n\nSpecify `visualization_fonts.chart_visualization_fonts` and `visualization_fonts.table_visualization_fonts` to assign custom fonts to specific visualization areas. Only provide the areas you want to update; omitted areas remain unchanged.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Users", - "9.0.0.cl" + "Style Customization", + "26.7.0.cl" ], "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/ImportUsersRequest" + "type": "object", + "properties": { + "scope": { + "description": "Scope at which to apply the preferences. CLUSTER sets cluster-level\ndefaults for all orgs. ORG applies to the authenticated user's org.", + "default": "ORG", + "type": "string", + "enum": [ + "CLUSTER", + "ORG" + ] + }, + "operation": { + "description": "Operation to perform. REPLACE (default) applies the provided fields and\nleaves omitted fields unchanged. RESET reverts fields listed in\nreset_options to defaults.", + "default": "REPLACE", + "type": "string", + "enum": [ + "REPLACE", + "RESET" + ] + }, + "reset_options": { + "description": "Fields to reset when operation is RESET. Specify style fields and\nvisualization areas to revert to defaults.", + "allOf": [ + { + "$ref": "#/components/schemas/StyleResetOptionsInput" + } + ] + }, + "navigation_panel": { + "description": "Navigation panel color. Provide theme and, when theme is CUSTOM, also\nprovide base_color.", + "allOf": [ + { + "$ref": "#/components/schemas/NavigationPanelInput" + } + ] + }, + "chart_color_palette": { + "description": "Chart color palette. When provided with operation REPLACE, exactly 8\ncolor entries must be specified in colors.", + "allOf": [ + { + "$ref": "#/components/schemas/StyleColorPaletteInput" + } + ] + }, + "embedded_footer_text": { + "description": "Custom footer text for the embedded application. An empty\nstring clears the footer.", + "type": "string" + }, + "visualization_fonts": { + "description": "Font assignments per visualization area. Provide only the areas to\nupdate; omitted areas remain unchanged.", + "allOf": [ + { + "$ref": "#/components/schemas/VisualizationFontsInput" + } + ] + }, + "default_logo": { + "description": "Binary image for the DEFAULT logo slot (square app icon and favicon;\nrecommended 140x140 px). Accepted formats: PNG, JPG.", + "type": "string", + "format": "binary" + }, + "wide_logo": { + "description": "Binary image for the WIDE logo slot (horizontal top nav bar logo;\nrecommended 230x45 px). Accepted formats: PNG, JPG.", + "type": "string", + "format": "binary" + } + }, + "required": [ + "scope" + ] + }, + "encoding": { + "reset_options": { + "contentType": "application/json" + }, + "navigation_panel": { + "contentType": "application/json" + }, + "chart_color_palette": { + "contentType": "application/json" + }, + "visualization_fonts": { + "contentType": "application/json" + } } } }, @@ -10833,15 +11247,8 @@ }, "parameters": [], "responses": { - "200": { - "description": "Import users operation successful.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ImportUsersResponse" - } - } - } + "204": { + "description": "Style preferences updated successfully." }, "400": { "description": "Invalid request.", @@ -10886,28 +11293,38 @@ } } }, - "/api/rest/2.0/users/reset-password": { + "/api/rest/2.0/customization/styles/fonts/{font_identifier}/update": { "post": { - "operationId": "resetUserPassword", - "description": "\n Version: 9.0.0.cl or later\n\nResets the password of a user account. Administrators can reset password on behalf of a user.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `USER_ADMINISTRATION` (**Can manage users**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "updateStyleFont", + "description": "\n Version: 26.7.0.cl or later\n\nUpdates the metadata of an existing custom font in the cluster-level or org-level font library. Only the fields provided in the request are modified; omitted fields remain unchanged.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege.\n\n#### Usage guidelines\n\n- Identify the font using `font_identifier` (UUID or name).\n- Set `scope` to `CLUSTER` to target the cluster-level library. Set `scope` to `ORG` (default) to target the authenticated user's org library.\n- To replace the font file itself (WOFF/WOFF2 binary), delete the existing font and re-upload using `uploadStyleFont`.\n- `name` must be unique within the target scope if provided.\n- `color` must be a valid 6-digit hex string (e.g. `#333333`) if provided.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Users", - "9.0.0.cl" + "Style Customization", + "26.7.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ResetUserPasswordRequest" + "$ref": "#/components/schemas/UpdateStyleFontRequest" } } }, "required": true }, - "parameters": [], + "parameters": [ + { + "in": "path", + "name": "font_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "UUID or name of the font to update." + } + ], "responses": { "204": { - "description": "User password reset operation successful." + "description": "Font metadata updated successfully." }, "400": { "description": "Invalid request.", @@ -10940,7 +11357,7 @@ } }, "500": { - "description": "Unexpected error", + "description": "Unexpected error.", "content": { "application/json": { "schema": { @@ -10952,19 +11369,67 @@ } } }, - "/api/rest/2.0/users/search": { + "/api/rest/2.0/customization/styles/fonts/upload": { "post": { - "operationId": "searchUsers", - "description": "\n Version: 9.0.0.cl or later\n\nGets a list of users available on the ThoughtSpot system.\n\nTo get details of a specific user, specify the user GUID or name. You can also filter the API response based on groups, Org ID, user visibility, account status, user type, and user preference settings and favorites.\n\nAvailable to all users. Users with `ADMINISTRATION` (**Can administer ThoughtSpot**) privileges can view all users properties. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `USER_ADMINISTRATION` (**Can manage users**) privilege is required.\n\n**NOTE**: If the API returns an empty list, consider increasing the value of the `record_size` parameter. To search across all available users, set `record_size` to `-1`.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "uploadStyleFont", + "description": "\n Version: 26.7.0.cl or later\n\nUploads a custom font to the cluster-level or org-level font library. Cluster-level fonts are available as defaults for all orgs. Org-level fonts are only available within that org.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege.\n\n#### Usage guidelines\n\n- Only **WOFF** and **WOFF2** font formats are accepted. TTF and OTF files are rejected with an error.\n- The `name` field must be unique within the target scope. Uploading a font with a name that already exists returns an error.\n- Set `scope` to `CLUSTER` to upload to the cluster-level library. Set `scope` to `ORG` (default) to upload to the authenticated user's org library.\n- `weight` defaults to `NORMAL` if omitted. Supported values: `NORMAL`, `LIGHT`, `BOLD`.\n- `style` defaults to `NORMAL` if omitted. Supported values: `NORMAL`, `ITALIC`, `OBLIQUE`.\n- `color` defaults to `#000000` (black) if omitted. Provide as a 6-digit hex string (e.g. `#333333`).\n- The uploaded font can be assigned to visualization areas using the `updateStyleCustomization` endpoint.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Users", - "9.0.0.cl" + "Style Customization", + "26.7.0.cl" ], "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/SearchUsersRequest" + "type": "object", + "properties": { + "scope": { + "description": "Scope of the font library to upload to. CLUSTER uploads to the\ncluster-level library, making the font available as a default for all\norgs. ORG uploads to the authenticated user's org library. Defaults to\nORG if omitted.", + "default": "ORG", + "type": "string", + "enum": [ + "CLUSTER", + "ORG" + ] + }, + "name": { + "description": "Display name for the font (e.g. \"Acme Sans\"). Must be unique within the\ntarget scope; returns an error if a font with this name already exists.", + "type": "string" + }, + "weight": { + "description": "Weight of the font. Supported values: NORMAL, LIGHT, BOLD. Defaults to\nNORMAL if omitted.", + "default": "NORMAL", + "type": "string", + "enum": [ + "NORMAL", + "LIGHT", + "BOLD" + ] + }, + "style": { + "description": "Style of the font. Supported values: NORMAL, ITALIC, OBLIQUE. Defaults\nto NORMAL if omitted.", + "default": "NORMAL", + "type": "string", + "enum": [ + "NORMAL", + "ITALIC", + "OBLIQUE" + ] + }, + "color": { + "description": "Color of the font as a 6-digit hex string (e.g. \"#333333\"). Defaults to\n#000000 (black) if omitted. Returns an error if the value is malformed.", + "type": "string" + }, + "file_content": { + "description": "Binary WOFF or WOFF2 font file to upload. Only WOFF and WOFF2 formats\nare accepted; TTF and OTF are rejected. The file is validated on upload.", + "type": "string", + "format": "binary" + } + }, + "required": [ + "name", + "file_content" + ] } } }, @@ -10973,13 +11438,18 @@ "parameters": [], "responses": { "200": { - "description": "User search result.", + "description": "Font uploaded successfully.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/User" + "$ref": "#/components/schemas/StyleFontUploadData" + }, + "examples": { + "example_1": { + "value": { + "id": "c3d4e5f6-1111-1111-1111-111111111111", + "name": "Acme Sans" + } } } } @@ -10991,6 +11461,21 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "invalid_request": { + "summary": "Invalid request", + "value": { + "error": { + "message": { + "code": 10002, + "incident_id_guid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "trace_id_guid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "debug": "Unsupported font format. Only WOFF and WOFF2 are accepted." + } + } + } + } } } } @@ -11001,6 +11486,21 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "unauthorized_access": { + "summary": "Unauthorized access", + "value": { + "error": { + "message": { + "code": 10097, + "incident_id_guid": "b2c3d4e5-f678-9012-bcde-f23456789012", + "trace_id_guid": "b2c3d4e5-f678-9012-bcde-f23456789012", + "debug": "Authentication required to upload a custom font to the font library." + } + } + } + } } } } @@ -11011,6 +11511,21 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "forbidden_access": { + "summary": "Forbidden access", + "value": { + "error": { + "message": { + "code": 10023, + "incident_id_guid": "c3d4e5f6-7890-1234-cdef-345678901234", + "trace_id_guid": "c3d4e5f6-7890-1234-cdef-345678901234", + "debug": "Cluster config can only be accessed from PRIMARY org." + } + } + } + } } } } @@ -11021,6 +11536,21 @@ "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" + }, + "examples": { + "unexpected_error": { + "summary": "Unexpected error", + "value": { + "error": { + "message": { + "code": 10038, + "incident_id_guid": "d4e5f678-9012-3456-defa-456789012345", + "trace_id_guid": "d4e5f678-9012-3456-defa-456789012345", + "debug": "Unexpected server error while uploading the custom font." + } + } + } + } } } } @@ -11028,38 +11558,28 @@ } } }, - "/api/rest/2.0/users/{user_identifier}/update": { + "/api/rest/2.0/system/preferences/communication-channels/configure": { "post": { - "operationId": "updateUser", - "description": "\n Version: 9.0.0.cl or later\n\nUpdates the properties of a user object.\n\nYou can modify user properties such as username, email, and share notification settings. You can also assign new groups and Orgs, remove the user from a group or Org, reset password, and modify user preferences.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `USER_ADMINISTRATION` (**Can manage users**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "configureCommunicationChannelPreferences", + "description": "\nBeta Version: 10.14.0.cl or later\n\nConfigure communication channel preferences.\n- Use `cluster_preferences` to update the default preferences for your ThoughtSpot application instance.\n- If your instance has [Orgs](https://docs.thoughtspot.com/cloud/latest/orgs-overview), use `org_preferences` to specify Org-specific preferences that override the defaults.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, users with `APPLICATION_ADMINISTRATION` (**Can manage application settings**) privilege are also authorized to perform this action.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Users", - "9.0.0.cl" + "System", + "10.14.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateUserRequest" + "$ref": "#/components/schemas/ConfigureCommunicationChannelPreferencesRequest" } } }, "required": true }, - "parameters": [ - { - "in": "path", - "name": "user_identifier", - "required": true, - "schema": { - "type": "string" - }, - "description": "GUID / name of the user" - } - ], + "parameters": [], "responses": { "204": { - "description": "User successfully updated." + "description": "Communication channel preferences successfully updated." }, "400": { "description": "Invalid request.", @@ -11104,19 +11624,19 @@ } } }, - "/api/rest/2.0/template/variables/create": { + "/api/rest/2.0/system/security-settings/configure": { "post": { - "operationId": "createVariable", - "description": "\nCreate a variable which can be used for parameterizing metadata objects
Version: 26.4.0.cl or later\n\nAllows creating a variable which can be used for parameterizing metadata objects in ThoughtSpot.\n\nRequires ADMINISTRATION role and TENANT scope.\nThe CAN_MANAGE_VARIABLES permission allows you to manage Formula Variables in the current organization scope.\n\nThe API endpoint supports the following types of variables:\n* CONNECTION_PROPERTY - For connection properties\n* TABLE_MAPPING - For table mappings\n* CONNECTION_PROPERTY_PER_PRINCIPAL - For connection properties per principal. In order to use this please contact support to enable this.\n* FORMULA_VARIABLE - For Formula variables, introduced in 10.15.0.cl\n\nWhen creating a variable, you need to specify:\n* The variable type\n* A unique name for the variable\n* Whether the variable contains sensitive values (defaults to false)\n* The data type of the variable, only specify for formula variables (defaults to null)\n\nThe operation will fail if:\n* The user lacks required permissions\n* The variable name already exists\n* The variable type is invalid\n\n\n\n#### Endpoint URL\n", + "operationId": "configureSecuritySettings", + "description": "\n Version: 26.2.0.cl or later\n\nConfigure security settings for your ThoughtSpot application instance.\n- Use `cluster_preferences` to update cluster-level security settings including CORS whitelisted URLs, CSP settings, SAML redirect URLs, partitioned cookies, and non-embed access configuration.\n- Use `org_preferences` to configure Org-specific security settings. If your instance has [Orgs](https://docs.thoughtspot.com/cloud/latest/orgs-overview), this allows configuring CORS and non-embed access settings specific to the Org.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege. Cluster-level SAML and script-src settings require `ADMINISTRATION` privilege.\nSee [Security Settings](https://developers.thoughtspot.com/docs/security-settings) for more details.\n\n\n\n#### Endpoint URL\n", "tags": [ - "Variable", - "26.4.0.cl" + "System", + "26.2.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateVariableRequest" + "$ref": "#/components/schemas/ConfigureSecuritySettingsRequest" } } }, @@ -11124,15 +11644,8 @@ }, "parameters": [], "responses": { - "200": { - "description": "Create variable is successful.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Variable" - } - } - } + "204": { + "description": "Successfully configured the security settings." }, "400": { "description": "Invalid request.", @@ -11177,29 +11690,34 @@ } } }, - "/api/rest/2.0/template/variables/{identifier}/delete": { - "post": { - "operationId": "deleteVariable", - "description": "\nDelete a variable
Version: 10.14.0.cl or later\n\n**Note:** This API endpoint is deprecated and will be removed from ThoughtSpot in a future release. Use [POST /api/rest/2.0/template/variables/delete](/api/rest/2.0/template/variables/delete) instead.\n\nAllows deleting a variable from ThoughtSpot.\n\nRequires ADMINISTRATION role and TENANT scope.\nThe CAN_MANAGE_VARIABLES permission allows you to manage Formula Variables in the current organization scope.\n\nThe API endpoint requires:\n* The variable identifier (ID or name)\n\nThe operation will fail if:\n* The user lacks required permissions\n* The variable doesn't exist\n* The variable is being used by other objects \n\n\n\n#### Endpoint URL\n", - "deprecated": true, + "/api/rest/2.0/system/config": { + "get": { + "operationId": "getSystemConfig", + "description": "\n Version: 9.0.0.cl or later\n\nRetrieves the current configuration details of the cluster. If the request is successful, the API returns a list configuration settings applied on the cluster.\n\nRequires `ADMINISTRATION`(**Can administer ThoughtSpot**) privilege to view these complete configuration settings of the cluster.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `SYSTEM_INFO_ADMINISTRATION` (**Can view system activities**) privilege is required.\n\nThis API does not require any parameters to be passed in the request.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Variable", - "10.14.0.cl" - ], - "parameters": [ - { - "in": "path", - "name": "identifier", - "required": true, - "schema": { - "type": "string" - }, - "description": "Unique id or name of the variable" - } + "System", + "9.0.0.cl" ], + "parameters": [], "responses": { - "204": { - "description": "Deleting the variable is successful." + "200": { + "description": "Cluster config information.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemConfig" + }, + "examples": { + "example_1": { + "value": { + "onboarding_content_url": "", + "saml_enabled": false, + "okta_enabled": false + } + } + } + } + } }, "400": { "description": "Invalid request.", @@ -11244,28 +11762,54 @@ } } }, - "/api/rest/2.0/template/variables/delete": { - "post": { - "operationId": "deleteVariables", - "description": "\nDelete variable(s)
Version: 26.4.0.cl or later\n\nAllows deleting multiple variables from ThoughtSpot.\n\nRequires ADMINISTRATION role and TENANT scope.\nThe CAN_MANAGE_VARIABLES permission allows you to manage Formula Variables in the current organization scope.\n\nThe API endpoint requires:\n* The variable identifiers (IDs or names)\n\nThe operation will fail if:\n* The user lacks required permissions\n* Any of the variables don't exist\n* Any of the variables are being used by other objects\n\n\n\n\n#### Endpoint URL\n", + "/api/rest/2.0/system": { + "get": { + "operationId": "getSystemInformation", + "description": "\n Version: 9.0.0.cl or later\n\nGets system information such as the release version, locale, time zone, deployment environment, date format, and date time format of the cluster.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privileges.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `SYSTEM_INFO_ADMINISTRATION` (**Can view system activities**) privilege is required.\n\nThis API does not require any parameters to be passed in the request. \n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Variable", - "26.4.0.cl" + "System", + "9.0.0.cl" ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeleteVariablesRequest" - } - } - }, - "required": true - }, "parameters": [], "responses": { - "204": { - "description": "Deletion of variable(s) is successful." + "200": { + "description": "Cluster information.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemInfo" + }, + "examples": { + "example_1": { + "value": { + "id": "local", + "name": "local", + "release_version": "test", + "time_zone": "America/Los_Angeles", + "locale": "", + "date_format": "MM/dd/yyyy", + "api_version": "v1", + "type": "SW", + "environment": "DEV", + "license": "EAE", + "date_time_format": "MM/dd/yyyy h:mm a", + "time_format": "HH:mm:ss", + "system_user_id": "67e15c06-d153-4924-a4cd-ff615393b60f", + "super_user_id": "0f0dd0f7-7411-4195-a4aa-0dc6b58413c9", + "hidden_object_id": "31745bb4-defd-4e8b-8de9-8fd01db78827", + "system_group_id": "179d8867-cf36-4a8d-a019-63a226fd3196", + "tsadmin_user_id": "59481331-ee53-42be-a548-bd87be6ddd4a", + "admin_group_id": "d0326b56-ef23-4c8a-8327-a30e99bcc72b", + "all_tables_connection_id": "bfc6feb4-8dac-402c-8ae8-78b43d318777", + "all_user_group_id": "b25ee394-9d13-49e3-9385-cd97f5b253b4", + "accept_language": "undefined", + "all_user_group_member_user_count": 13, + "logical_model_version": 43 + } + } + } + } + } }, "400": { "description": "Invalid request.", @@ -11310,39 +11854,26 @@ } } }, - "/api/rest/2.0/template/variables/{identifier}/update-values": { - "post": { - "operationId": "putVariableValues", - "description": "\nUpdate values for a variable
Version: 26.4.0.cl or later\n\nAllows updating values for a specific variable in ThoughtSpot.\n\nRequires ADMINISTRATION role.\nThe CAN_MANAGE_VARIABLES permission allows you to manage Formula Variables in the current organization scope.\n\nThe API endpoint allows:\n* Adding new values to the variable\n* Replacing existing values\n* Deleting values from the variable\n* Resetting all values\n\nWhen updating variable values, you need to specify:\n* The variable identifier (ID or name)\n* The values to add/replace/remove\n* The operation to perform (ADD, REPLACE, REMOVE, RESET)\n\nBehaviour based on operation type:\n* ADD - Adds values to the variable if this is a list type variable, else same as replace.\n* REPLACE - Replaces all values of a given set of constraints with the current set of values.\n* REMOVE - Removes any values which match the set of conditions of the variables if this is a list type variable, else clears value.\n* RESET - Removes all constraints for the given variable, scope is ignored\n\n\n\n\n#### Endpoint URL\n", + "/api/rest/2.0/system/config-overrides": { + "get": { + "operationId": "getSystemOverrideInfo", + "description": "\n Version: 9.2.0.cl or later\n\nGets a list of configuration overrides applied on the cluster. \n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `APPLICATION_ADMINISTRATION` (**Can manage application settings**) privilege is required.\n\nThis API does not require any parameters to be passed in the request. \n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Variable", - "26.4.0.cl" + "System", + "9.2.0.cl" ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PutVariableValuesRequest" + "parameters": [], + "responses": { + "200": { + "description": "Cluster configuration which can be overridden.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SystemOverrideInfo" + } } } }, - "required": true - }, - "parameters": [ - { - "in": "path", - "name": "identifier", - "required": true, - "schema": { - "type": "string" - }, - "description": "Unique ID or name of the variable" - } - ], - "responses": { - "204": { - "description": "Variable values updated successfully." - }, "400": { "description": "Invalid request.", "content": { @@ -11386,19 +11917,19 @@ } } }, - "/api/rest/2.0/template/variables/search": { + "/api/rest/2.0/system/preferences/communication-channels/search": { "post": { - "operationId": "searchVariables", - "description": "\nSearch variables
Version: 26.4.0.cl or later\n\nAllows searching for variables in ThoughtSpot.\n\nRequires ADMINISTRATION role.\nThe CAN_MANAGE_VARIABLES permission allows you to manage Formula Variables in the current organization scope.\n\nThe API endpoint supports searching variables by:\n* Variable identifier (ID or name)\n* Variable type\n* Name pattern (case-insensitive, supports % for wildcard)\n\nThe search results can be formatted in three ways:\n* METADATA - Returns only variable metadata (default)\n* METADATA_AND_VALUES - Returns variable metadata and values\n\nThe values can be filtered by scope:\n* org_identifier\n* principal_identifier\n* model_identifier\n\n\n\n\n#### Endpoint URL\n", + "operationId": "searchCommunicationChannelPreferences", + "description": "\nBeta Version: 10.14.0.cl or later\n\nFetch communication channel preferences.\n- Use `cluster_preferences` to fetch the default preferences for your ThoughtSpot application instance.\n- If your instance has [Orgs](https://docs.thoughtspot.com/cloud/latest/orgs-overview), use `org_preferences` to fetch any Org-specific preferences that override the defaults.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, users with `APPLICATION_ADMINISTRATION` (**Can manage application settings**) privilege are also authorized to perform this action.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Variable", - "26.4.0.cl" + "System", + "10.14.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SearchVariablesRequest" + "$ref": "#/components/schemas/SearchCommunicationChannelPreferencesRequest" } } }, @@ -11407,13 +11938,40 @@ "parameters": [], "responses": { "200": { - "description": "List of variables is successful.", + "description": "Communication channel preferences retrieved successfully.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Variable" + "$ref": "#/components/schemas/CommunicationChannelPreferencesResponse" + }, + "examples": { + "example_1": { + "value": { + "cluster_preferences": [ + { + "event_type": "LIVEBOARD_SCHEDULE", + "channels": [ + "WEBHOOK" + ] + } + ], + "org_preferences": [ + { + "org": { + "id": "583464508", + "name": "test_org" + }, + "preferences": [ + { + "event_type": "LIVEBOARD_SCHEDULE", + "channels": [ + "EMAIL" + ] + } + ] + } + ] + } } } } @@ -11462,106 +12020,100 @@ } } }, - "/api/rest/2.0/template/variables/{identifier}/update": { + "/api/rest/2.0/system/security-settings/search": { "post": { - "operationId": "updateVariable", - "description": "\nUpdate a variable's name
Version: 26.4.0.cl or later\n\nAllows updating a variable's name in ThoughtSpot.\n\nRequires ADMINISTRATION role and TENANT scope.\nThe CAN_MANAGE_VARIABLES permission allows you to manage Formula Variables in the current organization scope.\n\nThe API endpoint allows updating:\n* The variable name\n\n\n\n#### Endpoint URL\n", + "operationId": "searchSecuritySettings", + "description": "\n Version: 26.2.0.cl or later\n\nFetch security settings for your ThoughtSpot application instance.\n- Use `scope: CLUSTER` to retrieve cluster-level security settings, including CORS and CSP allowlists, SAML redirect URLs, and settings that control access to non-embedded pages.\n- Use `scope: ORG` to retrieve Org-level security settings. If your instance has [Orgs](https://docs.thoughtspot.com/cloud/latest/orgs-overview), this returns CORS and non-embed access settings specific to the Org.\n- If `scope` is not specified, returns both cluster and Org-specific settings based on user privileges.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege.\nSee [Security Settings](https://developers.thoughtspot.com/docs/security-settings) for more details.\n\n\n\n#### Endpoint URL\n", "tags": [ - "Variable", - "26.4.0.cl" + "System", + "26.2.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateVariableRequest" + "$ref": "#/components/schemas/SearchSecuritySettingsRequest" } } }, "required": true }, - "parameters": [ - { - "in": "path", - "name": "identifier", - "required": true, - "schema": { - "type": "string" - }, - "description": "Unique id or name of the variable to update." - } - ], + "parameters": [], "responses": { - "204": { - "description": "Variable name updated successfully." - }, - "400": { - "description": "Invalid request.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "401": { - "description": "Unauthorized access.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "403": { - "description": "Forbidden access.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "500": { - "description": "Unexpected error", + "200": { + "description": "Successfully retrieved the list of security settings.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/api/rest/2.0/template/variables/update-values": { - "post": { - "operationId": "updateVariableValues", - "description": "\nUpdate values for multiple variables
Version: 10.14.0.cl or later\n\n**Note:** This API endpoint is deprecated and will be removed from ThoughtSpot in a future release. Use [POST /api/rest/2.0/template/variables/{identifier}/update-values](/api/rest/2.0/template/variables/%7Bidentifier%7D/update-values) instead.\n\nAllows updating values for multiple variables in ThoughtSpot.\n\nRequires ADMINISTRATION role.\nThe CAN_MANAGE_VARIABLES permission allows you to manage Formula Variables in the current organization scope.\n\nThe API endpoint allows:\n* Adding new values to variables\n* Replacing existing values\n* Deleting values from variables\n\nWhen updating variable values, you need to specify:\n* The variable identifiers\n* The values to add/replace/remove for each variable\n* The operation to perform (ADD, REPLACE, REMOVE, RESET)\n\nBehaviour based on operation type:\n* ADD - Adds values to the variable if this is a list type variable, else same as replace.\n* REPLACE - Replaces all values of a given set of constraints with the current set of values.\n* REMOVE - Removes any values which match the set of conditions of the variables if this is a list type variable, else clears value.\n* RESET - Removes all constrains for a given variable, scope is ignored\n\n\n\n\n#### Endpoint URL\n", - "deprecated": true, - "tags": [ - "Variable", - "10.14.0.cl" - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateVariableValuesRequest" + "$ref": "#/components/schemas/SecuritySettingsResponse" + }, + "examples": { + "example_1": { + "value": { + "cluster_preferences": { + "enable_partitioned_cookies": false, + "cors_whitelisted_urls": [ + "example.com" + ], + "csp_settings": { + "connect_src_urls": [ + "https://connect.example.com" + ], + "font_src_urls": [ + "https://font.example.com" + ], + "visual_embed_hosts": [ + "https://embed.example.com" + ], + "iframe_src_urls": [ + "https://embed.example.com" + ], + "img_src_urls": [ + "https://img.example.com" + ], + "script_src_urls": { + "enabled": true, + "urls": [ + "https://script.example.com" + ] + }, + "style_src_urls": [ + "https://style.example.com" + ] + }, + "saml_redirect_urls": [ + "https://saml.example.com" + ], + "non_embed_access": { + "block_full_app_access": true + } + }, + "org_preferences": [ + { + "org": { + "id": 0, + "name": "Primary" + }, + "cors_whitelisted_urls": [ + "https://cors.example.com" + ], + "non_embed_access": { + "block_full_app_access": true, + "groups_with_access": [ + { + "id": "1234567890", + "name": "Group Name" + } + ] + } + } + ] + } + } + } } } }, - "required": true - }, - "parameters": [], - "responses": { - "204": { - "description": "Variable values updated successfully." - }, "400": { "description": "Invalid request.", "content": { @@ -11605,19 +12157,19 @@ } } }, - "/api/rest/2.0/vcs/git/branches/commit": { + "/api/rest/2.0/system/config-update": { "post": { - "operationId": "commitBranch", - "description": "\n Version: 9.2.0.cl or later\n\nCommits TML files of metadata objects to the Git branch configured on your instance.\n\nRequires at least edit access to objects used in the commit operation.\n\nBefore using this endpoint to push your commits:\n\n* Enable Git integration on your instance.\n* Make sure the Git repository and branch details are configured on your instance.\n\nFor more information, see [Git integration documentation](https://developers.thoughtspot.com/docs/git-integration).\n\n\n\n\n#### Endpoint URL\n", + "operationId": "updateSystemConfig", + "description": "\n Version: 9.2.0.cl or later\n\nUpdates the current configuration of the cluster. You must send the configuration data in JSON format.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privileges.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `APPLICATION_ADMINISTRATION` (**Can manage application settings**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Version Control", + "System", "9.2.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CommitBranchRequest" + "$ref": "#/components/schemas/UpdateSystemConfigRequest" } } }, @@ -11625,15 +12177,8 @@ }, "parameters": [], "responses": { - "200": { - "description": "Successfully committed the metadata objects", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CommitResponse" - } - } - } + "204": { + "description": "Configuration successfully updated." }, "400": { "description": "Invalid request.", @@ -11678,19 +12223,19 @@ } } }, - "/api/rest/2.0/vcs/git/config/create": { + "/api/rest/2.0/system/communication-channels/validate": { "post": { - "operationId": "createConfig", - "description": "\n Version: 9.2.0.cl or later\n\nAllows you to connect a ThoughtSpot instance to a Git repository.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance on your instance, the `CAN_SETUP_VERSION_CONTROL` (**Can set up version control**) privilege.\n\nYou can use this API endpoint to connect your ThoughtSpot development and production environments to the development and production branches of a Git repository.\n\nBefore using this endpoint to connect your ThoughtSpot instance to a Git repository, check the following prerequisites:\n\n* You have a Git repository. If you are using GitHub, make sure you have a valid account and an access token to connect ThoughtSpot to GitHub. For information about generating a token, see [GitHub Documentation](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens).\n\n* Your access token has `repo` scope that grants full access to public and private repositories.\n* Your Git repository has a branch that can be configured as a default branch in ThoughtSpot.\n\nFor more information, see [Git integration documentation](https://developers.thoughtspot.com/docs/?pageid=git-integration).\n\n**Note**: ThoughtSpot supports only GitHub / itHub Enterprise for CI/CD.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "validateCommunicationChannel", + "description": "\nBeta Version: 26.4.0.cl or later\n\nValidates a communication channel configuration to ensure it is properly set up and can receive events.\n- Use `channel_type` to specify the type of communication channel to validate (e.g., WEBHOOK).\n- Use `channel_identifier` to provide the unique identifier or name for the communication channel.\n- Use `event_type` to specify the event type to validate for this channel.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege. For webhook channels, users with `CAN_MANAGE_WEBHOOKS` (**Can manage webhooks**) privilege are also authorized to perform this action.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Version Control", - "9.2.0.cl" + "System", + "26.4.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateConfigRequest" + "$ref": "#/components/schemas/ValidateCommunicationChannelRequest" } } }, @@ -11699,11 +12244,11 @@ "parameters": [], "responses": { "200": { - "description": "Successfully configured local repository", + "description": "communication channel configuration validated successfully.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/RepoConfigObject" + "$ref": "#/components/schemas/CommunicationChannelValidateResponse" } } } @@ -11751,19 +12296,19 @@ } } }, - "/api/rest/2.0/vcs/git/config/delete": { + "/api/rest/2.0/tags/assign": { "post": { - "operationId": "deleteConfig", - "description": "\n Version: 9.2.0.cl or later\n\nDeletes Git repository configuration from your ThoughtSpot instance.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance on your instance, the `CAN_SETUP_VERSION_CONTROL` (**Can set up version control**) privilege.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "assignTag", + "description": "\n Version: 9.0.0.cl or later\n\nAssigns tags to Liveboards, Answers, Tables, and Worksheets.\n\nRequires edit access to the metadata object.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Version Control", - "9.2.0.cl" + "Tags", + "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeleteConfigRequest" + "$ref": "#/components/schemas/AssignTagRequest" } } }, @@ -11772,7 +12317,7 @@ "parameters": [], "responses": { "204": { - "description": "Successfully deleted local repository configuration" + "description": "Tags successfully assigned." }, "400": { "description": "Invalid request.", @@ -11817,19 +12362,19 @@ } } }, - "/api/rest/2.0/vcs/git/commits/deploy": { + "/api/rest/2.0/tags/create": { "post": { - "operationId": "deployCommit", - "description": "\n Version: 9.2.0.cl or later\n\nAllows you to deploy a commit and publish TML content to your ThoughtSpot instance.\n\nRequires at least edit access to the objects used in the deploy operation.\n\nThe API deploys the head of the branch unless a `commit_id` is specified in the API request. If the branch name is not defined in the request, the default branch is considered for deploying commits.\n\nFor more information, see [Git integration documentation](https://developers.thoughtspot.com/docs/git-integration).\n\n\n\n\n#### Endpoint URL\n", + "operationId": "createTag", + "description": "\n Version: 9.0.0.cl or later\n\nCreates a tag object.\n\nTags are labels that identify a metadata object. For example, you can create a tag to designate subject areas, such as sales, HR, marketing, and finance.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `TAGMANAGEMENT` (**Can manage tags**) privilege is required to create, edit, and delete tags.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Version Control", - "9.2.0.cl" + "Tags", + "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeployCommitRequest" + "$ref": "#/components/schemas/CreateTagRequest" } } }, @@ -11838,13 +12383,28 @@ "parameters": [], "responses": { "200": { - "description": "Successfully deployed the changes", + "description": "Tag successfully created.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DeployResponse" + "$ref": "#/components/schemas/Tag" + }, + "examples": { + "example_1": { + "value": { + "name": "test5", + "id": "6abf5aec-3485-4f83-b25f-8c55b92e2b20", + "color": "#342323", + "deleted": false, + "hidden": false, + "external": false, + "deprecated": false, + "creation_time_in_millis": 1685441468684, + "modification_time_in_millis": 1685441468684, + "author_id": "59481331-ee53-42be-a548-bd87be6ddd4a", + "modifier_id": "59481331-ee53-42be-a548-bd87be6ddd4a", + "owner_id": "6abf5aec-3485-4f83-b25f-8c55b92e2b20" + } } } } @@ -11893,45 +12453,28 @@ } } }, - "/api/rest/2.0/vcs/git/commits/{commit_id}/revert": { + "/api/rest/2.0/tags/{tag_identifier}/delete": { "post": { - "operationId": "revertCommit", - "description": "\n Version: 9.2.0.cl or later\n\nReverts TML objects to a previous commit specified in the API request.\n\nRequires at least edit access to objects.\n\nIn the API request, specify the `commit_id`. If the branch name is not specified in the request, the API will consider the default branch configured on your instance.\n\nBy default, the API reverts all objects. If the revert operation fails for one of the objects provided in the commit, the API returns an error and does not revert any object.\n\nFor more information, see [Git integration documentation](https://developers.thoughtspot.com/docs/git-integration).\n\n\n\n\n#### Endpoint URL\n", + "operationId": "deleteTag", + "description": "\n Version: 9.0.0.cl or later\n\nDeletes a tag object from the ThoughtSpot system\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `TAGMANAGEMENT` (**Can manage tags**) privilege is required to create, edit, and delete tags.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Version Control", - "9.2.0.cl" + "Tags", + "9.0.0.cl" ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RevertCommitRequest" - } - } - }, - "required": true - }, "parameters": [ { "in": "path", - "name": "commit_id", + "name": "tag_identifier", "required": true, "schema": { "type": "string" }, - "description": "Commit id to which the object should be reverted" + "description": "Tag identifier Tag name or Tag id." } ], "responses": { - "200": { - "description": "Reverted the object to the commit point specified", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RevertResponse" - } - } - } + "204": { + "description": "Tag successfully deleted." }, "400": { "description": "Invalid request.", @@ -11976,19 +12519,19 @@ } } }, - "/api/rest/2.0/vcs/git/commits/search": { + "/api/rest/2.0/tags/search": { "post": { - "operationId": "searchCommits", - "description": "\n Version: 9.2.0.cl or later\n\nGets a list of commits for a given metadata object.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) privilege.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance on your instance, the `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**) privilege and edit access to the metadata objects.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "searchTags", + "description": "\n Version: 9.0.0.cl or later\n\nGets a list of tag objects available on the ThoughtSpot system. To get details of a specific tag object, specify the GUID or name.\n\nAny authenticated user can search for tag objects.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Version Control", - "9.2.0.cl" + "Tags", + "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SearchCommitsRequest" + "$ref": "#/components/schemas/SearchTagsRequest" } } }, @@ -11997,13 +12540,47 @@ "parameters": [], "responses": { "200": { - "description": "Commit history of the metadata object", + "description": "Tags search result.", "content": { "application/json": { "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/CommitHistoryResponse" + "$ref": "#/components/schemas/Tag" + } + }, + "examples": { + "example_1": { + "value": [ + { + "name": "test4", + "id": "0935bbb5-17e2-43ab-b657-da6bf347cbb4", + "color": "#342323", + "deleted": false, + "hidden": false, + "external": false, + "deprecated": false, + "creation_time_in_millis": 1684937524885, + "modification_time_in_millis": 1684937524885, + "author_id": "59481331-ee53-42be-a548-bd87be6ddd4a", + "modifier_id": "59481331-ee53-42be-a548-bd87be6ddd4a", + "owner_id": "0935bbb5-17e2-43ab-b657-da6bf347cbb4" + }, + { + "name": "test6", + "id": "65a5c39a-daf5-4cae-975f-44283628494e", + "color": "#342323", + "deleted": false, + "hidden": false, + "external": false, + "deprecated": false, + "creation_time_in_millis": 1684988834183, + "modification_time_in_millis": 1684988887888, + "author_id": "59481331-ee53-42be-a548-bd87be6ddd4a", + "modifier_id": "59481331-ee53-42be-a548-bd87be6ddd4a", + "owner_id": "65a5c39a-daf5-4cae-975f-44283628494e" + } + ] } } } @@ -12052,19 +12629,19 @@ } } }, - "/api/rest/2.0/vcs/git/config/search": { + "/api/rest/2.0/tags/unassign": { "post": { - "operationId": "searchConfig", - "description": "\n Version: 9.2.0.cl or later\n\nGets Git repository connections configured on the ThoughtSpot instance.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance on your instance, the `CAN_SETUP_VERSION_CONTROL` (**Can set up version control**) privilege.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "unassignTag", + "description": "\n Version: 9.0.0.cl or later\n\nRemoves the tags applied to a Liveboard, Answer, Table, or Worksheet.\n\nRequires edit access to the metadata object.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Version Control", - "9.2.0.cl" + "Tags", + "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SearchConfigRequest" + "$ref": "#/components/schemas/UnassignTagRequest" } } }, @@ -12072,18 +12649,8 @@ }, "parameters": [], "responses": { - "200": { - "description": "Details of local repository configuration", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/RepoConfigObject" - } - } - } - } + "204": { + "description": "Tags successfully unassigned." }, "400": { "description": "Invalid request.", @@ -12128,35 +12695,38 @@ } } }, - "/api/rest/2.0/vcs/git/config/update": { + "/api/rest/2.0/tags/{tag_identifier}/update": { "post": { - "operationId": "updateConfig", - "description": "\n Version: 9.2.0.cl or later\n\nUpdates Git repository configuration settings.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance on your instance, the `CAN_SETUP_VERSION_CONTROL` (**Can set up version control**) privilege.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "updateTag", + "description": "\n Version: 9.0.0.cl or later\n\nUpdates a tag object.\n\nYou can modify the `name` and `color` properties of a tag object. \n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `TAGMANAGEMENT` (**Can manage tags**) privilege is required to create, edit, and delete tags.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Version Control", - "9.2.0.cl" + "Tags", + "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateConfigRequest" + "$ref": "#/components/schemas/UpdateTagRequest" } } }, "required": true }, - "parameters": [], + "parameters": [ + { + "in": "path", + "name": "tag_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "Name or Id of the tag." + } + ], "responses": { - "200": { - "description": "Successfully updated local repository configuration", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RepoConfigObject" - } - } - } + "204": { + "description": "Tag successfully updated." }, "400": { "description": "Invalid request.", @@ -12201,19 +12771,19 @@ } } }, - "/api/rest/2.0/vcs/git/branches/validate": { + "/api/rest/2.0/users/activate": { "post": { - "operationId": "validateMerge", - "description": "\n Version: 9.2.0.cl or later\n\nValidates the content of your source branch against the objects in your destination environment.\n\nBefore merging content from your source branch to the destination branch, run this API operation from your destination environment and ensure that the changes from the source branch function in the destination environment.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) privilege.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance on your instance, the `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**) privilege and edit access to the metadata objects.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "activateUser", + "description": "\n Version: 9.7.0.cl or later\n\nActivates a deactivated user account.\n\nRequires `ADMINISTRATION` (**Can administer Thoughtspot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `USER_ADMINISTRATION` (**Can manage users**) privilege is required.\n\nTo activate an inactive user account, the API request body must include the following information:\n\n- Username or the GUID of the user account.\n- Auth token generated for the deactivated user. The auth token is sent in the API response when a user is deactivated.\n- Password for the user account.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Version Control", - "9.2.0.cl" + "Users", + "9.7.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValidateMergeRequest" + "$ref": "#/components/schemas/ActivateUserRequest" } } }, @@ -12222,14 +12792,11 @@ "parameters": [], "responses": { "200": { - "description": "validation done successfully", + "description": "User activated successfully.", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DeployResponse" - } + "$ref": "#/components/schemas/User" } } } @@ -12277,19 +12844,19 @@ } } }, - "/api/rest/2.0/webhooks/create": { + "/api/rest/2.0/users/change-password": { "post": { - "operationId": "createWebhookConfiguration", - "description": "\nBeta Version: 10.14.0.cl or later\n\nCreates a new webhook configuration to receive notifications for specified events. The webhook will be triggered when the configured events occur in the system.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, users with `CAN_MANAGE_WEBHOOKS` (**Can manage webhooks**) privilege are also authorized to perform this action.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "changeUserPassword", + "description": "\n Version: 9.0.0.cl or later\n\nUpdates the current password of the user.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `USER_ADMINISTRATION` (**Can manage users**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Webhooks", - "10.14.0.cl" + "Users", + "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateWebhookConfigurationRequest" + "$ref": "#/components/schemas/ChangeUserPasswordRequest" } } }, @@ -12297,131 +12864,8 @@ }, "parameters": [], "responses": { - "200": { - "description": "Webhook configuration created successfully", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebhookResponse" - }, - "examples": { - "example_1": { - "description": "Basic webhook with Bearer token authentication", - "value": { - "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", - "name": "My Liveboard Webhook", - "description": "Webhook to notify external system about liveboard schedules", - "org": { - "id": "0", - "name": "Primary" - }, - "url": "https://myapp.example.com/webhooks/thoughtspot", - "url_params": { - "api_key": "abc123", - "version": "v1" - }, - "events": [ - "LIVEBOARD_SCHEDULE" - ], - "authentication": { - "BEARER_TOKEN": "***" - }, - "signature_verification": { - "type": "HMAC_SHA256", - "header": "X-Webhook-Signature", - "algorithm": "SHA256", - "secret": "***" - }, - "creation_time_in_millis": 1724277430243, - "modification_time_in_millis": 1724277430243, - "additional_headers": [ - { - "key": "Custom-Header", - "value": "value1" - }, - { - "key": "Custom-Header-2", - "value": "value2" - } - ], - "created_by": { - "id": "8e3f2a7b-9c4d-4e5f-8a1b-7c9d3e6f4a2b", - "name": "sarah_chen" - }, - "last_modified_by": { - "id": "8e3f2a7b-9c4d-4e5f-8a1b-7c9d3e6f4a2b", - "name": "sarah_chen" - } - } - }, - "example_2": { - "description": "Webhook with OAuth2 authentication", - "value": { - "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", - "name": "OAuth2 Webhook", - "description": "Webhook with OAuth2 client credentials", - "org": { - "id": "0", - "name": "Primary" - }, - "url": "https://api.example.com/webhooks", - "events": [ - "LIVEBOARD_SCHEDULE" - ], - "authentication": { - "OAUTH2": { - "authorization_url": "https://auth.example.com/oauth2/authorize", - "client_id": "client_123", - "client_secret": "***" - } - }, - "creation_time_in_millis": 1724278530123, - "modification_time_in_millis": 1724278530123, - "created_by": { - "id": "7d5e9f2a-4b8c-4d6e-9a3b-5c7e1f4a8b2d", - "name": "mike_rodriguez" - } - } - }, - "example_3": { - "description": "Webhook with GCP GCS storage destination", - "value": { - "id": "c9d8e7f6-a5b4-4321-9876-fedcba012345", - "name": "GCS Storage Webhook", - "description": "Webhook that uploads payloads to a GCS bucket", - "org": { - "id": "0", - "name": "Primary" - }, - "url": "https://api.example.com/webhooks", - "events": [ - "LIVEBOARD_SCHEDULE" - ], - "storage_destination": { - "storage_type": "GCP_GCS", - "storage_config": { - "gcp_gcs_config": { - "bucket_name": "my-webhook-files", - "service_account_email": "my-sa@my-project.iam.gserviceaccount.com", - "path_prefix": "webhooks/" - } - } - }, - "creation_time_in_millis": 1724279630456, - "modification_time_in_millis": 1724279630456, - "created_by": { - "id": "3a2b1c4d-5e6f-7890-abcd-ef0123456789", - "name": "priya_sharma" - }, - "last_modified_by": { - "id": "3a2b1c4d-5e6f-7890-abcd-ef0123456789", - "name": "priya_sharma" - } - } - } - } - } - } + "204": { + "description": "User password change operation successful." }, "400": { "description": "Invalid request.", @@ -12466,19 +12910,19 @@ } } }, - "/api/rest/2.0/webhooks/delete": { + "/api/rest/2.0/users/create": { "post": { - "operationId": "deleteWebhookConfigurations", - "description": "\nBeta Version: 10.14.0.cl or later\n\nDeletes one or more webhook configurations by their unique id or name. Returns status of each deletion operation, including successfully deleted webhooks and any failures with error details.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, users with `CAN_MANAGE_WEBHOOKS` (**Can manage webhooks**) privilege are also authorized to perform this action.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "createUser", + "description": "\n Version: 9.0.0.cl or later\n\nCreates a user in ThoughtSpot.\n\nThe API endpoint allows you to configure several user properties such as email address, account status, share notification preferences, and sharing visibility. You can provision the user to [groups](https://docs.thoughtspot.com/cloud/latest/groups-privileges) and [Orgs](https://docs.thoughtspot.com/cloud/latest/orgs-overview). You can also add Liveboard, Answer, and Worksheet objects to the user’s favorites list, assign a default Liveboard for the user, and set user preferences.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `USER_ADMINISTRATION` (**Can manage users**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Webhooks", - "10.14.0.cl" + "Users", + "9.0.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeleteWebhookConfigurationsRequest" + "$ref": "#/components/schemas/CreateUserRequest" } } }, @@ -12487,108 +12931,11 @@ "parameters": [], "responses": { "200": { - "description": "Webhook configurations deleted successfully", + "description": "User successfully created.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/WebhookDeleteResponse" - }, - "examples": { - "example_1": { - "description": "Successful deletion of multiple webhooks", - "value": { - "deleted_count": 2, - "failed_count": 0, - "deleted_webhooks": [ - { - "id": "b9e3d8f2-4c7a-4e1b-8d3c-5f9a2b7e4c6d", - "name": "Old Webhook 1", - "description": "First webhook to be deleted", - "org": { - "id": "0", - "name": "Primary" - }, - "url": "https://old-service.example.com/webhook1", - "events": [ - "LIVEBOARD_SCHEDULE" - ], - "authentication": { - "BEARER_TOKEN": "***" - }, - "creation_time_in_millis": 1724274600000, - "modification_time_in_millis": 1724274600000, - "created_by": { - "id": "1f4e7b2d-9c3a-4e6f-8b1d-3e7c5a9b2f4e", - "name": "jennifer_patel" - } - }, - { - "id": "e7c4a1f8-2b5d-4a9e-7c3f-8b1e5d4a7c9b", - "name": "Old Webhook 2", - "description": "Second webhook to be deleted", - "org": { - "id": "0", - "name": "Primary" - }, - "url": "https://old-service.example.com/webhook2", - "events": [ - "LIVEBOARD_SCHEDULE" - ], - "authentication": { - "API_KEY": { - "key": "X-API-Key", - "value": "***" - } - }, - "creation_time_in_millis": 1724275530123, - "modification_time_in_millis": 1724275530123, - "created_by": { - "id": "9a5c2e8f-4b7d-4c1e-9f2a-6c8e3b5d7a4c", - "name": "david_thompson" - } - } - ], - "failed_webhooks": [] - } - }, - "example_2": { - "description": "Partial failure during deletion", - "value": { - "deleted_count": 1, - "failed_count": 1, - "deleted_webhooks": [ - { - "id": "c8f2a5e9-3d6b-4f1e-a8c2-7e4b1d9f5a3c", - "name": "Successfully Deleted Webhook", - "description": "This webhook was deleted successfully", - "org": { - "id": "0", - "name": "Primary" - }, - "url": "https://service.example.com/webhook", - "events": [ - "LIVEBOARD_SCHEDULE" - ], - "authentication": { - "NO_AUTH": "" - }, - "creation_time_in_millis": 1724276415456, - "modification_time_in_millis": 1724276415456, - "created_by": { - "id": "6e9c4f2a-8b5d-4e1f-9c3a-5f8b2e7d4a6c", - "name": "emma_wang" - } - } - ], - "failed_webhooks": [ - { - "id": "a3f7c1e4-9b2d-4a6e-8f3c-1e5b7a9c4f2e", - "name": "Non-existent Webhook", - "error_message": "Webhook not found or access denied" - } - ] - } - } + "$ref": "#/components/schemas/User" } } } @@ -12636,19 +12983,19 @@ } } }, - "/api/rest/2.0/webhooks/search": { + "/api/rest/2.0/users/deactivate": { "post": { - "operationId": "searchWebhookConfigurations", - "description": "\nBeta Version: 10.14.0.cl or later\n\nSearches for webhook configurations based on various criteria such as Org, webhook identifier, event type, with support for pagination and sorting. Returns matching webhook configurations with their complete details.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, users with `CAN_MANAGE_WEBHOOKS` (**Can manage webhooks**) privilege are also authorized to perform this action.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "deactivateUser", + "description": "\n Version: 9.7.0.cl or later\n\nDeactivates a user account.\n\nRequires `ADMINISTRATION` (**Can administer Thoughtspot**) privilege. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `USER_ADMINISTRATION` (**Can manage users**) privilege is required.\n\nTo deactivate a user account, the API request body must include the following information:\n\n- Username or the GUID of the user account\n- Base URL of the ThoughtSpot instance\n\nIf the API request is successful, ThoughtSpot returns the activation URL in the response. The activation URL is valid for 14 days and can be used to re-activate the account and reset the password of the deactivated account.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Webhooks", - "10.14.0.cl" + "Users", + "9.7.0.cl" ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SearchWebhookConfigurationsRequest" + "$ref": "#/components/schemas/DeactivateUserRequest" } } }, @@ -12657,108 +13004,11 @@ "parameters": [], "responses": { "200": { - "description": "Webhook configurations retrieved successfully", + "description": "User deactivated successfully.", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/WebhookSearchResponse" - }, - "examples": { - "example_1": { - "description": "Search results with multiple webhooks", - "value": { - "webhooks": [ - { - "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", - "name": "Liveboard Schedule Webhook", - "description": "Webhook for liveboard schedule notifications", - "org": { - "id": "0", - "name": "Primary" - }, - "url": "https://myapp.example.com/webhooks", - "url_params": { - "api_key": "abc123" - }, - "events": [ - "LIVEBOARD_SCHEDULE" - ], - "authentication": { - "BEARER_TOKEN": "***" - }, - "signature_verification": { - "type": "HMAC_SHA256", - "header": "X-Webhook-Signature", - "algorithm": "SHA256", - "secret": "***" - }, - "creation_time_in_millis": 1724277430243, - "modification_time_in_millis": 1724278215123, - "additional_headers": [ - { - "key": "Custom-Header", - "value": "value1" - }, - { - "key": "Custom-Header-2", - "value": "value2" - } - ], - "created_by": { - "id": "8e3f2a7b-9c4d-4e5f-8a1b-7c9d3e6f4a2b", - "name": "sarah_chen" - }, - "last_modified_by": { - "id": "2c9a7e4f-6b3d-4a8e-9f1c-5e7a3b9c2d6f", - "name": "alex_kim" - } - }, - { - "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", - "name": "API Key Webhook", - "description": "Webhook with API key authentication", - "org": { - "id": "0", - "name": "Primary" - }, - "url": "https://api.example.com/notifications", - "events": [ - "LIVEBOARD_SCHEDULE" - ], - "authentication": { - "API_KEY": { - "key": "X-API-Key", - "value": "***" - } - }, - "creation_time_in_millis": 1724275845987, - "modification_time_in_millis": 1724275845987, - "created_by": { - "id": "7d5e9f2a-4b8c-4d6e-9a3b-5c7e1f4a8b2d", - "name": "mike_rodriguez" - } - } - ], - "pagination": { - "record_offset": 0, - "record_size": 50, - "total_count": 2, - "has_more": false - } - } - }, - "example_2": { - "description": "Empty search results", - "value": { - "webhooks": [], - "pagination": { - "record_offset": 0, - "record_size": 50, - "total_count": 0, - "has_more": false - } - } - } + "$ref": "#/components/schemas/ResponseActivationURL" } } } @@ -12806,38 +13056,28 @@ } } }, - "/api/rest/2.0/webhooks/{webhook_identifier}/update": { + "/api/rest/2.0/users/{user_identifier}/delete": { "post": { - "operationId": "updateWebhookConfiguration", - "description": "\nBeta Version: 10.14.0.cl or later\n\nUpdates an existing webhook configuration by its unique id or name. Only the provided fields will be updated.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, users with `CAN_MANAGE_WEBHOOKS` (**Can manage webhooks**) privilege are also authorized to perform this action.\n\n\n\n\n#### Endpoint URL\n", + "operationId": "deleteUser", + "description": "\n Version: 9.0.0.cl or later\n\nDeletes a user from the ThoughtSpot system.\n\nIf you want to remove a user from a specific Org but not from ThoughtSpot, update the group and Org mapping properties of the user object via a POST API call to the [/api/rest/2.0/users/{user_identifier}/update](#/http/api-endpoints/users/update-user) endpoint.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `USER_ADMINISTRATION` (**Can manage users**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", "tags": [ - "Webhooks", - "10.14.0.cl" + "Users", + "9.0.0.cl" ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateWebhookConfigurationRequest" - } - } - }, - "required": true - }, "parameters": [ { "in": "path", - "name": "webhook_identifier", + "name": "user_identifier", "required": true, "schema": { "type": "string" }, - "description": "Unique ID or name of the webhook configuration." + "description": "GUID / name of the user" } ], "responses": { "204": { - "description": "Webhook configuration updated successfully" + "description": "User successfully deleted." }, "400": { "description": "Invalid request.", @@ -12881,1954 +13121,4286 @@ } } } - } - }, - "components": { - "schemas": { - "ErrorResponse": { - "type": "object", - "properties": { - "error": { - "type": "object", - "nullable": true - } - } - }, - "GetTokenResponse": { - "type": "object", - "required": [ - "token", - "creation_time_in_millis", - "expiration_time_in_millis", - "valid_for_user_id", - "valid_for_username" + }, + "/api/rest/2.0/users/force-logout": { + "post": { + "operationId": "forceLogoutUsers", + "description": "\n Version: 9.0.0.cl or later\n\nEnforces logout on current user sessions. \n\nUse this API with caution as it may invalidate active user sessions and force users to re-login. Make sure you specify the usernames or GUIDs. If you pass null values in the API call, all user sessions on your cluster become invalid, and the users are forced to re-login.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `USER_ADMINISTRATION` (**Can manage users**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Users", + "9.0.0.cl" ], - "properties": { - "token": { - "type": "string", - "description": "Bearer auth token." + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ForceLogoutUsersRequest" + } + } }, - "creation_time_in_millis": { - "type": "number", - "format": "float", - "description": "Token creation time in milliseconds." + "required": true + }, + "parameters": [], + "responses": { + "204": { + "description": "Force logging out of users operation successful." }, - "expiration_time_in_millis": { - "type": "number", - "format": "float", - "description": "Token expiration time in milliseconds." - }, - "valid_for_user_id": { - "type": "string", - "description": "Username to whom the token is issued." - }, - "valid_for_username": { - "type": "string", - "description": "Unique identifier of the user to whom the token is issued." - } - } - }, - "SearchAuthSettingsResponse": { - "type": "object", - "properties": { - "auth_type": { - "type": "string", - "enum": [ - "TRUSTED_AUTH" - ], - "description": "Type of authentication mechanism returned.", - "nullable": true + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "cluster_preferences": { - "$ref": "#/components/schemas/AuthClusterPreferences", - "description": "Cluster-level authentication configuration. Present when cluster scope was requested and the caller has ADMINISTRATION or CONTROL_TRUSTED_AUTH privilege.", - "nullable": true + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "org_preferences": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AuthOrgPreference" - }, - "description": "Org-level authentication configurations. Present when org scope was requested and per-org auth feature is enabled.", - "nullable": true - } - }, - "description": "Response for searchAuthSettings. Contains auth type and cluster/org-level preferences." - }, - "AuthClusterPreferences": { - "type": "object", - "properties": { - "auth_status": { - "type": "string", - "enum": [ - "ENABLED", - "DISABLED" - ], - "description": "Whether authentication is enabled or disabled at the cluster level.", - "nullable": true + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "access_tokens": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AuthSettingsAccessToken" - }, - "description": "Cluster-level access tokens. Absent when no token is configured.", - "nullable": true + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } - }, - "description": "Cluster-level authentication preferences." - }, - "AuthSettingsAccessToken": { - "type": "object", - "required": [ - "key" + } + } + }, + "/api/rest/2.0/users/import": { + "post": { + "operationId": "importUsers", + "description": "\n Version: 9.0.0.cl or later\n\nImports user data from external databases into ThoughtSpot. During the user import operation:\n\n* If the specified users are not available in ThoughtSpot, the users are created and assigned a default password. Defining a `default_password` in the API request is optional.\n* If `delete_unspecified_users` is set to `true`, the users not specified in the API request, excluding the `tsadmin`, `guest`, `system` and `su` users, are deleted.\n* If the specified user objects are already available in ThoughtSpot, the object properties are updated and synchronized as per the input data in the API request.\n\nA successful API call returns the object that represents the changes made in the ThoughtSpot system.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `USER_ADMINISTRATION` (**Can manage users**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Users", + "9.0.0.cl" ], - "properties": { - "key": { - "type": "string", - "description": "The plaintext token key value." - } + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImportUsersRequest" + } + } + }, + "required": true }, - "description": "An auth settings access token." - }, - "AuthOrgPreference": { - "type": "object", - "properties": { - "org": { - "$ref": "#/components/schemas/AuthOrgInfo", - "description": "Org identifier details.", - "nullable": true + "parameters": [], + "responses": { + "200": { + "description": "Import users operation successful.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImportUsersResponse" + } + } + } }, - "auth_status": { - "type": "string", - "enum": [ - "ENABLED", - "DISABLED" - ], - "description": "Whether authentication is enabled or disabled for this org.", - "nullable": true + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "access_tokens": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AuthSettingsAccessToken" - }, - "description": "Org-level access tokens. Absent when no token is configured or the feature flag is off.", - "nullable": true - } - }, - "description": "Org-level authentication preferences for a single org." - }, - "AuthOrgInfo": { - "type": "object", - "required": [ - "id" - ], - "properties": { - "id": { - "type": "integer", - "format": "int32", - "description": "Unique identifier of the org." + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "name": { - "type": "string", - "description": "Name of the org.", - "nullable": true - } - }, - "description": "Org identifier returned in auth settings search results." - }, - "RiseSetter": { - "type": "object", - "required": [ - "field", - "path" - ], - "properties": { - "field": { - "type": "string" + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "path": { - "type": "string" + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } - }, - "User": { - "type": "object", - "required": [ - "id", - "name", - "display_name", - "visibility" + } + }, + "/api/rest/2.0/users/reset-password": { + "post": { + "operationId": "resetUserPassword", + "description": "\n Version: 9.0.0.cl or later\n\nResets the password of a user account. Administrators can reset password on behalf of a user.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `USER_ADMINISTRATION` (**Can manage users**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Users", + "9.0.0.cl" ], - "properties": { - "id": { - "type": "string", - "description": "Unique identifier of the user." + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ResetUserPasswordRequest" + } + } }, - "name": { - "type": "string", - "description": "Name of the user." - }, - "display_name": { - "type": "string", - "description": "Display name of the user." + "required": true + }, + "parameters": [], + "responses": { + "204": { + "description": "User password reset operation successful." }, - "visibility": { - "type": "string", - "enum": [ - "SHARABLE", - "NON_SHARABLE" - ], - "description": "Visibility of the users. The `SHARABLE` property makes a user visible to other users and group, who can share objects with the user." + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "author_id": { - "type": "string", - "description": "Unique identifier of author of the user.", - "nullable": true + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "can_change_password": { - "type": "boolean", - "description": "Defines whether the user can change their password.", - "nullable": true + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "complete_detail": { - "type": "boolean", - "description": "Defines whether the response has complete detail of the user.", - "nullable": true + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/rest/2.0/users/search": { + "post": { + "operationId": "searchUsers", + "description": "\n Version: 9.0.0.cl or later\n\nGets a list of users available on the ThoughtSpot system.\n\nTo get details of a specific user, specify the user GUID or name. You can also filter the API response based on groups, Org ID, user visibility, account status, user type, and user preference settings and favorites.\n\nAvailable to all users. Users with `ADMINISTRATION` (**Can administer ThoughtSpot**) privileges can view all users properties. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `USER_ADMINISTRATION` (**Can manage users**) privilege is required.\n\n**NOTE**: If the API returns an empty list, consider increasing the value of the `record_size` parameter. To search across all available users, set `record_size` to `-1`.\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Users", + "9.0.0.cl" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SearchUsersRequest" + } + } }, - "creation_time_in_millis": { - "type": "number", - "format": "float", - "description": "Creation time of the user in milliseconds.", - "nullable": true + "required": true + }, + "parameters": [], + "responses": { + "200": { + "description": "User search result.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } + } + } + } }, - "current_org": { - "$ref": "#/components/schemas/Org", - "description": "Current logged-in Org of the user.", - "nullable": true + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "deleted": { - "type": "boolean", - "description": "Indicates whether the user is deleted.", - "nullable": true + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "deprecated": { - "type": "boolean", - "description": "Indicates whether the user is deprecated.", - "nullable": true + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "account_type": { - "type": "string", - "enum": [ - "LOCAL_USER", - "LDAP_USER", - "SAML_USER", - "OIDC_USER", - "REMOTE_USER" - ], - "description": "Type of the user account.", - "nullable": true + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/rest/2.0/users/{user_identifier}/update": { + "post": { + "operationId": "updateUser", + "description": "\n Version: 9.0.0.cl or later\n\nUpdates the properties of a user object.\n\nYou can modify user properties such as username, email, and share notification settings. You can also assign new groups and Orgs, remove the user from a group or Org, reset password, and modify user preferences.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, the `USER_ADMINISTRATION` (**Can manage users**) privilege is required.\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Users", + "9.0.0.cl" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateUserRequest" + } + } }, - "account_status": { - "type": "string", - "enum": [ - "ACTIVE", - "INACTIVE", - "EXPIRED", - "LOCKED", - "PENDING", - "SUSPENDED" - ], - "description": "Status of the user account.", - "nullable": true + "required": true + }, + "parameters": [ + { + "in": "path", + "name": "user_identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "GUID / name of the user" + } + ], + "responses": { + "204": { + "description": "User successfully updated." }, - "email": { - "type": "string", - "description": "Email of the user.", - "nullable": true + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "expiration_time_in_millis": { - "type": "number", - "format": "float", - "description": "Expiration time of the user in milliseconds.", - "nullable": true + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "external": { - "type": "boolean", - "description": "Indicates whether the user is external.", - "nullable": true + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "favorite_metadata": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FavoriteMetadataItem" - }, - "description": "Metadata objects to add to the users' favorites list.", - "nullable": true - }, - "first_login_time_in_millis": { - "type": "number", - "format": "float", - "description": "Timestamp of the first login session of the user in milliseconds.", - "nullable": true + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/rest/2.0/template/variables/create": { + "post": { + "operationId": "createVariable", + "description": "\nCreate a variable which can be used for parameterizing metadata objects
Version: 26.4.0.cl or later\n\nAllows creating a variable which can be used for parameterizing metadata objects in ThoughtSpot.\n\nRequires ADMINISTRATION role and TENANT scope.\nThe CAN_MANAGE_VARIABLES permission allows you to manage Formula Variables in the current organization scope.\n\nThe API endpoint supports the following types of variables:\n* CONNECTION_PROPERTY - For connection properties\n* TABLE_MAPPING - For table mappings\n* CONNECTION_PROPERTY_PER_PRINCIPAL - For connection properties per principal. In order to use this please contact support to enable this.\n* FORMULA_VARIABLE - For Formula variables, introduced in 10.15.0.cl\n\nWhen creating a variable, you need to specify:\n* The variable type\n* A unique name for the variable\n* Whether the variable contains sensitive values (defaults to false)\n* The data type of the variable, only specify for formula variables (defaults to null)\n\nThe operation will fail if:\n* The user lacks required permissions\n* The variable name already exists\n* The variable type is invalid\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Variable", + "26.4.0.cl" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateVariableRequest" + } + } }, - "group_mask": { - "type": "integer", - "format": "int32", - "description": "Group mask of the user.", - "nullable": true + "required": true + }, + "parameters": [], + "responses": { + "200": { + "description": "Create variable is successful.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Variable" + } + } + } }, - "hidden": { - "type": "boolean", - "description": "Indicates whether the user is hidden.", - "nullable": true + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "home_liveboard": { - "$ref": "#/components/schemas/Object_ID_And_Name", - "description": "Unique ID or name of the default Liveboard assigned to the user.", - "nullable": true + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "incomplete_details": { - "type": "object", - "description": "Incomplete details of user if any present.", - "nullable": true + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "is_first_login": { - "type": "boolean", - "description": "Indicates whether it is first login of the user.", - "nullable": true + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/rest/2.0/template/variables/{identifier}/delete": { + "post": { + "operationId": "deleteVariable", + "description": "\nDelete a variable
Version: 10.14.0.cl or later\n\n**Note:** This API endpoint is deprecated and will be removed from ThoughtSpot in a future release. Use [POST /api/rest/2.0/template/variables/delete](/api/rest/2.0/template/variables/delete) instead.\n\nAllows deleting a variable from ThoughtSpot.\n\nRequires ADMINISTRATION role and TENANT scope.\nThe CAN_MANAGE_VARIABLES permission allows you to manage Formula Variables in the current organization scope.\n\nThe API endpoint requires:\n* The variable identifier (ID or name)\n\nThe operation will fail if:\n* The user lacks required permissions\n* The variable doesn't exist\n* The variable is being used by other objects \n\n\n\n#### Endpoint URL\n", + "deprecated": true, + "tags": [ + "Variable", + "10.14.0.cl" + ], + "parameters": [ + { + "in": "path", + "name": "identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique id or name of the variable" + } + ], + "responses": { + "204": { + "description": "Deleting the variable is successful." }, - "modification_time_in_millis": { - "type": "number", - "format": "float", - "description": "Last modified time of the user in milliseconds.", - "nullable": true + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "modifier_id": { - "type": "string", - "description": "Unique identifier of modifier of the user.", - "nullable": true + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "notify_on_share": { - "type": "boolean", - "description": "User preference for receiving email notifications on shared Answers or Liveboard.", - "nullable": true + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "onboarding_experience_completed": { - "type": "boolean", - "description": "The user preference for turning off the onboarding experience.", - "nullable": true + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/rest/2.0/template/variables/delete": { + "post": { + "operationId": "deleteVariables", + "description": "\nDelete variable(s)
Version: 26.4.0.cl or later\n\nAllows deleting multiple variables from ThoughtSpot.\n\nRequires ADMINISTRATION role and TENANT scope.\nThe CAN_MANAGE_VARIABLES permission allows you to manage Formula Variables in the current organization scope.\n\nThe API endpoint requires:\n* The variable identifiers (IDs or names)\n\nThe operation will fail if:\n* The user lacks required permissions\n* Any of the variables don't exist\n* Any of the variables are being used by other objects\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Variable", + "26.4.0.cl" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteVariablesRequest" + } + } }, - "orgs": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Org" - }, - "description": "Orgs to which the user belongs.", - "nullable": true + "required": true + }, + "parameters": [], + "responses": { + "204": { + "description": "Deletion of variable(s) is successful." }, - "owner_id": { - "type": "string", - "description": "Unique identifier of owner of the user.", - "nullable": true + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "parent_type": { - "type": "string", - "enum": [ - "USER", - "GROUP" - ], - "description": "Parent type of the user.", - "nullable": true + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "privileges": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Privileges which are assigned to the user.", - "nullable": true - }, - "show_onboarding_experience": { - "type": "boolean", - "description": "User's preference to revisit the new user onboarding experience.", - "nullable": true - }, - "super_user": { - "type": "boolean", - "description": "Indicates whether the user is a super user.", - "nullable": true - }, - "system_user": { - "type": "boolean", - "description": "Indicates whether the user is a system user.", - "nullable": true - }, - "tags": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Object_ID_And_Name" - }, - "description": "Tags associated with the user.", - "nullable": true - }, - "tenant_id": { - "type": "string", - "description": "Unique identifier of tenant of the user.", - "nullable": true + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "user_groups": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Object_ID_And_Name" - }, - "description": "Groups to which the user is assigned.", - "nullable": true + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/rest/2.0/template/variables/{identifier}/update-values": { + "post": { + "operationId": "putVariableValues", + "description": "\nUpdate values for a variable
Version: 26.4.0.cl or later\n\nAllows updating values for a specific variable in ThoughtSpot.\n\nRequires ADMINISTRATION role.\nThe CAN_MANAGE_VARIABLES permission allows you to manage Formula Variables in the current organization scope.\n\nThe API endpoint allows:\n* Adding new values to the variable\n* Replacing existing values\n* Deleting values from the variable\n* Resetting all values\n\nWhen updating variable values, you need to specify:\n* The variable identifier (ID or name)\n* The values to add/replace/remove\n* The operation to perform (ADD, REPLACE, REMOVE, RESET)\n\nBehaviour based on operation type:\n* ADD - Adds values to the variable if this is a list type variable, else same as replace.\n* REPLACE - Replaces all values of a given set of constraints with the current set of values.\n* REMOVE - Removes any values which match the set of conditions of the variables if this is a list type variable, else clears value.\n* RESET - Removes all constraints for the given variable, scope is ignored\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Variable", + "26.4.0.cl" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PutVariableValuesRequest" + } + } }, - "user_inherited_groups": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Object_ID_And_Name" + "required": true + }, + "parameters": [ + { + "in": "path", + "name": "identifier", + "required": true, + "schema": { + "type": "string" }, - "description": "Inherited User Groups which the user is part of.", - "nullable": true + "description": "Unique ID or name of the variable" + } + ], + "responses": { + "204": { + "description": "Variable values updated successfully." }, - "welcome_email_sent": { - "type": "boolean", - "description": "Indicates whether welcome email is sent for the user.", - "nullable": true + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "org_privileges": { - "type": "object", - "description": "Privileges which are assigned to the user with org.", - "nullable": true + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "preferred_locale": { - "type": "string", - "description": "Locale for the user.", - "nullable": true + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "use_browser_language": { - "type": "boolean", - "description": "Flag to indicate whether to use the browser locale for the user in the UI.\nWhen set to true, the preferred_locale value is unset and the browser's\nlanguage setting takes precedence.
Version: 26.3.0.cl or later", - "nullable": true + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/rest/2.0/template/variables/search": { + "post": { + "operationId": "searchVariables", + "description": "\nSearch variables
Version: 26.4.0.cl or later\n\nAllows searching for variables in ThoughtSpot.\n\nRequires ADMINISTRATION role.\nThe CAN_MANAGE_VARIABLES permission allows you to manage Formula Variables in the current organization scope.\n\nThe API endpoint supports searching variables by:\n* Variable identifier (ID or name)\n* Variable type\n* Name pattern (case-insensitive, supports % for wildcard)\n\nThe search results can be formatted in three ways:\n* METADATA - Returns only variable metadata (default)\n* METADATA_AND_VALUES - Returns variable metadata and values\n\nThe values can be filtered by scope:\n* org_identifier\n* principal_identifier\n* model_identifier\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Variable", + "26.4.0.cl" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SearchVariablesRequest" + } + } }, - "extended_properties": { - "type": "object", - "description": "Properties for the user", - "nullable": true + "required": true + }, + "parameters": [], + "responses": { + "200": { + "description": "List of variables is successful.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Variable" + } + } + } + } }, - "extended_preferences": { - "type": "object", - "description": "Preferences for the user", - "nullable": true + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "user_parameters": { - "type": "object", - "description": "User Parameters which are specified for the user via JWToken", - "nullable": true + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "access_control_properties": { - "type": "object", - "description": "Access Control Properties which are specified for the user via JWToken", - "nullable": true + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "variable_values": { - "type": "object", - "description": "Formula Variables which are specified for the user via JWToken", - "nullable": true + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } - }, - "Org": { - "type": "object", - "required": [ - "id", - "name" + } + }, + "/api/rest/2.0/template/variables/{identifier}/update": { + "post": { + "operationId": "updateVariable", + "description": "\nUpdate a variable's name
Version: 26.4.0.cl or later\n\nAllows updating a variable's name in ThoughtSpot.\n\nRequires ADMINISTRATION role and TENANT scope.\nThe CAN_MANAGE_VARIABLES permission allows you to manage Formula Variables in the current organization scope.\n\nThe API endpoint allows updating:\n* The variable name\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Variable", + "26.4.0.cl" ], - "properties": { - "id": { - "type": "integer", - "format": "int32", - "description": "The ID of the object." + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateVariableRequest" + } + } }, - "name": { - "type": "string", - "description": "Name of the object." - } + "required": true }, - "description": "The current Org context of the user." - }, - "FavoriteMetadataItem": { - "type": "object", - "required": [ - "id", - "name", - "type" + "parameters": [ + { + "in": "path", + "name": "identifier", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique id or name of the variable to update." + } ], - "properties": { - "id": { - "type": "string", - "description": "Unique ID of the metadata object." + "responses": { + "204": { + "description": "Variable name updated successfully." }, - "name": { - "type": "string", - "description": "name of the metadata object." + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "type": { - "type": "string", - "enum": [ - "LIVEBOARD", - "ANSWER", - "LOGICAL_TABLE", - "LOGICAL_COLUMN", - "CONNECTION", - "TAG", - "USER", - "USER_GROUP", - "LOGICAL_RELATIONSHIP" - ], - "description": " Type of metadata object.\n \n\nRequired if the name of the object is set as the identifier. This attribute is optional when the object GUID is specified as the identifier." - } - } - }, - "Object_ID_And_Name": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The unique identifier of the object.", - "nullable": true + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "name": { - "type": "string", - "description": "Name of the object.", - "nullable": true - } - }, - "description": "The object representation with ID and Name." - }, - "FavoriteMetadataInput": { - "type": "object", - "properties": { - "identifier": { - "type": "string", - "description": "Unique ID or name of the metadata object.", - "nullable": true + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "type": { - "type": "string", - "enum": [ - "LIVEBOARD", - "ANSWER" - ], - "description": " Type of metadata object.\n \n\nRequired if the name of the object is set as the identifier. This attribute is optional when the object GUID is specified as the identifier.", - "nullable": true + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } - }, - "SortOptions": { - "type": "object", - "properties": { - "field_name": { - "type": "string", - "enum": [ - "NAME", - "DISPLAY_NAME", - "AUTHOR", - "CREATED", - "MODIFIED" - ], - "description": "Name of the field to apply the sort on.", - "nullable": true + } + }, + "/api/rest/2.0/template/variables/update-values": { + "post": { + "operationId": "updateVariableValues", + "description": "\nUpdate values for multiple variables
Version: 10.14.0.cl or later\n\n**Note:** This API endpoint is deprecated and will be removed from ThoughtSpot in a future release. Use [POST /api/rest/2.0/template/variables/{identifier}/update-values](/api/rest/2.0/template/variables/%7Bidentifier%7D/update-values) instead.\n\nAllows updating values for multiple variables in ThoughtSpot.\n\nRequires ADMINISTRATION role.\nThe CAN_MANAGE_VARIABLES permission allows you to manage Formula Variables in the current organization scope.\n\nThe API endpoint allows:\n* Adding new values to variables\n* Replacing existing values\n* Deleting values from variables\n\nWhen updating variable values, you need to specify:\n* The variable identifiers\n* The values to add/replace/remove for each variable\n* The operation to perform (ADD, REPLACE, REMOVE, RESET)\n\nBehaviour based on operation type:\n* ADD - Adds values to the variable if this is a list type variable, else same as replace.\n* REPLACE - Replaces all values of a given set of constraints with the current set of values.\n* REMOVE - Removes any values which match the set of conditions of the variables if this is a list type variable, else clears value.\n* RESET - Removes all constrains for a given variable, scope is ignored\n\n\n\n\n#### Endpoint URL\n", + "deprecated": true, + "tags": [ + "Variable", + "10.14.0.cl" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateVariableValuesRequest" + } + } }, - "order": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ], - "description": "Sort order : ASC(Ascending) or DESC(Descending).", - "nullable": true - } + "required": true }, - "description": "Sort options." - }, - "SystemInfo": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The unique identifier of the object", - "nullable": true - }, - "name": { - "type": "string", - "description": "Name of the cluster.", - "nullable": true + "parameters": [], + "responses": { + "204": { + "description": "Variable values updated successfully." }, - "release_version": { - "type": "string", - "description": "The release version of the cluster.", - "nullable": true + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "time_zone": { - "type": "string", - "description": "The timezone of the cluster.", - "nullable": true + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "locale": { - "type": "string", - "description": "The default locale of the cluster.", - "nullable": true + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "date_format": { - "type": "string", - "description": "The default date format representation of the cluster.", - "nullable": true + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/rest/2.0/vcs/git/branches/commit": { + "post": { + "operationId": "commitBranch", + "description": "\n Version: 9.2.0.cl or later\n\nCommits TML files of metadata objects to the Git branch configured on your instance.\n\nRequires at least edit access to objects used in the commit operation.\n\nBefore using this endpoint to push your commits:\n\n* Enable Git integration on your instance.\n* Make sure the Git repository and branch details are configured on your instance.\n\nFor more information, see [Git integration documentation](https://developers.thoughtspot.com/docs/git-integration).\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Version Control", + "9.2.0.cl" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommitBranchRequest" + } + } }, - "api_version": { - "type": "string", - "description": "The API version of the cluster.", - "nullable": true - }, - "type": { - "type": "string", - "description": "The deployment type of the cluster.", - "nullable": true - }, - "environment": { - "type": "string", - "description": "The deployed environment of the cluster.", - "nullable": true + "required": true + }, + "parameters": [], + "responses": { + "200": { + "description": "Successfully committed the metadata objects", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CommitResponse" + } + } + } }, - "license": { - "type": "string", - "description": "The license applied to the cluster.", - "nullable": true + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "date_time_format": { - "type": "string", - "description": "The default date time format representation of the cluster.", - "nullable": true + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "time_format": { - "type": "string", - "description": "The default time format representation of the cluster.", - "nullable": true + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "system_user_id": { - "type": "string", - "description": "The unique identifier of system user.", - "nullable": true + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/rest/2.0/vcs/git/config/create": { + "post": { + "operationId": "createConfig", + "description": "\n Version: 9.2.0.cl or later\n\nAllows you to connect a ThoughtSpot instance to a Git repository.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance on your instance, the `CAN_SETUP_VERSION_CONTROL` (**Can set up version control**) privilege.\n\nYou can use this API endpoint to connect your ThoughtSpot development and production environments to the development and production branches of a Git repository.\n\nBefore using this endpoint to connect your ThoughtSpot instance to a Git repository, check the following prerequisites:\n\n* You have a Git repository. If you are using GitHub, make sure you have a valid account and an access token to connect ThoughtSpot to GitHub. For information about generating a token, see [GitHub Documentation](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens).\n\n* Your access token has `repo` scope that grants full access to public and private repositories.\n* Your Git repository has a branch that can be configured as a default branch in ThoughtSpot.\n\nFor more information, see [Git integration documentation](https://developers.thoughtspot.com/docs/?pageid=git-integration).\n\n**Note**: ThoughtSpot supports only GitHub / itHub Enterprise for CI/CD.\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Version Control", + "9.2.0.cl" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateConfigRequest" + } + } }, - "super_user_id": { - "type": "string", - "description": "The unique identifier of super user.", - "nullable": true + "required": true + }, + "parameters": [], + "responses": { + "200": { + "description": "Successfully configured local repository", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RepoConfigObject" + } + } + } }, - "hidden_object_id": { - "type": "string", - "description": "The unique identifier of hidden object.", - "nullable": true + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "system_group_id": { - "type": "string", - "description": "The unique identifier of system group.", - "nullable": true + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "tsadmin_user_id": { - "type": "string", - "description": "The unique identifier of tsadmin user.", - "nullable": true + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "admin_group_id": { - "type": "string", - "description": "The unique identifier of admin group.", - "nullable": true + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/rest/2.0/vcs/git/config/delete": { + "post": { + "operationId": "deleteConfig", + "description": "\n Version: 9.2.0.cl or later\n\nDeletes Git repository configuration from your ThoughtSpot instance.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance on your instance, the `CAN_SETUP_VERSION_CONTROL` (**Can set up version control**) privilege.\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Version Control", + "9.2.0.cl" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteConfigRequest" + } + } }, - "all_tables_connection_id": { - "type": "string", - "description": "The unique identifier of all tables connection.", - "nullable": true + "required": true + }, + "parameters": [], + "responses": { + "204": { + "description": "Successfully deleted local repository configuration" }, - "all_user_group_id": { - "type": "string", - "description": "The unique identifier of ALL group.", - "nullable": true + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "accept_language": { - "type": "string", - "description": "The supported accept language by the cluster.", - "nullable": true + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "all_user_group_member_user_count": { - "type": "integer", - "format": "int32", - "description": "The count of users of ALL group.", - "nullable": true + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "logical_model_version": { - "type": "integer", - "format": "int32", - "description": "The version number of logical model of the cluster.", - "nullable": true + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } - }, - "SystemConfig": { - "type": "object", - "properties": { - "onboarding_content_url": { - "type": "string", - "nullable": true + } + }, + "/api/rest/2.0/vcs/git/commits/deploy": { + "post": { + "operationId": "deployCommit", + "description": "\n Version: 9.2.0.cl or later\n\nAllows you to deploy a commit and publish TML content to your ThoughtSpot instance.\n\nRequires at least edit access to the objects used in the deploy operation.\n\nThe API deploys the head of the branch unless a `commit_id` is specified in the API request. If the branch name is not defined in the request, the default branch is considered for deploying commits.\n\nFor more information, see [Git integration documentation](https://developers.thoughtspot.com/docs/git-integration).\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Version Control", + "9.2.0.cl" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeployCommitRequest" + } + } }, - "saml_enabled": { - "type": "boolean", - "nullable": true + "required": true + }, + "parameters": [], + "responses": { + "200": { + "description": "Successfully deployed the changes", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DeployResponse" + } + } + } + } }, - "okta_enabled": { - "type": "boolean", - "nullable": true - } - } - }, - "SystemOverrideInfo": { - "type": "object", - "properties": { - "config_override_info": { - "type": "object", - "nullable": true - } - } - }, - "OrgPreferenceSearchCriteriaInput": { - "type": "object", - "required": [ - "org_identifier" - ], - "properties": { - "org_identifier": { - "type": "string", - "description": "Unique identifier or name of the org" + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "event_types": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "LIVEBOARD_SCHEDULE" - ] - }, - "description": "Event types to search for. If not provided, all event types for this org are returned.", - "nullable": true - } - } - }, - "CommunicationChannelPreferencesResponse": { - "type": "object", - "properties": { - "cluster_preferences": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EventChannelConfig" - }, - "description": "Cluster-level default configurations.", - "nullable": true + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "org_preferences": { - "type": "array", - "items": { - "$ref": "#/components/schemas/OrgChannelConfigResponse" - }, - "description": "Org-specific configurations.", - "nullable": true - } - } - }, - "EventChannelConfig": { - "type": "object", - "required": [ - "event_type", - "channels" - ], - "properties": { - "event_type": { - "type": "string", - "enum": [ - "LIVEBOARD_SCHEDULE" - ], - "description": "Type of event for which communication channels are configured" + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "channels": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "EMAIL", - "WEBHOOK" - ] - }, - "description": "Communication channels enabled for this event type. Empty array indicates no channels are enabled." + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } - }, - "OrgChannelConfigResponse": { - "type": "object", - "required": [ - "org", - "preferences" + } + }, + "/api/rest/2.0/vcs/git/commits/{commit_id}/revert": { + "post": { + "operationId": "revertCommit", + "description": "\n Version: 9.2.0.cl or later\n\nReverts TML objects to a previous commit specified in the API request.\n\nRequires at least edit access to objects.\n\nIn the API request, specify the `commit_id`. If the branch name is not specified in the request, the API will consider the default branch configured on your instance.\n\nBy default, the API reverts all objects. If the revert operation fails for one of the objects provided in the commit, the API returns an error and does not revert any object.\n\nFor more information, see [Git integration documentation](https://developers.thoughtspot.com/docs/git-integration).\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Version Control", + "9.2.0.cl" ], - "properties": { - "org": { - "$ref": "#/components/schemas/OrgDetails", - "description": "Org details" + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RevertCommitRequest" + } + } }, - "preferences": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EventChannelConfig" + "required": true + }, + "parameters": [ + { + "in": "path", + "name": "commit_id", + "required": true, + "schema": { + "type": "string" }, - "description": "Event-specific communication channel configurations for this org" + "description": "Commit id to which the object should be reverted" } - } - }, - "OrgDetails": { - "type": "object", - "required": [ - "id", - "name" ], - "properties": { - "id": { - "type": "string", - "description": "Unique id of the org" - }, - "name": { - "type": "string", - "description": "Name of the org" - } - } - }, - "SecuritySettingsResponse": { - "type": "object", - "properties": { - "cluster_preferences": { - "$ref": "#/components/schemas/SecuritySettingsClusterPreferences", - "description": "Cluster-level security preferences.", - "nullable": true + "responses": { + "200": { + "description": "Reverted the object to the commit point specified", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RevertResponse" + } + } + } }, - "org_preferences": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SecuritySettingsOrgPreferences" - }, - "description": "Org-level security preferences.", - "nullable": true - } - }, - "description": "Response type for security settings search." - }, - "SecuritySettingsClusterPreferences": { - "type": "object", - "properties": { - "enable_partitioned_cookies": { - "type": "boolean", - "description": "Support embedded access when third-party cookies are blocked.", - "nullable": true + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "cors_whitelisted_urls": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Allowed origins for CORS.", - "nullable": true - }, - "csp_settings": { - "$ref": "#/components/schemas/CspSettings", - "description": "CSP (Content Security Policy) settings.", - "nullable": true - }, - "saml_redirect_urls": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Allowed redirect hosts for SAML login.", - "nullable": true + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "non_embed_access": { - "$ref": "#/components/schemas/ClusterNonEmbedAccess", - "description": "Non-embed access configuration at cluster level.", - "nullable": true + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "trusted_auth_status": { - "type": "string", - "enum": [ - "ENABLED", - "DISABLED" - ], - "description": "Trusted authentication status at the cluster level.
Version: 26.6.0.cl or later", - "nullable": true + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } - }, - "description": "Cluster-level security preferences." - }, - "CspSettings": { - "type": "object", - "properties": { - "connect_src_urls": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Allowed URLs for connect-src directive.", - "nullable": true - }, - "font_src_urls": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Allowed URLs for font-src directive.", - "nullable": true + } + } + }, + "/api/rest/2.0/vcs/git/commits/search": { + "post": { + "operationId": "searchCommits", + "description": "\n Version: 9.2.0.cl or later\n\nGets a list of commits for a given metadata object.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) privilege.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance on your instance, the `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**) privilege and edit access to the metadata objects.\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Version Control", + "9.2.0.cl" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SearchCommitsRequest" + } + } }, - "visual_embed_hosts": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Allowed hosts for visual embed (frame-ancestors directive).", - "nullable": true + "required": true + }, + "parameters": [], + "responses": { + "200": { + "description": "Commit history of the metadata object", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CommitHistoryResponse" + } + } + } + } }, - "iframe_src_urls": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Allowed URLs for frame-src directive.", - "nullable": true + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "img_src_urls": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Allowed URLs for img-src directive.", - "nullable": true + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "script_src_urls": { - "$ref": "#/components/schemas/ScriptSrcUrls", - "description": "Script-src settings including URLs and enabled flag.", - "nullable": true + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "style_src_urls": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Allowed URLs for style-src directive.", - "nullable": true + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } - }, - "description": "CSP (Content Security Policy) settings." - }, - "ScriptSrcUrls": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "description": "Whether script-src customization is enabled.", - "nullable": true + } + } + }, + "/api/rest/2.0/vcs/git/config/search": { + "post": { + "operationId": "searchConfig", + "description": "\n Version: 9.2.0.cl or later\n\nGets Git repository connections configured on the ThoughtSpot instance.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance on your instance, the `CAN_SETUP_VERSION_CONTROL` (**Can set up version control**) privilege.\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Version Control", + "9.2.0.cl" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SearchConfigRequest" + } + } }, - "urls": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Allowed URLs for script-src directive. Can only be set if enabled is true.", - "nullable": true - } + "required": true }, - "description": "Script-src CSP settings." - }, - "ClusterNonEmbedAccess": { - "type": "object", - "properties": { - "block_full_app_access": { - "type": "boolean", - "description": "Block full application access for non-embedded usage.", - "nullable": true + "parameters": [], + "responses": { + "200": { + "description": "Details of local repository configuration", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RepoConfigObject" + } + } + } + } }, - "groups_with_access": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GroupInfo" - }, - "description": "Groups that have non-embed full app access.\nOnly applicable when orgs feature is disabled. Use org_preferences when org feature is enabled.", - "nullable": true - } - }, - "description": "Cluster-level non-embed access configuration." - }, - "GroupInfo": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier of the group.", - "nullable": true - }, - "name": { - "type": "string", - "description": "Name of the group.", - "nullable": true - } - }, - "description": "Group information for non-embed access." - }, - "SecuritySettingsOrgPreferences": { - "type": "object", - "properties": { - "org": { - "$ref": "#/components/schemas/SecuritySettingsOrgDetails", - "description": "Org details (id and name).", - "nullable": true - }, - "cors_whitelisted_urls": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Allowed origins for CORS for this org.", - "nullable": true + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "non_embed_access": { - "$ref": "#/components/schemas/OrgNonEmbedAccess", - "description": "Non-embed access configuration for this org.", - "nullable": true + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "trusted_auth_status": { - "type": "string", - "enum": [ - "ENABLED", - "DISABLED" - ], - "description": "Trusted authentication status for this org.
Version: 26.6.0.cl or later", - "nullable": true - } - }, - "description": "Org-level security preferences." - }, - "SecuritySettingsOrgDetails": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int32", - "description": "Unique identifier of the org.", - "nullable": true + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "name": { - "type": "string", - "description": "Name of the org.", - "nullable": true + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } - }, - "description": "Org details for security settings." - }, - "OrgNonEmbedAccess": { - "type": "object", - "properties": { - "block_full_app_access": { - "type": "boolean", - "description": "Block full application access for non-embedded usage.", - "nullable": true + } + } + }, + "/api/rest/2.0/vcs/git/config/update": { + "post": { + "operationId": "updateConfig", + "description": "\n Version: 9.2.0.cl or later\n\nUpdates Git repository configuration settings.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) privilege.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance on your instance, the `CAN_SETUP_VERSION_CONTROL` (**Can set up version control**) privilege.\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Version Control", + "9.2.0.cl" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateConfigRequest" + } + } }, - "groups_with_access": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GroupInfo" - }, - "description": "Groups that have non-embed full app access.", - "nullable": true - } + "required": true }, - "description": "Org-level non-embed access configuration." - }, - "OrgResponse": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int32", - "description": "Unique identifier of the Org.", - "nullable": true + "parameters": [], + "responses": { + "200": { + "description": "Successfully updated local repository configuration", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RepoConfigObject" + } + } + } }, - "name": { - "type": "string", - "description": "Name of the Org.", - "nullable": true + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "status": { - "type": "string", - "enum": [ - "ACTIVE", - "IN_ACTIVE" - ], - "description": "Status of the Org.", - "nullable": true + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "description": { - "type": "string", - "description": "Description of the Org.", - "nullable": true + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "visibility": { - "type": "string", - "enum": [ - "SHOW", - "HIDDEN" - ], - "description": "Visibility of the Org.", - "nullable": true + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } - }, - "Tag": { - "type": "object", - "required": [ - "name", - "id" + } + }, + "/api/rest/2.0/vcs/git/branches/validate": { + "post": { + "operationId": "validateMerge", + "description": "\n Version: 9.2.0.cl or later\n\nValidates the content of your source branch against the objects in your destination environment.\n\nBefore merging content from your source branch to the destination branch, run this API operation from your destination environment and ensure that the changes from the source branch function in the destination environment.\n\nRequires `DATAMANAGEMENT` (**Can manage data**) privilege.\n\nIf [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance on your instance, the `CAN_MANAGE_WORKSHEET_VIEWS_TABLES` (**Can manage data models**) privilege and edit access to the metadata objects.\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Version Control", + "9.2.0.cl" ], - "properties": { - "name": { - "type": "string" + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ValidateMergeRequest" + } + } }, - "id": { - "type": "string" + "required": true + }, + "parameters": [], + "responses": { + "200": { + "description": "validation done successfully", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DeployResponse" + } + } + } + } }, - "color": { - "type": "string", - "nullable": true - }, - "deleted": { - "type": "boolean", - "nullable": true + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "hidden": { - "type": "boolean", - "nullable": true + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "external": { - "type": "boolean", - "nullable": true + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "deprecated": { - "type": "boolean", - "nullable": true + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/rest/2.0/webhooks/create": { + "post": { + "operationId": "createWebhookConfiguration", + "description": "\n Version: 10.14.0.cl or later\n\nCreates a new webhook configuration to receive notifications for specified events. The webhook will be triggered when the configured events occur in the system.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, users with `CAN_MANAGE_WEBHOOKS` (**Can manage webhooks**) privilege are also authorized to perform this action.\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Webhooks", + "10.14.0.cl" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateWebhookConfigurationRequest" + } + } }, - "creation_time_in_millis": { - "type": "number", - "format": "float", - "nullable": true + "required": true + }, + "parameters": [], + "responses": { + "200": { + "description": "Webhook configuration created successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WebhookResponse" + }, + "examples": { + "example_1": { + "description": "Basic webhook with Bearer token authentication", + "value": { + "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", + "name": "My Liveboard Webhook", + "description": "Webhook to notify external system about liveboard schedules", + "org": { + "id": "0", + "name": "Primary" + }, + "url": "https://myapp.example.com/webhooks/thoughtspot", + "url_params": { + "api_key": "abc123", + "version": "v1" + }, + "events": [ + "LIVEBOARD_SCHEDULE" + ], + "authentication": { + "BEARER_TOKEN": "***" + }, + "signature_verification": { + "type": "HMAC_SHA256", + "header": "X-Webhook-Signature", + "algorithm": "SHA256", + "secret": "***" + }, + "creation_time_in_millis": 1724277430243, + "modification_time_in_millis": 1724277430243, + "additional_headers": [ + { + "key": "Custom-Header", + "value": "value1" + }, + { + "key": "Custom-Header-2", + "value": "value2" + } + ], + "created_by": { + "id": "8e3f2a7b-9c4d-4e5f-8a1b-7c9d3e6f4a2b", + "name": "sarah_chen" + }, + "last_modified_by": { + "id": "8e3f2a7b-9c4d-4e5f-8a1b-7c9d3e6f4a2b", + "name": "sarah_chen" + } + } + }, + "example_2": { + "description": "Webhook with OAuth2 authentication", + "value": { + "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "name": "OAuth2 Webhook", + "description": "Webhook with OAuth2 client credentials", + "org": { + "id": "0", + "name": "Primary" + }, + "url": "https://api.example.com/webhooks", + "events": [ + "LIVEBOARD_SCHEDULE" + ], + "authentication": { + "OAUTH2": { + "authorization_url": "https://auth.example.com/oauth2/authorize", + "client_id": "client_123", + "client_secret": "***" + } + }, + "creation_time_in_millis": 1724278530123, + "modification_time_in_millis": 1724278530123, + "created_by": { + "id": "7d5e9f2a-4b8c-4d6e-9a3b-5c7e1f4a8b2d", + "name": "mike_rodriguez" + } + } + }, + "example_3": { + "description": "Webhook with GCP GCS storage destination", + "value": { + "id": "c9d8e7f6-a5b4-4321-9876-fedcba012345", + "name": "GCS Storage Webhook", + "description": "Webhook that uploads payloads to a GCS bucket", + "org": { + "id": "0", + "name": "Primary" + }, + "url": "https://api.example.com/webhooks", + "events": [ + "LIVEBOARD_SCHEDULE" + ], + "storage_destination": { + "storage_type": "GCP_GCS", + "storage_config": { + "gcp_gcs_config": { + "bucket_name": "my-webhook-files", + "service_account_email": "my-sa@my-project.iam.gserviceaccount.com", + "path_prefix": "webhooks/" + } + } + }, + "creation_time_in_millis": 1724279630456, + "modification_time_in_millis": 1724279630456, + "created_by": { + "id": "3a2b1c4d-5e6f-7890-abcd-ef0123456789", + "name": "priya_sharma" + }, + "last_modified_by": { + "id": "3a2b1c4d-5e6f-7890-abcd-ef0123456789", + "name": "priya_sharma" + } + } + } + } + } + } }, - "modification_time_in_millis": { - "type": "number", - "format": "float", - "nullable": true + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "author_id": { - "type": "string", - "nullable": true + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "modifier_id": { - "type": "string", - "nullable": true + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "owner_id": { - "type": "string", - "nullable": true + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } - }, - "UserGroupResponse": { - "type": "object", - "required": [ - "display_name", - "id", - "name", - "visibility" + } + }, + "/api/rest/2.0/webhooks/delete": { + "post": { + "operationId": "deleteWebhookConfigurations", + "description": "\n Version: 10.14.0.cl or later\n\nDeletes one or more webhook configurations by their unique id or name. Returns status of each deletion operation, including successfully deleted webhooks and any failures with error details.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, users with `CAN_MANAGE_WEBHOOKS` (**Can manage webhooks**) privilege are also authorized to perform this action.\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Webhooks", + "10.14.0.cl" ], - "properties": { - "author_id": { - "type": "string", - "description": "The unique identifier of the object", - "nullable": true - }, - "complete_detail": { - "type": "boolean", - "description": "Indicates whether the response has complete detail of the group.", - "nullable": true - }, + "requestBody": { "content": { - "type": "object", - "description": "Content details of the group", - "nullable": true - }, - "creation_time_in_millis": { - "type": "number", - "format": "float", - "description": "Creation time of the group in milliseconds", - "nullable": true - }, - "default_liveboards": { - "type": "array", - "items": { - "$ref": "#/components/schemas/UserGroup" - }, - "description": "Liveboards that are assigned as default Liveboards to the group.", - "nullable": true - }, - "deleted": { - "type": "boolean", - "description": "Indicates whether the group is deleted", - "nullable": true - }, - "deprecated": { - "type": "boolean", - "description": "Indicates whether the group is deprecated", - "nullable": true - }, - "description": { - "type": "string", - "description": "Description of the group", - "nullable": true - }, - "display_name": { - "type": "string", - "description": "Display name of the group." - }, - "external": { - "type": "boolean", - "description": "Indicates whether the group is external", - "nullable": true - }, - "generation_number": { - "type": "integer", - "format": "int32", - "description": "Generation number of the group", - "nullable": true - }, - "hidden": { - "type": "boolean", - "description": "Indicates whether the group is hidden", - "nullable": true - }, - "id": { - "type": "string", - "description": "The unique identifier of the object" - }, - "index": { - "type": "integer", - "format": "int32", - "description": "Index number of the group", - "nullable": true - }, - "index_version": { - "type": "integer", - "format": "int32", - "description": "Index version number of the group", - "nullable": true - }, - "metadata_version": { - "type": "integer", - "format": "int32", - "description": "Metadata version number of the group", - "nullable": true + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteWebhookConfigurationsRequest" + } + } }, - "modification_time_in_millis": { - "type": "number", - "format": "float", - "description": "Last modified time of the group in milliseconds.", - "nullable": true + "required": true + }, + "parameters": [], + "responses": { + "200": { + "description": "Webhook configurations deleted successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WebhookDeleteResponse" + }, + "examples": { + "example_1": { + "description": "Successful deletion of multiple webhooks", + "value": { + "deleted_count": 2, + "failed_count": 0, + "deleted_webhooks": [ + { + "id": "b9e3d8f2-4c7a-4e1b-8d3c-5f9a2b7e4c6d", + "name": "Old Webhook 1", + "description": "First webhook to be deleted", + "org": { + "id": "0", + "name": "Primary" + }, + "url": "https://old-service.example.com/webhook1", + "events": [ + "LIVEBOARD_SCHEDULE" + ], + "authentication": { + "BEARER_TOKEN": "***" + }, + "creation_time_in_millis": 1724274600000, + "modification_time_in_millis": 1724274600000, + "created_by": { + "id": "1f4e7b2d-9c3a-4e6f-8b1d-3e7c5a9b2f4e", + "name": "jennifer_patel" + } + }, + { + "id": "e7c4a1f8-2b5d-4a9e-7c3f-8b1e5d4a7c9b", + "name": "Old Webhook 2", + "description": "Second webhook to be deleted", + "org": { + "id": "0", + "name": "Primary" + }, + "url": "https://old-service.example.com/webhook2", + "events": [ + "LIVEBOARD_SCHEDULE" + ], + "authentication": { + "API_KEY": { + "key": "X-API-Key", + "value": "***" + } + }, + "creation_time_in_millis": 1724275530123, + "modification_time_in_millis": 1724275530123, + "created_by": { + "id": "9a5c2e8f-4b7d-4c1e-9f2a-6c8e3b5d7a4c", + "name": "david_thompson" + } + } + ], + "failed_webhooks": [] + } + }, + "example_2": { + "description": "Partial failure during deletion", + "value": { + "deleted_count": 1, + "failed_count": 1, + "deleted_webhooks": [ + { + "id": "c8f2a5e9-3d6b-4f1e-a8c2-7e4b1d9f5a3c", + "name": "Successfully Deleted Webhook", + "description": "This webhook was deleted successfully", + "org": { + "id": "0", + "name": "Primary" + }, + "url": "https://service.example.com/webhook", + "events": [ + "LIVEBOARD_SCHEDULE" + ], + "authentication": { + "NO_AUTH": "" + }, + "creation_time_in_millis": 1724276415456, + "modification_time_in_millis": 1724276415456, + "created_by": { + "id": "6e9c4f2a-8b5d-4e1f-9c3a-5f8b2e7d4a6c", + "name": "emma_wang" + } + } + ], + "failed_webhooks": [ + { + "id": "a3f7c1e4-9b2d-4a6e-8f3c-1e5b7a9c4f2e", + "name": "Non-existent Webhook", + "error_message": "Webhook not found or access denied" + } + ] + } + } + } + } + } }, - "modifier_id": { - "type": "string", - "description": "The unique identifier of the object", - "nullable": true + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "name": { - "type": "string", - "description": "Name of the group." + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "orgs": { - "type": "array", - "items": { - "$ref": "#/components/schemas/UserGroup" - }, - "description": "Orgs in which group exists.", - "nullable": true + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "owner_id": { - "type": "string", - "description": "The unique identifier of the object", - "nullable": true - }, - "parent_type": { - "type": "string", - "enum": [ - "USER", - "GROUP" - ], - "description": "Parent type of the group.", - "nullable": true - }, - "privileges": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Privileges which are assigned to the group", - "nullable": true - }, - "sub_groups": { - "type": "array", - "items": { - "$ref": "#/components/schemas/UserGroup" - }, - "description": "Groups who are part of the group", - "nullable": true - }, - "system_group": { - "type": "boolean", - "description": "Indicates whether the group is a system group.", - "nullable": true - }, - "tags": { - "type": "array", - "items": { - "$ref": "#/components/schemas/UserGroup" - }, - "description": "Tags associated with the group.", - "nullable": true - }, - "type": { - "type": "string", - "enum": [ - "LOCAL_GROUP", - "LDAP_GROUP", - "TEAM_GROUP", - "TENANT_GROUP" - ], - "description": "Type of the group.", - "nullable": true - }, - "users": { - "type": "array", - "items": { - "$ref": "#/components/schemas/UserGroup" - }, - "description": "Users who are part of the group.", - "nullable": true - }, - "visibility": { - "type": "string", - "enum": [ - "SHARABLE", - "NON_SHARABLE" - ], - "description": "Visibility of the group. The SHARABLE makes a group visible to other users and groups, and thus allows them to share objects." - }, - "roles": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Role" - }, - "description": "List of roles assgined to the user", - "nullable": true - } - } - }, - "Role": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "id of the role", - "nullable": true - }, - "name": { - "type": "string", - "description": "name of the role", - "nullable": true + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } - }, - "MetadataListItemInput": { - "type": "object", - "properties": { - "identifier": { - "type": "string", - "description": "Unique ID or name of the metadata.", - "nullable": true + } + }, + "/api/rest/2.0/webhooks/storage-config": { + "get": { + "operationId": "getWebhookStorageConfig", + "description": "\n Version: 26.7.0.cl or later\n\nReturns cluster-level storage setup information for configuring customer-managed storage. Use this endpoint to obtain the IAM identity details required before configuring a webhook storage destination. For S3 destinations, returns the platform AWS account ID and IAM trust policy template. For GCS destinations, returns the platform GCP service account email and the IAM role to grant for service account impersonation.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, users with `CAN_MANAGE_WEBHOOKS` (**Can manage webhooks**) privilege are also authorized to perform this action.\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Webhooks", + "26.7.0.cl" + ], + "parameters": [], + "responses": { + "200": { + "description": "Storage setup information retrieved successfully", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WebhookStorageConfigInfo" + } + }, + "examples": { + "example_1": { + "description": "AWS-hosted cluster — customer configuring S3 storage destination", + "value": [ + { + "storage_type": "OBJECT_STORAGE", + "provider": "AWS_S3", + "config": { + "config_type": "AWS_TO_S3_STORAGE", + "aws_account_id": "123456789012", + "trust_policy_template": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "AWS": "arn:aws:iam::123456789012:root" + }, + "Action": "sts:AssumeRole", + "Condition": { + "StringEquals": { + "sts:ExternalId": "ts-webhook-a1b2c3d4-7890" + } + } + } + ] + }, + "setup_instructions": [ + "1. Create an IAM role in your AWS account", + "2. Attach the trust policy template to the role", + "3. Attach S3 permissions (s3:PutObject, s3:PutObjectAcl) to the role", + "4. Use the role ARN in your webhook storage configuration" + ] + } + } + ] + }, + "example_2": { + "description": "GCP-hosted cluster — customer configuring S3 storage destination", + "value": [ + { + "storage_type": "OBJECT_STORAGE", + "provider": "AWS_S3", + "config": { + "config_type": "GCP_TO_S3_STORAGE", + "gcp_service_account_id": "115663769112811637952", + "oidc_provider": "accounts.google.com", + "trust_policy_template": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Federated": "arn:aws:iam::YOUR_AWS_ACCOUNT_ID:oidc-provider/accounts.google.com" + }, + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": { + "accounts.google.com:sub": "115663769112811637952" + } + } + } + ] + }, + "setup_instructions": [ + "1. Add accounts.google.com as an Identity Provider in AWS IAM", + "2. Create an IAM role with Web Identity Federation trust", + "3. Configure the trust policy with the GCP service account ID", + "4. Attach S3 permissions (s3:PutObject, s3:PutObjectAcl) to the role", + "5. Use the role ARN in your webhook storage configuration" + ] + } + } + ] + }, + "example_3": { + "description": "GCP-hosted cluster — customer configuring both S3 and GCS storage destinations", + "value": [ + { + "storage_type": "OBJECT_STORAGE", + "provider": "AWS_S3", + "config": { + "config_type": "GCP_TO_S3_STORAGE", + "gcp_service_account_id": "115663769112811637952", + "oidc_provider": "accounts.google.com", + "trust_policy_template": { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Federated": "arn:aws:iam::YOUR_AWS_ACCOUNT_ID:oidc-provider/accounts.google.com" + }, + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": { + "accounts.google.com:sub": "115663769112811637952" + } + } + } + ] + }, + "setup_instructions": [ + "1. Add accounts.google.com as an Identity Provider in AWS IAM", + "2. Create an IAM role with Web Identity Federation trust", + "3. Configure the trust policy with the GCP service account ID", + "4. Attach S3 permissions (s3:PutObject, s3:PutObjectAcl) to the role", + "5. Use the role ARN in your webhook storage configuration" + ] + } + }, + { + "storage_type": "OBJECT_STORAGE", + "provider": "GCP_GCS", + "config": { + "config_type": "GCP_TO_GCS_STORAGE", + "service_account_email": "webhook-sa@example-project.iam.gserviceaccount.com", + "required_role": "roles/iam.serviceAccountTokenCreator", + "setup_instructions": [ + "1. In GCP Console, go to IAM & Admin > Service Accounts", + "2. Click on the service account that has write access to your GCS bucket", + "3. Open the 'Principals with access' tab and click 'Grant Access'", + "4. Enter the service account email as the principal", + "5. Assign the roles/iam.serviceAccountTokenCreator role and save", + "6. Use your service account email in the webhook storage configuration" + ] + } + } + ] + } + } + } + } }, - "obj_identifier": { - "type": "string", - "description": "CustomObjectId of the metadata.", - "nullable": true + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "name_pattern": { - "type": "string", - "description": "A pattern to match the case-insensitive name of the metadata object. User % for a wildcard match.", - "nullable": true + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "type": { - "type": "string", - "enum": [ - "LIVEBOARD", - "ANSWER", - "LOGICAL_TABLE", - "LOGICAL_COLUMN", - "CONNECTION", - "TAG", - "USER", - "USER_GROUP", - "LOGICAL_RELATIONSHIP", - "INSIGHT_SPEC" - ], - "description": "Type of metadata. Required if the name of the object is set as identifier. This attribute is optional when the object GUID is specified as identifier.\n1. Liveboard\n2. Answers\n3. LOGICAL_TABLE for any data object such as table, worksheet or view.\n4. LOGICAL_COLUMN for a column of any data object such as table, worksheet or view.\n5. CONNECTION for creating or modify data connections.\n6. TAG for tag objects.\n7. USER for user objects.\n8. USER_GROUP for group objects.\n9. LOGICAL_RELATIONSHIP for table or worksheet joins. A join combines from one or several data object by using matching values\n10. INSIGHT_SPEC for SpotIQ objects", - "nullable": true + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } }, - "subtypes": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "ONE_TO_ONE_LOGICAL", - "WORKSHEET", - "PRIVATE_WORKSHEET", - "USER_DEFINED", - "AGGR_WORKSHEET", - "SQL_VIEW" - ] - }, - "description": "List of subtype of metadata. Applies for LOGICAL_TABLE type with the following valid values.\n1. ONE_TO_ONE_LOGICAL\n2. WORKSHEET\n3. PRIVATE_WORKSHEET.\n4. USER_DEFINED.\n5. AGGR_WORKSHEET.\n6. SQL_VIEW
Version: 10.11.0.cl or later", - "nullable": true + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } - }, - "PermissionInput": { - "type": "object", - "required": [ - "principal", - "share_mode" + } + }, + "/api/rest/2.0/webhooks/search": { + "post": { + "operationId": "searchWebhookConfigurations", + "description": "\n Version: 10.14.0.cl or later\n\nSearches for webhook configurations based on various criteria such as Org, webhook identifier, event type, with support for pagination and sorting. Returns matching webhook configurations with their complete details.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, users with `CAN_MANAGE_WEBHOOKS` (**Can manage webhooks**) privilege are also authorized to perform this action.\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Webhooks", + "10.14.0.cl" ], - "properties": { - "principal": { - "$ref": "#/components/schemas/PrincipalsInput", - "description": "Details of users or groups." + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SearchWebhookConfigurationsRequest" + } + } }, - "share_mode": { - "type": "string", - "enum": [ - "READ_ONLY", - "MODIFY", - "NO_ACCESS" - ], - "description": "Object share mode." - } + "required": true }, - "description": "Details of users or groups." - }, - "ExcludeMetadataListItemInput": { - "type": "object", - "required": [ - "identifier", - "type" - ], - "properties": { - "identifier": { - "type": "string", - "description": "Unique ID or name of the metadata." + "parameters": [], + "responses": { + "200": { + "description": "Webhook configurations retrieved successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WebhookSearchResponse" + }, + "examples": { + "example_1": { + "description": "Search results with multiple webhooks", + "value": { + "webhooks": [ + { + "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", + "name": "Liveboard Schedule Webhook", + "description": "Webhook for liveboard schedule notifications", + "org": { + "id": "0", + "name": "Primary" + }, + "url": "https://myapp.example.com/webhooks", + "url_params": { + "api_key": "abc123" + }, + "events": [ + "LIVEBOARD_SCHEDULE" + ], + "authentication": { + "BEARER_TOKEN": "***" + }, + "signature_verification": { + "type": "HMAC_SHA256", + "header": "X-Webhook-Signature", + "algorithm": "SHA256", + "secret": "***" + }, + "creation_time_in_millis": 1724277430243, + "modification_time_in_millis": 1724278215123, + "additional_headers": [ + { + "key": "Custom-Header", + "value": "value1" + }, + { + "key": "Custom-Header-2", + "value": "value2" + } + ], + "created_by": { + "id": "8e3f2a7b-9c4d-4e5f-8a1b-7c9d3e6f4a2b", + "name": "sarah_chen" + }, + "last_modified_by": { + "id": "2c9a7e4f-6b3d-4a8e-9f1c-5e7a3b9c2d6f", + "name": "alex_kim" + } + }, + { + "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "name": "API Key Webhook", + "description": "Webhook with API key authentication", + "org": { + "id": "0", + "name": "Primary" + }, + "url": "https://api.example.com/notifications", + "events": [ + "LIVEBOARD_SCHEDULE" + ], + "authentication": { + "API_KEY": { + "key": "X-API-Key", + "value": "***" + } + }, + "creation_time_in_millis": 1724275845987, + "modification_time_in_millis": 1724275845987, + "created_by": { + "id": "7d5e9f2a-4b8c-4d6e-9a3b-5c7e1f4a8b2d", + "name": "mike_rodriguez" + } + } + ], + "pagination": { + "record_offset": 0, + "record_size": 50, + "total_count": 2, + "has_more": false + } + } + }, + "example_2": { + "description": "Empty search results", + "value": { + "webhooks": [], + "pagination": { + "record_offset": 0, + "record_size": 50, + "total_count": 0, + "has_more": false + } + } + } + } + } + } }, - "type": { - "type": "string", - "enum": [ - "LIVEBOARD", - "ANSWER", - "LOGICAL_TABLE", - "LOGICAL_COLUMN", - "CONNECTION", - "TAG", - "USER", - "USER_GROUP", - "LOGICAL_RELATIONSHIP", - "INSIGHT_SPEC" - ], - "description": "Type of metadata. Required if the name of the object is set as identifier. This attribute is optional when the object GUID is specified as identifier.\n1. Liveboard\n2. Answers\n3. LOGICAL_TABLE for any data object such as table, worksheet or view\n4. LOGICAL_COLUMN for a column of any data object such as table, worksheet or view\n5. CONNECTION for connection objects\n6. TAG for tag objects\n7. USER for user objects\n8. USER_GROUP for group objects\n9. LOGICAL_RELATIONSHIP for table or worksheet joins. A join combines from one or several data object by using matching values.\n10. INSIGHT_SPEC for SpotIQ objects" + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } - }, - "FavoriteObjectOptionsInput": { - "type": "object", - "properties": { - "include": { - "type": "boolean", - "default": false, - "description": "Includes objects marked as favorite for the specified users.", - "nullable": true + } + }, + "/api/rest/2.0/webhooks/{webhook_identifier}/update": { + "post": { + "operationId": "updateWebhookConfiguration", + "description": "\n Version: 10.14.0.cl or later\n\nUpdates an existing webhook configuration by its unique id or name. Only the provided fields will be updated.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege. If [Role-Based Access Control (RBAC)](https://developers.thoughtspot.com/docs/rbac) is enabled on your instance, users with `CAN_MANAGE_WEBHOOKS` (**Can manage webhooks**) privilege are also authorized to perform this action.\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Webhooks", + "10.14.0.cl" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateWebhookConfigurationRequest" + } + } }, - "user_identifiers": { - "type": "array", - "items": { + "required": true + }, + "parameters": [ + { + "in": "path", + "name": "webhook_identifier", + "required": true, + "schema": { "type": "string" }, - "description": "Unique ID or name of the users. If not specified, the favorite objects of current logged in user are returned.", - "nullable": true + "description": "Unique ID or name of the webhook configuration." } - }, - "description": "Favorite object options." - }, - "MetadataSearchSortOptions": { - "type": "object", - "properties": { - "field_name": { - "type": "string", - "enum": [ - "NAME", - "DISPLAY_NAME", - "AUTHOR", - "CREATED", - "MODIFIED", - "VIEWS", - "FAVORITES", - "LAST_ACCESSED" - ], - "description": "Name of the field to apply the sort on.", - "nullable": true + ], + "responses": { + "204": { + "description": "Webhook configuration updated successfully" }, - "order": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ], - "description": "Sort order : ASC(Ascending) or DESC(Descending).", + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Unexpected error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "ErrorResponse": { + "type": "object", + "properties": { + "error": { + "type": "object", "nullable": true } - }, - "description": "Sort options." + } }, - "MetadataSearchResponse": { + "GetTokenResponse": { "type": "object", "required": [ - "metadata_type" + "token", + "creation_time_in_millis", + "expiration_time_in_millis", + "valid_for_user_id", + "valid_for_username" ], "properties": { - "metadata_id": { + "token": { "type": "string", - "description": "Unique identifier of the metadata.", - "nullable": true + "description": "Bearer auth token." }, - "metadata_name": { + "creation_time_in_millis": { + "type": "number", + "format": "float", + "description": "Token creation time in milliseconds." + }, + "expiration_time_in_millis": { + "type": "number", + "format": "float", + "description": "Token expiration time in milliseconds." + }, + "valid_for_user_id": { "type": "string", - "description": "Name of the metadata.", - "nullable": true + "description": "Username to whom the token is issued." }, - "metadata_type": { + "valid_for_username": { + "type": "string", + "description": "Unique identifier of the user to whom the token is issued." + } + } + }, + "SearchAuthSettingsResponse": { + "type": "object", + "properties": { + "auth_type": { "type": "string", "enum": [ - "LIVEBOARD", - "ANSWER", - "LOGICAL_TABLE", - "LOGICAL_COLUMN", - "CONNECTION", - "TAG", - "USER", - "USER_GROUP", - "LOGICAL_RELATIONSHIP", - "INSIGHT_SPEC" + "TRUSTED_AUTH" ], - "description": "Type of the metadata." - }, - "metadata_obj_id": { - "type": "string", - "description": "Custom identifier of the metadata.\n(Available from 10.8.0.cl onwards)", + "description": "Type of authentication mechanism returned.", "nullable": true }, - "dependent_objects": { - "type": "object", - "description": "Details of dependent objects of the metadata objects.", + "cluster_preferences": { + "$ref": "#/components/schemas/AuthClusterPreferences", + "description": "Cluster-level authentication configuration. Present when cluster scope was requested and the caller has ADMINISTRATION or CONTROL_TRUSTED_AUTH privilege.", "nullable": true }, - "incomplete_objects": { + "org_preferences": { "type": "array", "items": { - "type": "object" + "$ref": "#/components/schemas/AuthOrgPreference" }, - "description": "Details of incomplete information of the metadata objects if any.", - "nullable": true - }, - "metadata_detail": { - "type": "object", - "description": "Complete details of the metadata objects.", + "description": "Org-level authentication configurations. Present when org scope was requested and per-org auth feature is enabled.", "nullable": true - }, - "metadata_header": { - "type": "object", - "description": "Header information of the metadata objects.", + } + }, + "description": "Response for searchAuthSettings. Contains auth type and cluster/org-level preferences." + }, + "AuthClusterPreferences": { + "type": "object", + "properties": { + "auth_status": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ], + "description": "Whether authentication is enabled or disabled at the cluster level.", "nullable": true }, - "visualization_headers": { + "access_tokens": { "type": "array", "items": { - "type": "object" + "$ref": "#/components/schemas/AuthSettingsAccessToken" }, - "description": "Visualization header information of the metadata objects.", - "nullable": true - }, - "stats": { - "type": "object", - "description": "Stats of the metadata object. Includes views, favorites, last_accessed.", + "description": "Cluster-level access tokens. Absent when no token is configured.", "nullable": true } }, - "description": "Metadata Search Response Object." + "description": "Cluster-level authentication preferences." }, - "GetAsyncImportStatusResponse": { + "AuthSettingsAccessToken": { "type": "object", + "required": [ + "key" + ], "properties": { - "status_list": { + "key": { + "type": "string", + "description": "The plaintext token key value." + } + }, + "description": "An auth settings access token." + }, + "AuthOrgPreference": { + "type": "object", + "properties": { + "org": { + "$ref": "#/components/schemas/AuthOrgInfo", + "description": "Org identifier details.", + "nullable": true + }, + "auth_status": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ], + "description": "Whether authentication is enabled or disabled for this org.", + "nullable": true + }, + "access_tokens": { "type": "array", "items": { - "$ref": "#/components/schemas/ImportEPackAsyncTaskStatus" + "$ref": "#/components/schemas/AuthSettingsAccessToken" }, - "description": "List of task statuses.", - "nullable": true - }, - "last_batch": { - "type": "boolean", - "description": "Indicates whether there are more task statuses to fetch.", + "description": "Org-level access tokens. Absent when no token is configured or the feature flag is off.", "nullable": true } - } + }, + "description": "Org-level authentication preferences for a single org." }, - "ImportEPackAsyncTaskStatus": { + "AuthOrgInfo": { "type": "object", + "required": [ + "id" + ], "properties": { - "tenant_id": { - "type": "string", - "description": "GUID of tenant from which the task is initiated.", - "nullable": true - }, - "org_id": { + "id": { "type": "integer", "format": "int32", - "description": "Organisation ID of the user who initiated the task.", - "nullable": true - }, - "task_id": { - "type": "string", - "description": "Unique identifier for the task.", - "nullable": true + "description": "Unique identifier of the org." }, - "task_name": { + "name": { "type": "string", - "description": "Name of the task.", + "description": "Name of the org.", "nullable": true + } + }, + "description": "Org identifier returned in auth settings search results." + }, + "RiseSetter": { + "type": "object", + "required": [ + "field", + "path" + ], + "properties": { + "field": { + "type": "string" }, - "import_response": { - "type": "object", - "description": "Response of imported objects so far.", - "nullable": true + "path": { + "type": "string" + } + } + }, + "User": { + "type": "object", + "required": [ + "id", + "name", + "display_name", + "visibility" + ], + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of the user." }, - "task_status": { + "name": { "type": "string", - "enum": [ - "COMPLETED", - "IN_QUEUE", - "IN_PROGRESS", - "FAILED" - ], - "description": "Current status of the task.", - "nullable": true + "description": "Name of the user." }, - "author_id": { + "display_name": { "type": "string", - "description": "ID of the user who initiated the task.", - "nullable": true + "description": "Display name of the user." }, - "import_policy": { + "visibility": { "type": "string", "enum": [ - "PARTIAL", - "ALL_OR_NONE", - "VALIDATE_ONLY", - "PARTIAL_OBJECT" + "SHARABLE", + "NON_SHARABLE" ], - "description": "Policy used for the import task.", + "description": "Visibility of the users. The `SHARABLE` property makes a user visible to other users and group, who can share objects with the user." + }, + "author_id": { + "type": "string", + "description": "Unique identifier of author of the user.", "nullable": true }, - "created_at": { - "type": "number", - "format": "float", - "description": "Time when the task was created (in ms since epoch).", + "can_change_password": { + "type": "boolean", + "description": "Defines whether the user can change their password.", "nullable": true }, - "in_progress_at": { - "type": "number", - "format": "float", - "description": "Time when the task started (in ms since epoch).", + "complete_detail": { + "type": "boolean", + "description": "Defines whether the response has complete detail of the user.", "nullable": true }, - "completed_at": { + "creation_time_in_millis": { "type": "number", "format": "float", - "description": "Time when the task was completed (in ms since epoch).", + "description": "Creation time of the user in milliseconds.", "nullable": true }, - "total_object_count": { - "type": "integer", - "format": "int32", - "description": "Total number of objects to process.", + "current_org": { + "$ref": "#/components/schemas/Org", + "description": "Current logged-in Org of the user.", "nullable": true }, - "object_processed_count": { - "type": "integer", - "format": "int32", - "description": "Number of objects processed so far.", + "deleted": { + "type": "boolean", + "description": "Indicates whether the user is deleted.", "nullable": true }, - "modified_at": { - "type": "number", - "format": "float", - "description": "Last time the task status was updated (in ms since epoch).", + "deprecated": { + "type": "boolean", + "description": "Indicates whether the user is deprecated.", "nullable": true }, - "author_display_name": { + "account_type": { "type": "string", - "description": "Display name of the user who initiated the task.", + "enum": [ + "LOCAL_USER", + "LDAP_USER", + "SAML_USER", + "OIDC_USER", + "REMOTE_USER" + ], + "description": "Type of the user account.", "nullable": true - } - } - }, - "SqlQueryResponse": { - "type": "object", - "required": [ - "metadata_id", - "metadata_name", - "metadata_type", - "sql_queries" - ], - "properties": { - "metadata_id": { - "type": "string", - "description": "Unique identifier of the metadata." - }, - "metadata_name": { - "type": "string", - "description": "Name of the metadata." }, - "metadata_type": { + "account_status": { "type": "string", "enum": [ - "LIVEBOARD", - "ANSWER", - "LOGICAL_TABLE", - "LOGICAL_COLUMN", - "CONNECTION", - "TAG", - "USER", - "USER_GROUP", - "LOGICAL_RELATIONSHIP" + "ACTIVE", + "INACTIVE", + "EXPIRED", + "LOCKED", + "PENDING", + "SUSPENDED" ], - "description": "Type of the metadata." + "description": "Status of the user account.", + "nullable": true }, - "sql_queries": { + "email": { + "type": "string", + "description": "Email of the user.", + "nullable": true + }, + "expiration_time_in_millis": { + "type": "number", + "format": "float", + "description": "Expiration time of the user in milliseconds.", + "nullable": true + }, + "external": { + "type": "boolean", + "description": "Indicates whether the user is external.", + "nullable": true + }, + "favorite_metadata": { "type": "array", "items": { - "$ref": "#/components/schemas/SqlQuery" + "$ref": "#/components/schemas/FavoriteMetadataItem" }, - "description": "SQL query details of metadata objects." - } - } - }, - "SqlQuery": { - "type": "object", - "required": [ - "metadata_id", - "metadata_name", - "sql_query" - ], - "properties": { - "metadata_id": { - "type": "string", - "description": "Unique identifier of the metadata." - }, - "metadata_name": { - "type": "string", - "description": "Name of the metadata." + "description": "Metadata objects to add to the users' favorites list.", + "nullable": true }, - "sql_query": { - "type": "string", - "description": "SQL query of a metadata object." - } - }, - "description": "Response format associated with fetch SQL query api" - }, - "PdfOptionsInput": { - "type": "object", - "properties": { - "page_size": { - "type": "string", - "enum": [ - "A4", - "CONTINUOUS" - ], - "description": "Size of PDF page. `A4` generates a paginated A4 PDF. `CONTINUOUS` generates a continuous PDF that matches the Liveboard layout. Each Liveboard tab has its own page of variable length. Defaults to `A4` if not specified.
Beta Version: 26.5.0.cl or later", + "first_login_time_in_millis": { + "type": "number", + "format": "float", + "description": "Timestamp of the first login session of the user in milliseconds.", "nullable": true }, - "zoom_level": { + "group_mask": { "type": "integer", "format": "int32", - "description": "Zoom level percentage for the PDF. Only applicable when `page_size` is `CONTINUOUS`. Acceptable values are integers in the range [45, 175]. Defaults to 100 if not specified.
Beta Version: 26.5.0.cl or later", + "description": "Group mask of the user.", "nullable": true }, - "include_cover_page": { + "hidden": { "type": "boolean", - "default": true, - "description": "Indicates whether to include the cover page with the Liveboard title.", + "description": "Indicates whether the user is hidden.", "nullable": true }, - "include_custom_logo": { - "type": "boolean", - "default": true, - "description": "Indicates whether to include customized wide logo in the footer if available.", + "home_liveboard": { + "$ref": "#/components/schemas/Object_ID_And_Name", + "description": "Unique ID or name of the default Liveboard assigned to the user.", "nullable": true }, - "include_filter_page": { - "type": "boolean", - "default": true, - "description": "Indicates whether to include a page with all applied filters. For `CONTINUOUS` page_size, this parameter indicates whether to include the filter header.", + "incomplete_details": { + "type": "object", + "description": "Incomplete details of user if any present.", "nullable": true }, - "include_page_number": { + "is_first_login": { "type": "boolean", - "default": true, - "description": "Indicates whether to include page number in the footer of each page.", + "description": "Indicates whether it is first login of the user.", "nullable": true }, - "page_orientation": { + "modification_time_in_millis": { + "type": "number", + "format": "float", + "description": "Last modified time of the user in milliseconds.", + "nullable": true + }, + "modifier_id": { "type": "string", - "enum": [ - "PORTRAIT", - "LANDSCAPE" - ], - "default": "PORTRAIT", - "description": "Page orientation of the PDF.", + "description": "Unique identifier of modifier of the user.", "nullable": true }, - "truncate_table": { + "notify_on_share": { "type": "boolean", - "default": false, - "description": "Indicates whether to include only the first page of the tables.", + "description": "User preference for receiving email notifications on shared Answers or Liveboard.", "nullable": true }, - "page_footer_text": { - "type": "string", - "description": "Text to include in the footer of each page.", + "onboarding_experience_completed": { + "type": "boolean", + "description": "The user preference for turning off the onboarding experience.", "nullable": true - } - } - }, - "PngOptionsInput": { - "type": "object", - "properties": { - "include_cover_page": { + }, + "orgs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Org" + }, + "description": "Orgs to which the user belongs.", + "nullable": true + }, + "owner_id": { + "type": "string", + "description": "Unique identifier of owner of the user.", + "nullable": true + }, + "parent_type": { + "type": "string", + "enum": [ + "USER", + "GROUP" + ], + "description": "Parent type of the user.", + "nullable": true + }, + "privileges": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Privileges which are assigned to the user.", + "nullable": true + }, + "show_onboarding_experience": { "type": "boolean", - "default": false, - "description": "Indicates whether to include the cover page with the Liveboard title.", + "description": "User's preference to revisit the new user onboarding experience.", "nullable": true }, - "include_filter_page": { + "super_user": { "type": "boolean", - "default": false, - "description": "Indicates whether to include a page with all applied filters.", + "description": "Indicates whether the user is a super user.", "nullable": true }, - "personalised_view_id": { + "system_user": { + "type": "boolean", + "description": "Indicates whether the user is a system user.", + "nullable": true + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Object_ID_And_Name" + }, + "description": "Tags associated with the user.", + "nullable": true + }, + "tenant_id": { "type": "string", - "description": "Indicates personalised view of the Liveboard in case of png", + "description": "Unique identifier of tenant of the user.", "nullable": true }, - "image_resolution": { - "type": "integer", - "format": "int32", - "description": "Desired width of the Liveboard image in pixels. Ex. 1920 for Full HD image
Beta Version: 10.9.0.cl or later", + "user_groups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Object_ID_And_Name" + }, + "description": "Groups to which the user is assigned.", "nullable": true }, - "image_scale": { + "user_inherited_groups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Object_ID_And_Name" + }, + "description": "Inherited User Groups which the user is part of.", + "nullable": true + }, + "welcome_email_sent": { + "type": "boolean", + "description": "Indicates whether welcome email is sent for the user.", + "nullable": true + }, + "org_privileges": { + "type": "object", + "description": "Privileges which are assigned to the user with org.", + "nullable": true + }, + "preferred_locale": { + "type": "string", + "description": "Locale for the user.", + "nullable": true + }, + "use_browser_language": { + "type": "boolean", + "description": "Flag to indicate whether to use the browser locale for the user in the UI.\nWhen set to true, the preferred_locale value is unset and the browser's\nlanguage setting takes precedence.
Version: 26.3.0.cl or later", + "nullable": true + }, + "extended_properties": { + "type": "object", + "description": "Properties for the user", + "nullable": true + }, + "extended_preferences": { + "type": "object", + "description": "Preferences for the user", + "nullable": true + }, + "user_parameters": { + "type": "object", + "description": "User Parameters which are specified for the user via JWToken", + "nullable": true + }, + "access_control_properties": { + "type": "object", + "description": "Access Control Properties which are specified for the user via JWToken", + "nullable": true + }, + "variable_values": { + "type": "object", + "description": "Formula Variables which are specified for the user via JWToken", + "nullable": true + } + } + }, + "Org": { + "type": "object", + "required": [ + "id", + "name" + ], + "properties": { + "id": { "type": "integer", "format": "int32", - "description": "The scale of the image in percentage. Ex. 100 for 100% scale.
Beta Version: 10.9.0.cl or later", + "description": "The ID of the object." + }, + "name": { + "type": "string", + "description": "Name of the object." + } + }, + "description": "The current Org context of the user." + }, + "FavoriteMetadataItem": { + "type": "object", + "required": [ + "id", + "name", + "type" + ], + "properties": { + "id": { + "type": "string", + "description": "Unique ID of the metadata object." + }, + "name": { + "type": "string", + "description": "name of the metadata object." + }, + "type": { + "type": "string", + "enum": [ + "LIVEBOARD", + "ANSWER", + "LOGICAL_TABLE", + "LOGICAL_COLUMN", + "CONNECTION", + "TAG", + "USER", + "USER_GROUP", + "LOGICAL_RELATIONSHIP" + ], + "description": " Type of metadata object.\n \n\nRequired if the name of the object is set as the identifier. This attribute is optional when the object GUID is specified as the identifier." + } + } + }, + "Object_ID_And_Name": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The unique identifier of the object.", "nullable": true }, - "include_header": { - "type": "boolean", - "default": false, - "description": "Indicates whether to include the header of the liveboard.
Beta Version: 10.9.0.cl or later", + "name": { + "type": "string", + "description": "Name of the object.", + "nullable": true + } + }, + "description": "The object representation with ID and Name." + }, + "FavoriteMetadataInput": { + "type": "object", + "properties": { + "identifier": { + "type": "string", + "description": "Unique ID or name of the metadata object.", + "nullable": true + }, + "type": { + "type": "string", + "enum": [ + "LIVEBOARD", + "ANSWER" + ], + "description": " Type of metadata object.\n \n\nRequired if the name of the object is set as the identifier. This attribute is optional when the object GUID is specified as the identifier.", "nullable": true } } }, - "RegionalSettingsInput": { + "SortOptions": { "type": "object", "properties": { - "currency_format": { + "field_name": { "type": "string", - "description": "ISO code to be appended with currency values.", - "nullable": true, "enum": [ - "ADP", - "AED", - "AFN", - "ALL", - "AMD", - "ANG", - "AOA", - "ARA", - "ARS", - "ATS", - "AUD", - "AWG", - "AZN", - "BAM", - "BBD", - "BDT", - "BEF", - "BGL", - "BGM", - "BGN", - "BHD", - "BIF", - "BMD", - "BND", - "BOB", - "BOP", - "BOV", - "BRL", - "BSD", - "BTN", - "BUK", - "BWP", - "BYN", - "BZD", - "CAD", - "CDF", - "CHE", + "NAME", + "DISPLAY_NAME", + "AUTHOR", + "CREATED", + "MODIFIED" + ], + "description": "Name of the field to apply the sort on.", + "nullable": true + }, + "order": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "description": "Sort order : ASC(Ascending) or DESC(Descending).", + "nullable": true + } + }, + "description": "Sort options." + }, + "SystemInfo": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The unique identifier of the object", + "nullable": true + }, + "name": { + "type": "string", + "description": "Name of the cluster.", + "nullable": true + }, + "release_version": { + "type": "string", + "description": "The release version of the cluster.", + "nullable": true + }, + "time_zone": { + "type": "string", + "description": "The timezone of the cluster.", + "nullable": true + }, + "locale": { + "type": "string", + "description": "The default locale of the cluster.", + "nullable": true + }, + "date_format": { + "type": "string", + "description": "The default date format representation of the cluster.", + "nullable": true + }, + "api_version": { + "type": "string", + "description": "The API version of the cluster.", + "nullable": true + }, + "type": { + "type": "string", + "description": "The deployment type of the cluster.", + "nullable": true + }, + "environment": { + "type": "string", + "description": "The deployed environment of the cluster.", + "nullable": true + }, + "license": { + "type": "string", + "description": "The license applied to the cluster.", + "nullable": true + }, + "date_time_format": { + "type": "string", + "description": "The default date time format representation of the cluster.", + "nullable": true + }, + "time_format": { + "type": "string", + "description": "The default time format representation of the cluster.", + "nullable": true + }, + "system_user_id": { + "type": "string", + "description": "The unique identifier of system user.", + "nullable": true + }, + "super_user_id": { + "type": "string", + "description": "The unique identifier of super user.", + "nullable": true + }, + "hidden_object_id": { + "type": "string", + "description": "The unique identifier of hidden object.", + "nullable": true + }, + "system_group_id": { + "type": "string", + "description": "The unique identifier of system group.", + "nullable": true + }, + "tsadmin_user_id": { + "type": "string", + "description": "The unique identifier of tsadmin user.", + "nullable": true + }, + "admin_group_id": { + "type": "string", + "description": "The unique identifier of admin group.", + "nullable": true + }, + "all_tables_connection_id": { + "type": "string", + "description": "The unique identifier of all tables connection.", + "nullable": true + }, + "all_user_group_id": { + "type": "string", + "description": "The unique identifier of ALL group.", + "nullable": true + }, + "accept_language": { + "type": "string", + "description": "The supported accept language by the cluster.", + "nullable": true + }, + "all_user_group_member_user_count": { + "type": "integer", + "format": "int32", + "description": "The count of users of ALL group.", + "nullable": true + }, + "logical_model_version": { + "type": "integer", + "format": "int32", + "description": "The version number of logical model of the cluster.", + "nullable": true + } + } + }, + "SystemConfig": { + "type": "object", + "properties": { + "onboarding_content_url": { + "type": "string", + "nullable": true + }, + "saml_enabled": { + "type": "boolean", + "nullable": true + }, + "okta_enabled": { + "type": "boolean", + "nullable": true + } + } + }, + "SystemOverrideInfo": { + "type": "object", + "properties": { + "config_override_info": { + "type": "object", + "nullable": true + } + } + }, + "OrgPreferenceSearchCriteriaInput": { + "type": "object", + "required": [ + "org_identifier" + ], + "properties": { + "org_identifier": { + "type": "string", + "description": "Unique identifier or name of the org" + }, + "event_types": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "LIVEBOARD_SCHEDULE" + ] + }, + "description": "Event types to search for. If not provided, all event types for this org are returned.", + "nullable": true + } + } + }, + "CommunicationChannelPreferencesResponse": { + "type": "object", + "properties": { + "cluster_preferences": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EventChannelConfig" + }, + "description": "Cluster-level default configurations.", + "nullable": true + }, + "org_preferences": { + "type": "array", + "items": { + "$ref": "#/components/schemas/OrgChannelConfigResponse" + }, + "description": "Org-specific configurations.", + "nullable": true + } + } + }, + "EventChannelConfig": { + "type": "object", + "required": [ + "event_type", + "channels" + ], + "properties": { + "event_type": { + "type": "string", + "enum": [ + "LIVEBOARD_SCHEDULE" + ], + "description": "Type of event for which communication channels are configured" + }, + "channels": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "EMAIL", + "WEBHOOK" + ] + }, + "description": "Communication channels enabled for this event type. Empty array indicates no channels are enabled." + } + } + }, + "OrgChannelConfigResponse": { + "type": "object", + "required": [ + "org", + "preferences" + ], + "properties": { + "org": { + "$ref": "#/components/schemas/OrgDetails", + "description": "Org details" + }, + "preferences": { + "type": "array", + "items": { + "$ref": "#/components/schemas/EventChannelConfig" + }, + "description": "Event-specific communication channel configurations for this org" + } + } + }, + "OrgDetails": { + "type": "object", + "required": [ + "id", + "name" + ], + "properties": { + "id": { + "type": "string", + "description": "Unique id of the org" + }, + "name": { + "type": "string", + "description": "Name of the org" + } + } + }, + "SecuritySettingsResponse": { + "type": "object", + "properties": { + "cluster_preferences": { + "$ref": "#/components/schemas/SecuritySettingsClusterPreferences", + "description": "Cluster-level security preferences.", + "nullable": true + }, + "org_preferences": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SecuritySettingsOrgPreferences" + }, + "description": "Org-level security preferences.", + "nullable": true + } + }, + "description": "Response type for security settings search." + }, + "SecuritySettingsClusterPreferences": { + "type": "object", + "properties": { + "enable_partitioned_cookies": { + "type": "boolean", + "description": "Support embedded access when third-party cookies are blocked.", + "nullable": true + }, + "cors_whitelisted_urls": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allowed origins for CORS.", + "nullable": true + }, + "csp_settings": { + "$ref": "#/components/schemas/CspSettings", + "description": "CSP (Content Security Policy) settings.", + "nullable": true + }, + "saml_redirect_urls": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allowed redirect hosts for SAML login.", + "nullable": true + }, + "non_embed_access": { + "$ref": "#/components/schemas/ClusterNonEmbedAccess", + "description": "Non-embed access configuration at cluster level.", + "nullable": true + }, + "trusted_auth_status": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ], + "description": "Trusted authentication status at the cluster level.
Version: 26.6.0.cl or later", + "nullable": true + } + }, + "description": "Cluster-level security preferences." + }, + "CspSettings": { + "type": "object", + "properties": { + "connect_src_urls": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allowed URLs for connect-src directive.", + "nullable": true + }, + "font_src_urls": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allowed URLs for font-src directive.", + "nullable": true + }, + "visual_embed_hosts": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allowed hosts for visual embed (frame-ancestors directive).", + "nullable": true + }, + "iframe_src_urls": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allowed URLs for frame-src directive.", + "nullable": true + }, + "img_src_urls": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allowed URLs for img-src directive.", + "nullable": true + }, + "script_src_urls": { + "$ref": "#/components/schemas/ScriptSrcUrls", + "description": "Script-src settings including URLs and enabled flag.", + "nullable": true + }, + "style_src_urls": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allowed URLs for style-src directive.", + "nullable": true + } + }, + "description": "CSP (Content Security Policy) settings." + }, + "ScriptSrcUrls": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "Whether script-src customization is enabled.", + "nullable": true + }, + "urls": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allowed URLs for script-src directive. Can only be set if enabled is true.", + "nullable": true + } + }, + "description": "Script-src CSP settings." + }, + "ClusterNonEmbedAccess": { + "type": "object", + "properties": { + "block_full_app_access": { + "type": "boolean", + "description": "Block full application access for non-embedded usage.", + "nullable": true + }, + "groups_with_access": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GroupInfo" + }, + "description": "Groups that have non-embed full app access.\nOnly applicable when orgs feature is disabled. Use org_preferences when org feature is enabled.", + "nullable": true + } + }, + "description": "Cluster-level non-embed access configuration." + }, + "GroupInfo": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of the group.", + "nullable": true + }, + "name": { + "type": "string", + "description": "Name of the group.", + "nullable": true + } + }, + "description": "Group information for non-embed access." + }, + "SecuritySettingsOrgPreferences": { + "type": "object", + "properties": { + "org": { + "$ref": "#/components/schemas/SecuritySettingsOrgDetails", + "description": "Org details (id and name).", + "nullable": true + }, + "cors_whitelisted_urls": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Allowed origins for CORS for this org.", + "nullable": true + }, + "non_embed_access": { + "$ref": "#/components/schemas/OrgNonEmbedAccess", + "description": "Non-embed access configuration for this org.", + "nullable": true + }, + "trusted_auth_status": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ], + "description": "Trusted authentication status for this org.
Version: 26.6.0.cl or later", + "nullable": true + } + }, + "description": "Org-level security preferences." + }, + "SecuritySettingsOrgDetails": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32", + "description": "Unique identifier of the org.", + "nullable": true + }, + "name": { + "type": "string", + "description": "Name of the org.", + "nullable": true + } + }, + "description": "Org details for security settings." + }, + "OrgNonEmbedAccess": { + "type": "object", + "properties": { + "block_full_app_access": { + "type": "boolean", + "description": "Block full application access for non-embedded usage.", + "nullable": true + }, + "groups_with_access": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GroupInfo" + }, + "description": "Groups that have non-embed full app access.", + "nullable": true + } + }, + "description": "Org-level non-embed access configuration." + }, + "OrgResponse": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32", + "description": "Unique identifier of the Org.", + "nullable": true + }, + "name": { + "type": "string", + "description": "Name of the Org.", + "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "ACTIVE", + "IN_ACTIVE" + ], + "description": "Status of the Org.", + "nullable": true + }, + "description": { + "type": "string", + "description": "Description of the Org.", + "nullable": true + }, + "visibility": { + "type": "string", + "enum": [ + "SHOW", + "HIDDEN" + ], + "description": "Visibility of the Org.", + "nullable": true + } + } + }, + "Tag": { + "type": "object", + "required": [ + "name", + "id" + ], + "properties": { + "name": { + "type": "string" + }, + "id": { + "type": "string" + }, + "color": { + "type": "string", + "nullable": true + }, + "deleted": { + "type": "boolean", + "nullable": true + }, + "hidden": { + "type": "boolean", + "nullable": true + }, + "external": { + "type": "boolean", + "nullable": true + }, + "deprecated": { + "type": "boolean", + "nullable": true + }, + "creation_time_in_millis": { + "type": "number", + "format": "float", + "nullable": true + }, + "modification_time_in_millis": { + "type": "number", + "format": "float", + "nullable": true + }, + "author_id": { + "type": "string", + "nullable": true + }, + "modifier_id": { + "type": "string", + "nullable": true + }, + "owner_id": { + "type": "string", + "nullable": true + } + } + }, + "UserGroupResponse": { + "type": "object", + "required": [ + "display_name", + "id", + "name", + "visibility" + ], + "properties": { + "author_id": { + "type": "string", + "description": "The unique identifier of the object", + "nullable": true + }, + "complete_detail": { + "type": "boolean", + "description": "Indicates whether the response has complete detail of the group.", + "nullable": true + }, + "content": { + "type": "object", + "description": "Content details of the group", + "nullable": true + }, + "creation_time_in_millis": { + "type": "number", + "format": "float", + "description": "Creation time of the group in milliseconds", + "nullable": true + }, + "default_liveboards": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserGroup" + }, + "description": "Liveboards that are assigned as default Liveboards to the group.", + "nullable": true + }, + "deleted": { + "type": "boolean", + "description": "Indicates whether the group is deleted", + "nullable": true + }, + "deprecated": { + "type": "boolean", + "description": "Indicates whether the group is deprecated", + "nullable": true + }, + "description": { + "type": "string", + "description": "Description of the group", + "nullable": true + }, + "display_name": { + "type": "string", + "description": "Display name of the group." + }, + "external": { + "type": "boolean", + "description": "Indicates whether the group is external", + "nullable": true + }, + "generation_number": { + "type": "integer", + "format": "int32", + "description": "Generation number of the group", + "nullable": true + }, + "hidden": { + "type": "boolean", + "description": "Indicates whether the group is hidden", + "nullable": true + }, + "id": { + "type": "string", + "description": "The unique identifier of the object" + }, + "index": { + "type": "integer", + "format": "int32", + "description": "Index number of the group", + "nullable": true + }, + "index_version": { + "type": "integer", + "format": "int32", + "description": "Index version number of the group", + "nullable": true + }, + "metadata_version": { + "type": "integer", + "format": "int32", + "description": "Metadata version number of the group", + "nullable": true + }, + "modification_time_in_millis": { + "type": "number", + "format": "float", + "description": "Last modified time of the group in milliseconds.", + "nullable": true + }, + "modifier_id": { + "type": "string", + "description": "The unique identifier of the object", + "nullable": true + }, + "name": { + "type": "string", + "description": "Name of the group." + }, + "orgs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserGroup" + }, + "description": "Orgs in which group exists.", + "nullable": true + }, + "owner_id": { + "type": "string", + "description": "The unique identifier of the object", + "nullable": true + }, + "parent_type": { + "type": "string", + "enum": [ + "USER", + "GROUP" + ], + "description": "Parent type of the group.", + "nullable": true + }, + "privileges": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Privileges which are assigned to the group", + "nullable": true + }, + "sub_groups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserGroup" + }, + "description": "Groups who are part of the group", + "nullable": true + }, + "system_group": { + "type": "boolean", + "description": "Indicates whether the group is a system group.", + "nullable": true + }, + "tags": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserGroup" + }, + "description": "Tags associated with the group.", + "nullable": true + }, + "type": { + "type": "string", + "enum": [ + "LOCAL_GROUP", + "LDAP_GROUP", + "TEAM_GROUP", + "TENANT_GROUP" + ], + "description": "Type of the group.", + "nullable": true + }, + "users": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserGroup" + }, + "description": "Users who are part of the group.", + "nullable": true + }, + "visibility": { + "type": "string", + "enum": [ + "SHARABLE", + "NON_SHARABLE" + ], + "description": "Visibility of the group. The SHARABLE makes a group visible to other users and groups, and thus allows them to share objects." + }, + "roles": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Role" + }, + "description": "List of roles assgined to the user", + "nullable": true + } + } + }, + "Role": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "id of the role", + "nullable": true + }, + "name": { + "type": "string", + "description": "name of the role", + "nullable": true + } + } + }, + "MetadataListItemInput": { + "type": "object", + "properties": { + "identifier": { + "type": "string", + "description": "Unique ID or name of the metadata.", + "nullable": true + }, + "obj_identifier": { + "type": "string", + "description": "CustomObjectId of the metadata.", + "nullable": true + }, + "name_pattern": { + "type": "string", + "description": "A pattern to match the case-insensitive name of the metadata object. User % for a wildcard match.", + "nullable": true + }, + "type": { + "type": "string", + "enum": [ + "LIVEBOARD", + "ANSWER", + "LOGICAL_TABLE", + "LOGICAL_COLUMN", + "CONNECTION", + "TAG", + "USER", + "USER_GROUP", + "LOGICAL_RELATIONSHIP", + "INSIGHT_SPEC" + ], + "description": "Type of metadata. Required if the name of the object is set as identifier. This attribute is optional when the object GUID is specified as identifier.\n1. Liveboard\n2. Answers\n3. LOGICAL_TABLE for any data object such as table, worksheet or view.\n4. LOGICAL_COLUMN for a column of any data object such as table, worksheet or view.\n5. CONNECTION for creating or modify data connections.\n6. TAG for tag objects.\n7. USER for user objects.\n8. USER_GROUP for group objects.\n9. LOGICAL_RELATIONSHIP for table or worksheet joins. A join combines from one or several data object by using matching values\n10. INSIGHT_SPEC for SpotIQ objects", + "nullable": true + }, + "subtypes": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "ONE_TO_ONE_LOGICAL", + "WORKSHEET", + "PRIVATE_WORKSHEET", + "USER_DEFINED", + "AGGR_WORKSHEET", + "SQL_VIEW" + ] + }, + "description": "List of subtype of metadata. Applies for LOGICAL_TABLE type with the following valid values.\n1. ONE_TO_ONE_LOGICAL\n2. WORKSHEET\n3. PRIVATE_WORKSHEET.\n4. USER_DEFINED.\n5. AGGR_WORKSHEET.\n6. SQL_VIEW
Version: 10.11.0.cl or later", + "nullable": true + } + } + }, + "PermissionInput": { + "type": "object", + "required": [ + "principal", + "share_mode" + ], + "properties": { + "principal": { + "$ref": "#/components/schemas/PrincipalsInput", + "description": "Details of users or groups." + }, + "share_mode": { + "type": "string", + "enum": [ + "READ_ONLY", + "MODIFY", + "NO_ACCESS" + ], + "description": "Object share mode." + } + }, + "description": "Details of users or groups." + }, + "ExcludeMetadataListItemInput": { + "type": "object", + "required": [ + "identifier", + "type" + ], + "properties": { + "identifier": { + "type": "string", + "description": "Unique ID or name of the metadata." + }, + "type": { + "type": "string", + "enum": [ + "LIVEBOARD", + "ANSWER", + "LOGICAL_TABLE", + "LOGICAL_COLUMN", + "CONNECTION", + "TAG", + "USER", + "USER_GROUP", + "LOGICAL_RELATIONSHIP", + "INSIGHT_SPEC" + ], + "description": "Type of metadata. Required if the name of the object is set as identifier. This attribute is optional when the object GUID is specified as identifier.\n1. Liveboard\n2. Answers\n3. LOGICAL_TABLE for any data object such as table, worksheet or view\n4. LOGICAL_COLUMN for a column of any data object such as table, worksheet or view\n5. CONNECTION for connection objects\n6. TAG for tag objects\n7. USER for user objects\n8. USER_GROUP for group objects\n9. LOGICAL_RELATIONSHIP for table or worksheet joins. A join combines from one or several data object by using matching values.\n10. INSIGHT_SPEC for SpotIQ objects" + } + } + }, + "FavoriteObjectOptionsInput": { + "type": "object", + "properties": { + "include": { + "type": "boolean", + "default": false, + "description": "Includes objects marked as favorite for the specified users.", + "nullable": true + }, + "user_identifiers": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Unique ID or name of the users. If not specified, the favorite objects of current logged in user are returned.", + "nullable": true + } + }, + "description": "Favorite object options." + }, + "MetadataSearchSortOptions": { + "type": "object", + "properties": { + "field_name": { + "type": "string", + "enum": [ + "NAME", + "DISPLAY_NAME", + "AUTHOR", + "CREATED", + "MODIFIED", + "VIEWS", + "FAVORITES", + "LAST_ACCESSED" + ], + "description": "Name of the field to apply the sort on.", + "nullable": true + }, + "order": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "description": "Sort order : ASC(Ascending) or DESC(Descending).", + "nullable": true + } + }, + "description": "Sort options." + }, + "MetadataSearchResponse": { + "type": "object", + "required": [ + "metadata_type" + ], + "properties": { + "metadata_id": { + "type": "string", + "description": "Unique identifier of the metadata.", + "nullable": true + }, + "metadata_name": { + "type": "string", + "description": "Name of the metadata.", + "nullable": true + }, + "metadata_type": { + "type": "string", + "enum": [ + "LIVEBOARD", + "ANSWER", + "LOGICAL_TABLE", + "LOGICAL_COLUMN", + "CONNECTION", + "TAG", + "USER", + "USER_GROUP", + "LOGICAL_RELATIONSHIP", + "INSIGHT_SPEC" + ], + "description": "Type of the metadata." + }, + "metadata_obj_id": { + "type": "string", + "description": "Custom identifier of the metadata.\n(Available from 10.8.0.cl onwards)", + "nullable": true + }, + "dependent_objects": { + "type": "object", + "description": "Details of dependent objects of the metadata objects.", + "nullable": true + }, + "incomplete_objects": { + "type": "array", + "items": { + "type": "object" + }, + "description": "Details of incomplete information of the metadata objects if any.", + "nullable": true + }, + "metadata_detail": { + "type": "object", + "description": "Complete details of the metadata objects.", + "nullable": true + }, + "metadata_header": { + "type": "object", + "description": "Header information of the metadata objects.", + "nullable": true + }, + "visualization_headers": { + "type": "array", + "items": { + "type": "object" + }, + "description": "Visualization header information of the metadata objects.", + "nullable": true + }, + "stats": { + "type": "object", + "description": "Stats of the metadata object. Includes views, favorites, last_accessed.", + "nullable": true + } + }, + "description": "Metadata Search Response Object." + }, + "GetAsyncImportStatusResponse": { + "type": "object", + "properties": { + "status_list": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ImportEPackAsyncTaskStatus" + }, + "description": "List of task statuses.", + "nullable": true + }, + "last_batch": { + "type": "boolean", + "description": "Indicates whether there are more task statuses to fetch.", + "nullable": true + } + } + }, + "ImportEPackAsyncTaskStatus": { + "type": "object", + "properties": { + "tenant_id": { + "type": "string", + "description": "GUID of tenant from which the task is initiated.", + "nullable": true + }, + "org_id": { + "type": "integer", + "format": "int32", + "description": "Organisation ID of the user who initiated the task.", + "nullable": true + }, + "task_id": { + "type": "string", + "description": "Unique identifier for the task.", + "nullable": true + }, + "task_name": { + "type": "string", + "description": "Name of the task.", + "nullable": true + }, + "import_response": { + "type": "object", + "description": "Response of imported objects so far.", + "nullable": true + }, + "task_status": { + "type": "string", + "enum": [ + "COMPLETED", + "IN_QUEUE", + "IN_PROGRESS", + "FAILED" + ], + "description": "Current status of the task.", + "nullable": true + }, + "author_id": { + "type": "string", + "description": "ID of the user who initiated the task.", + "nullable": true + }, + "import_policy": { + "type": "string", + "enum": [ + "PARTIAL", + "ALL_OR_NONE", + "VALIDATE_ONLY", + "PARTIAL_OBJECT" + ], + "description": "Policy used for the import task.", + "nullable": true + }, + "created_at": { + "type": "number", + "format": "float", + "description": "Time when the task was created (in ms since epoch).", + "nullable": true + }, + "in_progress_at": { + "type": "number", + "format": "float", + "description": "Time when the task started (in ms since epoch).", + "nullable": true + }, + "completed_at": { + "type": "number", + "format": "float", + "description": "Time when the task was completed (in ms since epoch).", + "nullable": true + }, + "total_object_count": { + "type": "integer", + "format": "int32", + "description": "Total number of objects to process.", + "nullable": true + }, + "object_processed_count": { + "type": "integer", + "format": "int32", + "description": "Number of objects processed so far.", + "nullable": true + }, + "modified_at": { + "type": "number", + "format": "float", + "description": "Last time the task status was updated (in ms since epoch).", + "nullable": true + }, + "author_display_name": { + "type": "string", + "description": "Display name of the user who initiated the task.", + "nullable": true + } + } + }, + "SqlQueryResponse": { + "type": "object", + "required": [ + "metadata_id", + "metadata_name", + "metadata_type", + "sql_queries" + ], + "properties": { + "metadata_id": { + "type": "string", + "description": "Unique identifier of the metadata." + }, + "metadata_name": { + "type": "string", + "description": "Name of the metadata." + }, + "metadata_type": { + "type": "string", + "enum": [ + "LIVEBOARD", + "ANSWER", + "LOGICAL_TABLE", + "LOGICAL_COLUMN", + "CONNECTION", + "TAG", + "USER", + "USER_GROUP", + "LOGICAL_RELATIONSHIP" + ], + "description": "Type of the metadata." + }, + "sql_queries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SqlQuery" + }, + "description": "SQL query details of metadata objects." + } + } + }, + "SqlQuery": { + "type": "object", + "required": [ + "metadata_id", + "metadata_name", + "sql_query" + ], + "properties": { + "metadata_id": { + "type": "string", + "description": "Unique identifier of the metadata." + }, + "metadata_name": { + "type": "string", + "description": "Name of the metadata." + }, + "sql_query": { + "type": "string", + "description": "SQL query of a metadata object." + } + }, + "description": "Response format associated with fetch SQL query api" + }, + "PdfOptionsInput": { + "type": "object", + "properties": { + "page_size": { + "type": "string", + "enum": [ + "A4", + "CONTINUOUS" + ], + "description": "Size of PDF page. `A4` generates a paginated A4 PDF. `CONTINUOUS` generates a continuous PDF that matches the Liveboard layout. Each Liveboard tab has its own page of variable length. Defaults to `A4` if not specified.
Beta Version: 26.5.0.cl or later", + "nullable": true + }, + "zoom_level": { + "type": "integer", + "format": "int32", + "description": "Zoom level percentage for the PDF. Only applicable when `page_size` is `CONTINUOUS`. Acceptable values are integers in the range [45, 175]. Defaults to 100 if not specified.
Beta Version: 26.5.0.cl or later", + "nullable": true + }, + "include_cover_page": { + "type": "boolean", + "default": true, + "description": "Indicates whether to include the cover page with the Liveboard title.", + "nullable": true + }, + "include_custom_logo": { + "type": "boolean", + "default": true, + "description": "Indicates whether to include customized wide logo in the footer if available.", + "nullable": true + }, + "include_filter_page": { + "type": "boolean", + "default": true, + "description": "Indicates whether to include a page with all applied filters. For `CONTINUOUS` page_size, this parameter indicates whether to include the filter header.", + "nullable": true + }, + "include_page_number": { + "type": "boolean", + "default": true, + "description": "Indicates whether to include page number in the footer of each page.", + "nullable": true + }, + "page_orientation": { + "type": "string", + "enum": [ + "PORTRAIT", + "LANDSCAPE" + ], + "default": "PORTRAIT", + "description": "Page orientation of the PDF.", + "nullable": true + }, + "truncate_table": { + "type": "boolean", + "default": false, + "description": "Indicates whether to include only the first page of the tables.", + "nullable": true + }, + "page_footer_text": { + "type": "string", + "description": "Text to include in the footer of each page.", + "nullable": true + } + } + }, + "PngOptionsInput": { + "type": "object", + "properties": { + "include_cover_page": { + "type": "boolean", + "default": false, + "description": "Indicates whether to include the cover page with the Liveboard title.", + "nullable": true + }, + "include_filter_page": { + "type": "boolean", + "default": false, + "description": "Indicates whether to include a page with all applied filters.", + "nullable": true + }, + "personalised_view_id": { + "type": "string", + "description": "Indicates personalised view of the Liveboard in case of png", + "nullable": true + }, + "image_resolution": { + "type": "integer", + "format": "int32", + "description": "Desired width of the Liveboard image in pixels. Ex. 1920 for Full HD image
Beta Version: 10.9.0.cl or later", + "nullable": true + }, + "image_scale": { + "type": "integer", + "format": "int32", + "description": "The scale of the image in percentage. Ex. 100 for 100% scale.
Beta Version: 10.9.0.cl or later", + "nullable": true + }, + "include_header": { + "type": "boolean", + "default": false, + "description": "Indicates whether to include the header of the liveboard.
Beta Version: 10.9.0.cl or later", + "nullable": true + } + } + }, + "RegionalSettingsInput": { + "type": "object", + "properties": { + "currency_format": { + "type": "string", + "description": "ISO code to be appended with currency values.", + "nullable": true, + "enum": [ + "ADP", + "AED", + "AFN", + "ALL", + "AMD", + "ANG", + "AOA", + "ARA", + "ARS", + "ATS", + "AUD", + "AWG", + "AZN", + "BAM", + "BBD", + "BDT", + "BEF", + "BGL", + "BGM", + "BGN", + "BHD", + "BIF", + "BMD", + "BND", + "BOB", + "BOP", + "BOV", + "BRL", + "BSD", + "BTN", + "BUK", + "BWP", + "BYN", + "BZD", + "CAD", + "CDF", + "CHE", "CHF", "CHW", "CLE", @@ -15028,1619 +17600,2498 @@ "ZMW" ] }, - "user_locale": { + "user_locale": { + "type": "string", + "description": "Indicates the locale to be used for all formattings.", + "nullable": true, + "enum": [ + "en-CA", + "en-GB", + "en-US", + "de-DE", + "ja-JP", + "zh-CN", + "pt-BR", + "fr-FR", + "fr-CA", + "es-US", + "da-DK", + "es-ES", + "fi-FI", + "sv-SE", + "nb-NO", + "pt-PT", + "nl-NL", + "it-IT", + "ru-RU", + "en-IN", + "de-CH", + "en-NZ", + "es-MX", + "en-AU", + "zh-Hant", + "ko-KR", + "en-DE" + ] + }, + "number_format_locale": { + "type": "string", + "description": "Indicates the locale to be used for number formatting.", + "nullable": true, + "enum": [ + "en-CA", + "en-GB", + "en-US", + "de-DE", + "ja-JP", + "zh-CN", + "pt-BR", + "fr-FR", + "fr-CA", + "es-US", + "da-DK", + "es-ES", + "fi-FI", + "sv-SE", + "nb-NO", + "pt-PT", + "nl-NL", + "it-IT", + "ru-RU", + "en-IN", + "de-CH", + "en-NZ", + "es-MX", + "en-AU", + "zh-Hant", + "ko-KR", + "en-DE" + ] + }, + "date_format_locale": { + "type": "string", + "description": "Indicates the locale to be used for date formatting.", + "nullable": true, + "enum": [ + "en-CA", + "en-GB", + "en-US", + "de-DE", + "ja-JP", + "zh-CN", + "pt-BR", + "fr-FR", + "fr-CA", + "es-US", + "da-DK", + "es-ES", + "fi-FI", + "sv-SE", + "nb-NO", + "pt-PT", + "nl-NL", + "it-IT", + "ru-RU", + "en-IN", + "de-CH", + "en-NZ", + "es-MX", + "en-AU", + "zh-Hant", + "ko-KR", + "en-DE" + ] + } + } + }, + "AnswerPngOptionsInput": { + "type": "object", + "properties": { + "x_resolution": { + "type": "integer", + "format": "int32", + "description": "Desired width of the answer image in pixels. Ex. 1920 for Full HD image
Beta Version: 26.6.0.cl or later", + "nullable": true + }, + "y_resolution": { + "type": "integer", + "format": "int32", + "description": "Desired height of the answer image in pixels. Ex. 1080 for Full HD image
Beta Version: 26.6.0.cl or later", + "nullable": true + }, + "scaling": { + "type": "integer", + "format": "int32", + "description": "The scale of the image in percentage. Ex. 100 for 100% scale.
Beta Version: 26.6.0.cl or later", + "nullable": true + } + } + }, + "PermissionOfPrincipalsResponse": { + "type": "object", + "properties": { + "principal_permission_details": { + "type": "object", + "nullable": true + } + } + }, + "PermissionOfMetadataResponse": { + "type": "object", + "properties": { + "metadata_permission_details": { + "type": "object", + "nullable": true + } + } + }, + "ObjectPrivilegesMetadataInput": { + "type": "object", + "required": [ + "identifier" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "LOGICAL_TABLE" + ], + "description": "Type of metadata object.\nRequired if the name of the object is set as the identifier. This attribute is optional when the object GUID is specified as the identifier.", + "nullable": true + }, + "identifier": { + "type": "string", + "description": "Unique ID or name of the metadata object." + } + } + }, + "ObjectPrivilegesOfMetadataResponse": { + "type": "object", + "properties": { + "metadata_object_privileges": { + "type": "object", + "nullable": true + } + } + }, + "PrincipalsInput": { + "type": "object", + "required": [ + "identifier" + ], + "properties": { + "identifier": { + "type": "string", + "description": "Unique ID or name of the principal object such as a user or group." + }, + "type": { + "type": "string", + "enum": [ + "USER", + "USER_GROUP" + ], + "description": "Principal type.", + "nullable": true + } + } + }, + "PermissionsMetadataTypeInput": { + "type": "object", + "required": [ + "identifier" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "LIVEBOARD", + "ANSWER", + "LOGICAL_TABLE", + "LOGICAL_COLUMN", + "CONNECTION", + "COLLECTION" + ], + "description": " Type of metadata object.\n \n\nRequired if the name of the object is set as the identifier. This attribute is optional when the object GUID is specified as the identifier.", + "nullable": true + }, + "identifier": { + "type": "string", + "description": "Unique ID or name of the metadata object." + } + }, + "description": "MetadataType InputType used in Permission API's" + }, + "ColumnSecurityRuleTableInput": { + "type": "object", + "properties": { + "identifier": { + "type": "string", + "description": "Name or GUID of the table", + "nullable": true + }, + "obj_identifier": { + "type": "string", + "description": "Object ID of the table", + "nullable": true + } + } + }, + "ColumnSecurityRuleResponse": { + "type": "object", + "properties": { + "table_guid": { + "type": "string", + "description": "GUID of the table for which the column security rules are fetched", + "nullable": true + }, + "obj_id": { + "type": "string", + "description": "Object ID of the table for which the column security rules are fetched", + "nullable": true + }, + "column_security_rules": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ColumnSecurityRule" + }, + "description": "Array containing column security rule objects", + "nullable": true + } + } + }, + "ColumnSecurityRule": { + "type": "object", + "required": [ + "column" + ], + "properties": { + "column": { + "$ref": "#/components/schemas/ColumnSecurityRuleColumn", + "description": "Information about the column" + }, + "groups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ColumnSecurityRuleGroup" + }, + "description": "Array of groups that have access to this column", + "nullable": true + }, + "source_table_details": { + "$ref": "#/components/schemas/ColumnSecurityRuleSourceTable", + "description": "Information about the source table", + "nullable": true + } + } + }, + "ColumnSecurityRuleColumn": { + "type": "object", + "required": [ + "id", + "name" + ], + "properties": { + "id": { + "type": "string", + "description": "The unique identifier of the column" + }, + "name": { + "type": "string", + "description": "The name of the column" + } + } + }, + "ColumnSecurityRuleGroup": { + "type": "object", + "required": [ + "id", + "name" + ], + "properties": { + "id": { + "type": "string", + "description": "The unique identifier of the group" + }, + "name": { + "type": "string", + "description": "The name of the group" + } + } + }, + "ColumnSecurityRuleSourceTable": { + "type": "object", + "required": [ + "id", + "name" + ], + "properties": { + "id": { + "type": "string", + "description": "The unique identifier of the source table" + }, + "name": { + "type": "string", + "description": "The name of the source table" + } + } + }, + "SearchDataResponse": { + "type": "object", + "required": [ + "contents" + ], + "properties": { + "contents": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AnswerContent" + }, + "description": "Data content of metadata objects" + } + }, + "description": "Response format associated with the search data API." + }, + "AnswerContent": { + "type": "object", + "required": [ + "available_data_row_count", + "column_names", + "data_rows", + "record_offset", + "record_size", + "returned_data_row_count", + "sampling_ratio" + ], + "properties": { + "available_data_row_count": { + "type": "integer", + "format": "int32", + "description": "Total available data row count." + }, + "column_names": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Name of the columns." + }, + "data_rows": { + "type": "array", + "items": { + "type": "object" + }, + "description": "Rows of data set." + }, + "record_offset": { + "type": "integer", + "format": "int32", + "description": "The starting record number from where the records should be included." + }, + "record_size": { + "type": "integer", + "format": "int32", + "description": "The number of records that should be included." + }, + "returned_data_row_count": { + "type": "integer", + "format": "int32", + "description": "Total returned data row count." + }, + "sampling_ratio": { + "type": "number", + "format": "float", + "description": "Sampling ratio (0 to 1). If the query was sampled, it is the ratio of keys returned in the data set to the total number of keys expected in the query. If the value is 1.0, this means that the complete result is returned." + } + } + }, + "LiveboardDataResponse": { + "type": "object", + "required": [ + "metadata_id", + "metadata_name", + "contents" + ], + "properties": { + "metadata_id": { + "type": "string", + "description": "The unique identifier of the object" + }, + "metadata_name": { + "type": "string", + "description": "Name of the metadata object" + }, + "contents": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LiveboardContent" + }, + "description": "Data content of metadata objects" + } + } + }, + "LiveboardContent": { + "type": "object", + "required": [ + "available_data_row_count", + "column_names", + "data_rows", + "record_offset", + "record_size", + "returned_data_row_count", + "sampling_ratio" + ], + "properties": { + "available_data_row_count": { + "type": "integer", + "format": "int32", + "description": "Total available data row count." + }, + "column_names": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Name of the columns." + }, + "data_rows": { + "type": "array", + "items": { + "type": "object" + }, + "description": "Rows of data set." + }, + "record_offset": { + "type": "integer", + "format": "int32", + "description": "The starting record number from where the records should be included." + }, + "record_size": { + "type": "integer", + "format": "int32", + "description": "The number of records that should be included." + }, + "returned_data_row_count": { + "type": "integer", + "format": "int32", + "description": "Total returned data row count." + }, + "sampling_ratio": { + "type": "number", + "format": "float", + "description": "Sampling ratio (0 to 1). If the query was sampled, it is the ratio of keys returned in the data set to the total number of keys expected in the query. If the value is 1.0, this means that the complete result is returned." + }, + "visualization_id": { + "type": "string", + "description": "Unique ID of the visualization.", + "nullable": true + }, + "visualization_name": { + "type": "string", + "description": "Name of the visualization.", + "nullable": true + } + } + }, + "AnswerDataResponse": { + "type": "object", + "required": [ + "metadata_id", + "metadata_name", + "contents" + ], + "properties": { + "metadata_id": { + "type": "string", + "description": "The unique identifier of the object" + }, + "metadata_name": { + "type": "string", + "description": "Name of the metadata object" + }, + "contents": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AnswerContent" + }, + "description": "Data content of metadata objects" + } + }, + "description": "Response format associated with fetch data api" + }, + "LogResponse": { + "type": "object", + "required": [ + "date", + "log" + ], + "properties": { + "date": { + "type": "string", + "description": "Date timestamp of the log entry" + }, + "log": { + "type": "string", + "description": "Log data" + } + } + }, + "RepoConfigObject": { + "type": "object", + "properties": { + "repository_url": { + "type": "string", + "description": "Remote repository URL configured", + "nullable": true + }, + "username": { + "type": "string", + "description": "Username to authenticate connection to the version control system", + "nullable": true + }, + "commit_branch_name": { + "type": "string", + "description": "Name of the remote branch where objects from this Thoughtspot instance will be versioned.", + "nullable": true + }, + "branches": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Branches that have been pulled in local repository", + "nullable": true + }, + "enable_guid_mapping": { + "type": "boolean", + "description": "Maintain mapping of guid for the deployment to an instance", + "nullable": true + }, + "configuration_branch_name": { + "type": "string", + "description": "Name of the branch where the configuration files related to operations between Thoughtspot and version control repo should be maintained.", + "nullable": true + }, + "org": { + "$ref": "#/components/schemas/Org", + "description": "Details of the Org", + "nullable": true + } + } + }, + "CommitHistoryResponse": { + "type": "object", + "required": [ + "committer", + "author", + "comment", + "commit_time", + "commit_id", + "branch" + ], + "properties": { + "committer": { + "$ref": "#/components/schemas/CommiterType", + "description": "Repository user using which changes were committed" + }, + "author": { + "$ref": "#/components/schemas/AuthorType", + "description": "Thoughtspot user who commits the changes" + }, + "comment": { + "type": "string", + "description": "Comments associated with the commit" + }, + "commit_time": { + "type": "string", + "description": "Time at which the changes were committed." + }, + "commit_id": { + "type": "string", + "description": "SHA id associated with the commit" + }, + "branch": { + "type": "string", + "description": "Branch where changes were committed" + } + } + }, + "CommiterType": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "Email id of the committer", + "nullable": true + }, + "username": { + "type": "string", + "description": "Username of the committer", + "nullable": true + } + } + }, + "AuthorType": { + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "Email id of the committer", + "nullable": true + }, + "username": { + "type": "string", + "description": "Username of the committer", + "nullable": true + } + } + }, + "ConnectionInput": { + "type": "object", + "properties": { + "identifier": { + "type": "string", + "description": "Unique ID or name of the connection.", + "nullable": true + }, + "name_pattern": { + "type": "string", + "description": "A pattern to match case-insensitive name of the connection object. User `%` for a wildcard match.", + "nullable": true + }, + "data_warehouse_objects": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DataWarehouseObjectInput" + }, + "description": "Filter options for databases, schemas, tables and columns.", + "nullable": true + } + } + }, + "DataWarehouseObjectInput": { + "type": "object", + "properties": { + "database": { + "type": "string", + "description": "Name of the database.", + "nullable": true + }, + "schema": { + "type": "string", + "description": "Name of the schema within the database.", + "nullable": true + }, + "table": { + "type": "string", + "description": "Name of the table within the schema.", + "nullable": true + }, + "column": { + "type": "string", + "description": "Name of the column within the table.", + "nullable": true + } + } + }, + "SortOptionInput": { + "type": "object", + "properties": { + "field_name": { + "type": "string", + "enum": [ + "NAME", + "DISPLAY_NAME", + "AUTHOR", + "CREATED", + "MODIFIED", + "LAST_ACCESSED", + "SYNCED", + "VIEWS", + "USER_STATE", + "ROW_COUNT" + ], + "description": "Name of the field to apply the sort on.", + "nullable": true + }, + "order": { + "type": "string", + "enum": [ + "ASC", + "DESC" + ], + "description": "Sort order : ASC(Ascending) or DESC(Descending).", + "nullable": true + } + } + }, + "SearchConnectionResponse": { + "type": "object", + "required": [ + "id", + "name", + "data_warehouse_type" + ], + "properties": { + "id": { + "type": "string", + "description": "Unique ID of the connection." + }, + "name": { + "type": "string", + "description": "Name of the connection." + }, + "description": { + "type": "string", + "description": "Description of the connection.", + "nullable": true + }, + "data_warehouse_type": { + "type": "string", + "enum": [ + "SNOWFLAKE", + "AMAZON_REDSHIFT", + "GOOGLE_BIGQUERY", + "AZURE_SYNAPSE", + "TERADATA", + "SAP_HANA", + "STARBURST", + "ORACLE_ADW", + "DATABRICKS", + "DENODO", + "DREMIO", + "TRINO", + "PRESTO", + "POSTGRES", + "SQLSERVER", + "MYSQL", + "GENERIC_JDBC", + "AMAZON_RDS_POSTGRESQL", + "AMAZON_AURORA_POSTGRESQL", + "AMAZON_RDS_MYSQL", + "AMAZON_AURORA_MYSQL", + "LOOKER", + "AMAZON_ATHENA", + "SINGLESTORE", + "GCP_SQLSERVER", + "GCP_ALLOYDB_POSTGRESQL", + "GCP_POSTGRESQL", + "GCP_MYSQL", + "MODE", + "GOOGLE_SHEETS", + "FALCON", + "FALCON_ONPREM", + "CLICKHOUSE", + "IOMETE" + ], + "description": "Type of data warehouse." + }, + "data_warehouse_objects": { + "$ref": "#/components/schemas/DataWarehouseObjects", + "description": "List of Data warehouse objects", + "nullable": true + }, + "details": { + "type": "object", + "description": "Details of the connection.", + "nullable": true + } + } + }, + "DataWarehouseObjects": { + "type": "object", + "required": [ + "databases" + ], + "properties": { + "databases": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Database" + }, + "description": "Databases of the connection." + } + } + }, + "Database": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { "type": "string", - "description": "Indicates the locale to be used for all formattings.", - "nullable": true, - "enum": [ - "en-CA", - "en-GB", - "en-US", - "de-DE", - "ja-JP", - "zh-CN", - "pt-BR", - "fr-FR", - "fr-CA", - "es-US", - "da-DK", - "es-ES", - "fi-FI", - "sv-SE", - "nb-NO", - "pt-PT", - "nl-NL", - "it-IT", - "ru-RU", - "en-IN", - "de-CH", - "en-NZ", - "es-MX", - "en-AU", - "zh-Hant", - "ko-KR", - "en-DE" - ] + "description": "Name of the database." }, - "number_format_locale": { + "schemas": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SchemaObject" + }, + "description": "Schemas of the database.", + "nullable": true + }, + "auto_created": { + "type": "boolean", + "description": "Determines if the object is auto created.", + "nullable": true + } + } + }, + "SchemaObject": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { "type": "string", - "description": "Indicates the locale to be used for number formatting.", - "nullable": true, - "enum": [ - "en-CA", - "en-GB", - "en-US", - "de-DE", - "ja-JP", - "zh-CN", - "pt-BR", - "fr-FR", - "fr-CA", - "es-US", - "da-DK", - "es-ES", - "fi-FI", - "sv-SE", - "nb-NO", - "pt-PT", - "nl-NL", - "it-IT", - "ru-RU", - "en-IN", - "de-CH", - "en-NZ", - "es-MX", - "en-AU", - "zh-Hant", - "ko-KR", - "en-DE" - ] + "description": "Name of the schema." }, - "date_format_locale": { + "tables": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Table" + }, + "description": "Tables in the schema.", + "nullable": true + } + } + }, + "Table": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { "type": "string", - "description": "Indicates the locale to be used for date formatting.", - "nullable": true, - "enum": [ - "en-CA", - "en-GB", - "en-US", - "de-DE", - "ja-JP", - "zh-CN", - "pt-BR", - "fr-FR", - "fr-CA", - "es-US", - "da-DK", - "es-ES", - "fi-FI", - "sv-SE", - "nb-NO", - "pt-PT", - "nl-NL", - "it-IT", - "ru-RU", - "en-IN", - "de-CH", - "en-NZ", - "es-MX", - "en-AU", - "zh-Hant", - "ko-KR", - "en-DE" - ] + "description": "Name of the table." + }, + "columns": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Column" + }, + "description": "Columns of the table.", + "nullable": true + }, + "type": { + "type": "string", + "description": "Type of table. Either view or table", + "nullable": true + }, + "description": { + "type": "string", + "description": "Description of the table", + "nullable": true + }, + "selected": { + "type": "boolean", + "description": "Determines if the table is selected", + "nullable": true + }, + "linked": { + "type": "boolean", + "description": "Determines if the table is linked", + "nullable": true + }, + "relationships": { + "type": "array", + "items": { + "type": "object" + }, + "description": "List of relationships for the table", + "nullable": true + } + } + }, + "Column": { + "type": "object", + "required": [ + "name", + "data_type" + ], + "properties": { + "name": { + "type": "string", + "description": "Name of the column" + }, + "data_type": { + "type": "string", + "description": "Data type of the column" + }, + "is_aggregate": { + "type": "string", + "description": "Determines if the column schema is an aggregate", + "nullable": true + }, + "can_import": { + "type": "boolean", + "description": "Determines if the column schema can be imported", + "nullable": true + }, + "selected": { + "type": "boolean", + "description": "Determines if the table is selected", + "nullable": true + }, + "is_linked_active": { + "type": "boolean", + "description": "Determines if the table is linked", + "nullable": true } } }, - "AnswerPngOptionsInput": { + "SearchRoleResponse": { "type": "object", + "required": [ + "id", + "name", + "description", + "privileges" + ], "properties": { - "x_resolution": { + "id": { + "type": "string", + "description": "Unique Id of the role." + }, + "name": { + "type": "string", + "description": "Name of the role" + }, + "description": { + "type": "string", + "description": "Description of the role" + }, + "groups_assigned_count": { "type": "integer", "format": "int32", - "description": "Desired width of the answer image in pixels. Ex. 1920 for Full HD image
Beta Version: 26.6.0.cl or later", + "description": "number of groups assigned with this role", "nullable": true }, - "y_resolution": { - "type": "integer", - "format": "int32", - "description": "Desired height of the answer image in pixels. Ex. 1080 for Full HD image
Beta Version: 26.6.0.cl or later", + "orgs": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GenericInfo" + }, + "description": "Orgs in which role exists.", "nullable": true }, - "scaling": { - "type": "integer", - "format": "int32", - "description": "The scale of the image in percentage. Ex. 100 for 100% scale.
Beta Version: 26.6.0.cl or later", + "groups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GenericInfo" + }, + "description": "Details of groups assigned with this role", "nullable": true - } - } - }, - "PermissionOfPrincipalsResponse": { - "type": "object", - "properties": { - "principal_permission_details": { + }, + "privileges": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "UNKNOWN", + "ADMINISTRATION", + "AUTHORING", + "USERDATAUPLOADING", + "DATADOWNLOADING", + "USERMANAGEMENT", + "SECURITYMANAGEMENT", + "LOGICALMODELING", + "DATAMANAGEMENT", + "TAGMANAGEMENT", + "SHAREWITHALL", + "SYSTEMMANAGEMENT", + "JOBSCHEDULING", + "A3ANALYSIS", + "EXPERIMENTALFEATUREPRIVILEGE", + "BYPASSRLS", + "RANALYSIS", + "DISABLE_PINBOARD_CREATION", + "DEVELOPER", + "APPLICATION_ADMINISTRATION", + "USER_ADMINISTRATION", + "GROUP_ADMINISTRATION", + "BACKUP_ADMINISTRATION", + "SYSTEM_INFO_ADMINISTRATION", + "ENABLESPOTAPPCREATION", + "SYNCMANAGEMENT", + "ORG_ADMINISTRATION", + "ROLE_ADMINISTRATION", + "AUTHENTICATION_ADMINISTRATION", + "BILLING_INFO_ADMINISTRATION", + "PREVIEW_THOUGHTSPOT_SAGE", + "LIVEBOARD_VERIFIER", + "CAN_MANAGE_CUSTOM_CALENDAR", + "CAN_CREATE_OR_EDIT_CONNECTIONS", + "CAN_CONFIGURE_CONNECTIONS", + "CAN_MANAGE_WORKSHEET_VIEWS_TABLES", + "CAN_MANAGE_VERSION_CONTROL", + "THIRDPARTY_ANALYSIS", + "CONTROL_TRUSTED_AUTH", + "CAN_CREATE_CATALOG", + "ALLOW_NON_EMBED_FULL_APP_ACCESS", + "CAN_ACCESS_ANALYST_STUDIO", + "CAN_MANAGE_ANALYST_STUDIO", + "CAN_VIEW_FOLDERS", + "CAN_MODIDY_FOLDERS", + "CAN_MANAGE_VARIABLES", + "CAN_MANAGE_AGENTSPOT", + "CAN_ACCESS_AGENTSPOT", + "PREVIEW_DOCUMENT_SEARCH", + "CAN_SETUP_VERSION_CONTROL", + "CAN_MANAGE_WEBHOOKS", + "CAN_DOWNLOAD_VISUALS", + "CAN_DOWNLOAD_DETAILED_DATA", + "CAN_USE_SPOTTER", + "CAN_MANAGE_SPOTTER" + ] + }, + "description": "Privileges granted to the role." + }, + "permission": { + "type": "string", + "enum": [ + "READ_ONLY", + "MODIFY", + "NO_ACCESS" + ], + "description": "Permission details of the Role", + "nullable": true + }, + "author_id": { + "type": "string", + "description": "Unique identifier of author of the role.", + "nullable": true + }, + "modifier_id": { + "type": "string", + "description": "Unique identifier of modifier of the role.", + "nullable": true + }, + "creation_time_in_millis": { + "type": "object", + "description": "Creation time of the role in milliseconds.", + "nullable": true + }, + "modification_time_in_millis": { "type": "object", + "description": "Last modified time of the role in milliseconds.", + "nullable": true + }, + "deleted": { + "type": "boolean", + "description": "Indicates whether the role is deleted.", + "nullable": true + }, + "deprecated": { + "type": "boolean", + "description": "Indicates whether the role is deprecated.", + "nullable": true + }, + "external": { + "type": "boolean", + "description": "Indicates whether the role is external.", + "nullable": true + }, + "hidden": { + "type": "boolean", + "description": "Indicates whether the role is hidden.", + "nullable": true + }, + "shared_via_connection": { + "type": "boolean", + "description": "Indicates whether the role is shared via connection", "nullable": true } - } + }, + "description": "Response for search role api should handle hidden privileges as well." }, - "PermissionOfMetadataResponse": { + "Default_Action_Config_Search_Input": { "type": "object", "properties": { - "metadata_permission_details": { - "type": "object", + "visibility": { + "type": "boolean", + "description": "Custom action is available on all visualizations. Earlier naming convention: LOCAL/GLOBAL. TRUE signifies GLOBAL for backward compatibility.", "nullable": true } - } + }, + "description": "Default Custom action configuration. This includes the custom action's visibility across all visualizations and Answers. By default, a custom action is added to all visualizations and Answers." }, - "ObjectPrivilegesMetadataInput": { + "ResponseCustomAction": { "type": "object", "required": [ - "identifier" + "action_details", + "default_action_config", + "id", + "name" ], "properties": { - "type": { + "action_details": { + "$ref": "#/components/schemas/Action_details", + "description": "`Type` and configuration data for custom actions" + }, + "default_action_config": { + "$ref": "#/components/schemas/Default_action_config", + "description": "Default custom action configuration. This includes the custom action's visibility across all visualizations and Answers. By default, a custom action is added to all visualizations and Answers." + }, + "id": { "type": "string", - "enum": [ - "LOGICAL_TABLE" - ], - "description": "Type of metadata object.\nRequired if the name of the object is set as the identifier. This attribute is optional when the object GUID is specified as the identifier.", + "description": "Unique Id of the custom action." + }, + "metadata_association": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Metadata_Association_Item" + }, + "description": "Metadata objects to assign the the custom action to.", "nullable": true }, - "identifier": { + "name": { "type": "string", - "description": "Unique ID or name of the metadata object." + "description": "Unique name of the custom action." + }, + "user_groups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Object_ID_And_Name" + }, + "description": "Unique ID or name of the User groups which are associated with the custom action.", + "nullable": true + } + }, + "description": "Custom action details" + }, + "Action_details": { + "type": "object", + "properties": { + "CALLBACK": { + "$ref": "#/components/schemas/CALLBACK", + "description": "CALLBACK Custom Action Type", + "nullable": true + }, + "URL": { + "$ref": "#/components/schemas/URL", + "description": "URL Custom Action Type", + "nullable": true } - } + }, + "description": "Type and Configuration for Custom Actions" }, - "ObjectPrivilegesOfMetadataResponse": { + "CALLBACK": { "type": "object", "properties": { - "metadata_object_privileges": { - "type": "object", + "reference": { + "type": "string", + "description": "Reference name of the SDK. By default, the value will be set to action name.", "nullable": true } - } + }, + "description": "CALLBACK Custom Action Type" }, - "PrincipalsInput": { + "URL": { "type": "object", "required": [ - "identifier" + "url" ], "properties": { - "identifier": { + "authentication": { + "$ref": "#/components/schemas/Authentication", + "description": "Authorization type for the custom action.", + "nullable": true + }, + "parameters": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ParametersListItem" + }, + "description": "Query parameters for url.", + "nullable": true + }, + "url": { "type": "string", - "description": "Unique ID or name of the principal object such as a user or group." + "description": "Request Url for the Custom action." }, - "type": { + "reference": { "type": "string", - "enum": [ - "USER", - "USER_GROUP" - ], - "description": "Principal type.", + "description": "Reference name of the SDK. By default, the value will be set to action name.", "nullable": true } - } + }, + "description": "URL Custom Action Type" }, - "PermissionsMetadataTypeInput": { + "Authentication": { "type": "object", - "required": [ - "identifier" - ], "properties": { - "type": { + "API_Key": { + "$ref": "#/components/schemas/API_Key", + "description": "With API key auth, you send a key-value pair to the API either in the request headers or query parameters.", + "nullable": true + }, + "Basic_Auth": { + "$ref": "#/components/schemas/Basic_Auth", + "description": "Basic Auth: Basic authentication involves sending a verified username and password with your request.", + "nullable": true + }, + "Bearer_Token": { "type": "string", - "enum": [ - "LIVEBOARD", - "ANSWER", - "LOGICAL_TABLE", - "LOGICAL_COLUMN", - "CONNECTION", - "COLLECTION" - ], - "description": " Type of metadata object.\n \n\nRequired if the name of the object is set as the identifier. This attribute is optional when the object GUID is specified as the identifier.", + "description": "Bearer tokens enable requests to authenticate using an access key.", "nullable": true }, - "identifier": { + "No_Auth": { "type": "string", - "description": "Unique ID or name of the metadata object." + "description": "No authorization. If your request doesn't require authorization.", + "nullable": true } }, - "description": "MetadataType InputType used in Permission API's" + "description": "Authorization type for the custom action." }, - "ColumnSecurityRuleTableInput": { + "API_Key": { "type": "object", "properties": { - "identifier": { + "key": { "type": "string", - "description": "Name or GUID of the table", + "description": "Enter your key name", "nullable": true }, - "obj_identifier": { + "value": { "type": "string", - "description": "Object ID of the table", + "description": "Enter you key value", "nullable": true } - } + }, + "description": "With API key auth, you send a key-value pair to the API either in the request headers or query parameters." }, - "ColumnSecurityRuleResponse": { + "Basic_Auth": { "type": "object", "properties": { - "table_guid": { + "password": { "type": "string", - "description": "GUID of the table for which the column security rules are fetched", + "description": "Password for the basic authentication", "nullable": true }, - "obj_id": { + "username": { "type": "string", - "description": "Object ID of the table for which the column security rules are fetched", - "nullable": true - }, - "column_security_rules": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ColumnSecurityRule" - }, - "description": "Array containing column security rule objects", + "description": "Username for the basic authentication", "nullable": true } - } + }, + "description": "Basic Auth: Basic authentication involves sending a verified username and password with your request." }, - "ColumnSecurityRule": { + "ParametersListItem": { "type": "object", - "required": [ - "column" - ], "properties": { - "column": { - "$ref": "#/components/schemas/ColumnSecurityRuleColumn", - "description": "Information about the column" - }, - "groups": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ColumnSecurityRuleGroup" - }, - "description": "Array of groups that have access to this column", + "key": { + "type": "string", + "description": "Key for the url query parameter", "nullable": true }, - "source_table_details": { - "$ref": "#/components/schemas/ColumnSecurityRuleSourceTable", - "description": "Information about the source table", + "value": { + "type": "string", + "description": "Value for the url query parameter", "nullable": true } } }, - "ColumnSecurityRuleColumn": { + "Default_action_config": { "type": "object", - "required": [ - "id", - "name" - ], "properties": { - "id": { - "type": "string", - "description": "The unique identifier of the column" - }, - "name": { - "type": "string", - "description": "The name of the column" + "visibility": { + "type": "boolean", + "description": "Custom action is available on all visualizations. Earlier , the naming convention: LOCAL/GLOBAL. TRUE signifies GLOBAL for backward compatibility.", + "nullable": true } - } + }, + "description": "Default Custom action configuration. This includes the custom action's visibility across all visualizations and Answers. By default, a custom action is added to all visualizations and Answers." }, - "ColumnSecurityRuleGroup": { + "Metadata_Association_Item": { "type": "object", "required": [ - "id", - "name" + "action_config", + "identifier", + "type" ], "properties": { - "id": { - "type": "string", - "description": "The unique identifier of the group" + "action_config": { + "$ref": "#/components/schemas/Action_config", + "description": "Specify that the association is enabled for the metadata object" }, - "name": { - "type": "string", - "description": "The name of the group" - } - } - }, - "ColumnSecurityRuleSourceTable": { - "type": "object", - "required": [ - "id", - "name" - ], - "properties": { - "id": { + "identifier": { "type": "string", - "description": "The unique identifier of the source table" + "description": "Unique ID or name of the metadata." }, - "name": { + "type": { "type": "string", - "description": "The name of the source table" + "description": " Type of metadata.\n \n\nRequired if the name of the object is set as the identifier. This attribute is optional when the object GUID is specified as the identifier." } } }, - "SearchDataResponse": { - "type": "object", - "required": [ - "contents" - ], - "properties": { - "contents": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AnswerContent" - }, - "description": "Data content of metadata objects" - } - }, - "description": "Response format associated with the search data API." - }, - "AnswerContent": { + "Action_config": { "type": "object", - "required": [ - "available_data_row_count", - "column_names", - "data_rows", - "record_offset", - "record_size", - "returned_data_row_count", - "sampling_ratio" - ], "properties": { - "available_data_row_count": { - "type": "integer", - "format": "int32", - "description": "Total available data row count." - }, - "column_names": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Name of the columns." - }, - "data_rows": { - "type": "array", - "items": { - "type": "object" - }, - "description": "Rows of data set." - }, - "record_offset": { - "type": "integer", - "format": "int32", - "description": "The starting record number from where the records should be included." - }, - "record_size": { - "type": "integer", - "format": "int32", - "description": "The number of records that should be included." - }, - "returned_data_row_count": { - "type": "integer", - "format": "int32", - "description": "Total returned data row count." + "position": { + "type": "string", + "description": "Position of the Custom action on the Metadata object. Earlier naming convention: context.", + "nullable": true }, - "sampling_ratio": { - "type": "number", - "format": "float", - "description": "Sampling ratio (0 to 1). If the query was sampled, it is the ratio of keys returned in the data set to the total number of keys expected in the query. If the value is 1.0, this means that the complete result is returned." + "visibility": { + "type": "boolean", + "description": "Visibility of the metadata association with custom action. Earlier naming convention: enabled", + "nullable": true } - } + }, + "description": "Specify that the association is enabled for the metadata object" }, - "LiveboardDataResponse": { + "CustomActionMetadataTypeInput": { "type": "object", "required": [ - "metadata_id", - "metadata_name", - "contents" + "identifier" ], "properties": { - "metadata_id": { + "type": { "type": "string", - "description": "The unique identifier of the object" + "enum": [ + "VISUALIZATION", + "ANSWER", + "WORKSHEET" + ], + "description": " Type of metadata object.\n \n\nRequired if the name of the object is set as the identifier. This attribute is optional when the object GUID is specified as the identifier.", + "nullable": true }, - "metadata_name": { + "identifier": { "type": "string", - "description": "Name of the metadata object" - }, - "contents": { - "type": "array", - "items": { - "$ref": "#/components/schemas/LiveboardContent" - }, - "description": "Data content of metadata objects" + "description": "Unique ID or name of the metadata object." } - } + }, + "description": "MetadataType InputType used in Custom Action API's" }, - "LiveboardContent": { + "MetadataContext": { "type": "object", - "required": [ - "available_data_row_count", - "column_names", - "data_rows", - "record_offset", - "record_size", - "returned_data_row_count", - "sampling_ratio" - ], "properties": { - "available_data_row_count": { - "type": "integer", - "format": "int32", - "description": "Total available data row count." - }, - "column_names": { + "data_source_identifiers": { "type": "array", "items": { "type": "string" }, - "description": "Name of the columns." + "description": "List of data_source_identifiers to provide context for breaking down user query into analytical queries that can be run on them.", + "nullable": true }, - "data_rows": { + "answer_identifiers": { "type": "array", "items": { - "type": "object" + "type": "string" }, - "description": "Rows of data set." - }, - "record_offset": { - "type": "integer", - "format": "int32", - "description": "The starting record number from where the records should be included." - }, - "record_size": { - "type": "integer", - "format": "int32", - "description": "The number of records that should be included." - }, - "returned_data_row_count": { - "type": "integer", - "format": "int32", - "description": "Total returned data row count." - }, - "sampling_ratio": { - "type": "number", - "format": "float", - "description": "Sampling ratio (0 to 1). If the query was sampled, it is the ratio of keys returned in the data set to the total number of keys expected in the query. If the value is 1.0, this means that the complete result is returned." + "description": "List of answer unique identifiers (GUIDs) whose data will be used to guide the response.", + "nullable": true }, - "visualization_id": { + "conversation_identifier": { "type": "string", - "description": "Unique ID of the visualization.", + "description": "Unique identifier to denote current conversation.", "nullable": true }, - "visualization_name": { - "type": "string", - "description": "Name of the visualization.", + "liveboard_identifiers": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of liveboard unique identifiers (GUIDs) whose data will be used to guide the response.", "nullable": true } } }, - "AnswerDataResponse": { + "AIContext": { "type": "object", - "required": [ - "metadata_id", - "metadata_name", - "contents" - ], "properties": { - "metadata_id": { - "type": "string", - "description": "The unique identifier of the object" - }, - "metadata_name": { - "type": "string", - "description": "Name of the metadata object" + "instructions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "User specific text instructions sent to AI system for processing the query.", + "nullable": true }, - "contents": { + "content": { "type": "array", "items": { - "$ref": "#/components/schemas/AnswerContent" + "type": "string" }, - "description": "Data content of metadata objects" + "description": "User provided content like text data, csv data as a string message to provide context & potentially improve the quality of the response.", + "nullable": true } - }, - "description": "Response format associated with fetch data api" + } }, - "LogResponse": { + "eureka_GetRelevantQuestionsResponse": { "type": "object", - "required": [ - "date", - "log" - ], "properties": { - "date": { - "type": "string", - "description": "Date timestamp of the log entry" - }, - "log": { - "type": "string", - "description": "Log data" + "relevant_questions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/eureka_RelevantQuestion" + }, + "description": "List of relevant questions that can be run on their respective data sources.", + "nullable": true } } }, - "RepoConfigObject": { + "eureka_RelevantQuestion": { "type": "object", "properties": { - "repository_url": { + "query": { "type": "string", - "description": "Remote repository URL configured", + "description": "NL query that can be run using spotter aka natural language search to get an AI generated answer.", "nullable": true }, - "username": { + "data_source_identifier": { "type": "string", - "description": "Username to authenticate connection to the version control system", + "description": "Unique identifier of the data source on which this query can be run on.", "nullable": true }, - "commit_branch_name": { + "data_source_name": { "type": "string", - "description": "Name of the remote branch where objects from this Thoughtspot instance will be versioned.", + "description": "Display name of the data source on which this query can be run on.", + "nullable": true + } + } + }, + "Input_eureka_NLSRequest": { + "type": "object", + "properties": { + "agentVersion": { + "type": "integer", + "format": "int32", + "description": "Cluster version like 10.4.0.cl, 10.5.0.cl, so on.", "nullable": true }, - "branches": { + "bypassCache": { + "type": "boolean", + "description": "If true, results are not returned from cache & calculated every time. Can incur high costs & latency.", + "nullable": true + }, + "instructions": { "type": "array", "items": { "type": "string" }, - "description": "Branches that have been pulled in local repository", - "nullable": true - }, - "enable_guid_mapping": { - "type": "boolean", - "description": "Maintain mapping of guid for the deployment to an instance", + "description": "User specific instructions for processing the @query.", "nullable": true }, - "configuration_branch_name": { + "query": { "type": "string", - "description": "Name of the branch where the configuration files related to operations between Thoughtspot and version control repo should be maintained.", + "description": "User query which is a topical/goal oriented question that needs to be broken down into smaller simple analytical questions.", "nullable": true - }, - "org": { - "$ref": "#/components/schemas/Org", - "description": "Details of the Org", + } + } + }, + "eureka_DecomposeQueryResponse": { + "type": "object", + "properties": { + "decomposedQueryResponse": { + "$ref": "#/components/schemas/eureka_LLMDecomposeQueryResponse", + "description": "Decomposed query response for a topical/goal oriented question that contains broken down analytical questions.", "nullable": true } } }, - "CommitHistoryResponse": { + "eureka_LLMDecomposeQueryResponse": { "type": "object", - "required": [ - "committer", - "author", - "comment", - "commit_time", - "commit_id", - "branch" - ], "properties": { - "committer": { - "$ref": "#/components/schemas/CommiterType", - "description": "Repository user using which changes were committed" - }, - "author": { - "$ref": "#/components/schemas/AuthorType", - "description": "Thoughtspot user who commits the changes" - }, - "comment": { - "type": "string", - "description": "Comments associated with the commit" - }, - "commit_time": { + "decomposedQueries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/eureka_LLMSuggestedQuery" + }, + "description": "List of analytical questions that can be run on their respective worksheet/data sources.", + "nullable": true + } + } + }, + "eureka_LLMSuggestedQuery": { + "type": "object", + "properties": { + "query": { "type": "string", - "description": "Time at which the changes were committed." + "description": "NL query that can be run using spotter aka natural language search to get an AI generated answer.", + "nullable": true }, - "commit_id": { + "worksheetId": { "type": "string", - "description": "SHA id associated with the commit" + "description": "Unique identifier of the worksheet on which this query can be run on.", + "nullable": true }, - "branch": { + "worksheetName": { "type": "string", - "description": "Branch where changes were committed" + "description": "Display name of the worksheet on which this query can be run on.", + "nullable": true } } }, - "CommiterType": { + "eureka_DataSourceSuggestionResponse": { "type": "object", "properties": { - "email": { - "type": "string", - "description": "Email id of the committer", - "nullable": true - }, - "username": { - "type": "string", - "description": "Username of the committer", + "data_sources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DataSource" + }, + "description": "List of data sources suggested.", "nullable": true } } }, - "AuthorType": { + "DataSource": { "type": "object", "properties": { - "email": { - "type": "string", - "description": "Email id of the committer", + "confidence": { + "type": "number", + "format": "float", + "description": "Confidence score for the data source suggestion.", "nullable": true }, - "username": { + "details": { + "$ref": "#/components/schemas/EntityHeader", + "description": "Details of the data source.", + "nullable": true + }, + "reasoning": { "type": "string", - "description": "Username of the committer", + "description": "LLM reasoning for the data source.", "nullable": true } } }, - "ConnectionInput": { + "EntityHeader": { "type": "object", "properties": { - "identifier": { + "description": { "type": "string", - "description": "Unique ID or name of the connection.", + "description": "Description of the data source.", "nullable": true }, - "name_pattern": { + "data_source_name": { "type": "string", - "description": "A pattern to match case-insensitive name of the connection object. User `%` for a wildcard match.", + "description": "Display name of the data source.", "nullable": true }, - "data_warehouse_objects": { + "data_source_identifier": { + "type": "string", + "description": "Unique identifier of the data source.", + "nullable": true + } + } + }, + "eureka_GetNLInstructionsResponse": { + "type": "object", + "required": [ + "nl_instructions_info" + ], + "properties": { + "nl_instructions_info": { "type": "array", "items": { - "$ref": "#/components/schemas/DataWarehouseObjectInput" + "$ref": "#/components/schemas/NLInstructionsInfo" }, - "description": "Filter options for databases, schemas, tables and columns.", - "nullable": true + "description": "List of NL instructions with their scopes." } } }, - "DataWarehouseObjectInput": { + "NLInstructionsInfo": { "type": "object", + "required": [ + "instructions", + "scope" + ], "properties": { - "database": { + "instructions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "User instructions for natural language processing." + }, + "scope": { "type": "string", - "description": "Name of the database.", + "enum": [ + "GLOBAL" + ], + "description": "Scope of the instruction." + } + } + }, + "AgentInstructions": { + "type": "object", + "required": [ + "instructions" + ], + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of the record.", "nullable": true }, - "schema": { + "instructions": { "type": "string", - "description": "Name of the schema within the database.", + "description": "The admin instructions text for the agent." + }, + "created_at": { + "type": "string", + "description": "ISO timestamp when the instructions were created.", "nullable": true }, - "table": { + "updated_at": { "type": "string", - "description": "Name of the table within the schema.", + "description": "ISO timestamp when the instructions were last updated.", "nullable": true }, - "column": { + "last_updated_by": { "type": "string", - "description": "Name of the column within the table.", + "description": "User ID of the admin who last updated the instructions.", "nullable": true } - } + }, + "description": "Admin instructions configured for the AI agent." }, - "SortOptionInput": { + "AgentConversationHistoryResponse": { "type": "object", "properties": { - "field_name": { - "type": "string", - "enum": [ - "NAME", - "DISPLAY_NAME", - "AUTHOR", - "CREATED", - "MODIFIED", - "LAST_ACCESSED", - "SYNCED", - "VIEWS", - "USER_STATE", - "ROW_COUNT" - ], - "description": "Name of the field to apply the sort on.", + "conversations": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AgentConversationList" + }, + "description": "List of saved agent conversations for the current user.", "nullable": true }, - "order": { - "type": "string", - "enum": [ - "ASC", - "DESC" - ], - "description": "Sort order : ASC(Ascending) or DESC(Descending).", + "has_more": { + "type": "boolean", + "description": "Whether additional conversations exist beyond this page. `true` when one or\nmore conversations remain after the current page; `false` when the current\npage is the last. Use `offset` to fetch the next page.", "nullable": true } - } + }, + "description": "Response returned by getConversationList." }, - "SearchConnectionResponse": { + "AgentConversationList": { "type": "object", "required": [ - "id", - "name", - "data_warehouse_type" + "conversation_identifier" ], "properties": { - "id": { + "conversation_identifier": { "type": "string", - "description": "Unique ID of the connection." + "description": "Unique identifier of the conversation." }, - "name": { + "conversation_title": { "type": "string", - "description": "Name of the connection." + "description": "Display title of the conversation.", + "nullable": true }, - "description": { + "created_at": { "type": "string", - "description": "Description of the connection.", + "description": "ISO 8601 timestamp when the conversation was created.", "nullable": true }, - "data_warehouse_type": { + "updated_at": { "type": "string", - "enum": [ - "SNOWFLAKE", - "AMAZON_REDSHIFT", - "GOOGLE_BIGQUERY", - "AZURE_SYNAPSE", - "TERADATA", - "SAP_HANA", - "STARBURST", - "ORACLE_ADW", - "DATABRICKS", - "DENODO", - "DREMIO", - "TRINO", - "PRESTO", - "POSTGRES", - "SQLSERVER", - "MYSQL", - "GENERIC_JDBC", - "AMAZON_RDS_POSTGRESQL", - "AMAZON_AURORA_POSTGRESQL", - "AMAZON_RDS_MYSQL", - "AMAZON_AURORA_MYSQL", - "LOOKER", - "AMAZON_ATHENA", - "SINGLESTORE", - "GCP_SQLSERVER", - "GCP_ALLOYDB_POSTGRESQL", - "GCP_POSTGRESQL", - "GCP_MYSQL", - "MODE", - "GOOGLE_SHEETS", - "FALCON", - "FALCON_ONPREM", - "CLICKHOUSE", - "IOMETE" - ], - "description": "Type of data warehouse." + "description": "ISO 8601 timestamp when the conversation was last updated.", + "nullable": true }, - "data_warehouse_objects": { - "$ref": "#/components/schemas/DataWarehouseObjects", - "description": "List of Data warehouse objects", + "data_source_identifiers": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Unique identifiers of the data sources associated with the conversation.", "nullable": true }, - "details": { - "type": "object", - "description": "Details of the connection.", + "data_source_names": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DataSourceEntry" + }, + "description": "Data sources associated with the conversation, each with an `id` and `name`.", "nullable": true } - } + }, + "description": "A saved agent conversation item returned in list responses." }, - "DataWarehouseObjects": { + "DataSourceEntry": { "type": "object", "required": [ - "databases" + "id", + "name" ], "properties": { - "databases": { + "id": { + "type": "string", + "description": "Unique identifier of the data source." + }, + "name": { + "type": "string", + "description": "Display name of the data source." + } + }, + "description": "A data source associated with a conversation, returned as a typed entry." + }, + "ConversationMessageResponse": { + "type": "object", + "properties": { + "messages": { "type": "array", "items": { - "$ref": "#/components/schemas/Database" + "$ref": "#/components/schemas/ConversationMessage" }, - "description": "Databases of the connection." + "description": "Ordered conversation messages. Empty array when the conversation has no messages.", + "nullable": true + }, + "code_execution_files": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CodeExecutionFileMetadata" + }, + "description": "Sanitized code-execution file metadata for files referenced by this\nconversation. Empty array when the conversation has no code-execution files.", + "nullable": true } - } + }, + "description": "Response body of getConversation. `messages` is ordered oldest to newest.\n`code_execution_files` is a list of sanitized code-execution file metadata\nentries, keyed in upstream by `file_id`." }, - "Database": { + "ConversationMessage": { "type": "object", "required": [ - "name" + "message_id", + "timestamp_in_millis" ], "properties": { - "name": { + "message_id": { "type": "string", - "description": "Name of the database." + "description": "Stable identifier for the turn. For liveboard-started synthetic first turns,\nthis is the root node identifier." }, - "schemas": { + "timestamp_in_millis": { + "type": "object", + "description": "Milliseconds since Unix epoch for the turn." + }, + "user_prompt": { + "$ref": "#/components/schemas/UserPrompt", + "description": "User-authored prompt that started the turn: the user's message and any files\nor connector resources attached to it. Null for liveboard-started synthetic\nfirst turns.", + "nullable": true + }, + "response_items": { "type": "array", "items": { - "$ref": "#/components/schemas/SchemaObject" + "type": "object" }, - "description": "Schemas of the database.", - "nullable": true - }, - "auto_created": { - "type": "boolean", - "description": "Determines if the object is auto created.", + "description": "Agent-side output produced in response to this turn. Empty array for\nin-progress turns where the agent has not yet produced output.", "nullable": true } - } + }, + "description": "One conversational exchange: an optional user prompt (message and attachments),\nfollowed by the agent's response items for that turn." }, - "SchemaObject": { + "UserPrompt": { "type": "object", - "required": [ - "name" - ], "properties": { - "name": { - "type": "string", - "description": "Name of the schema." + "message": { + "$ref": "#/components/schemas/UserMessage", + "description": "User query that started the turn. Null for liveboard-started synthetic first turns.", + "nullable": true }, - "tables": { + "attachments": { "type": "array", "items": { - "$ref": "#/components/schemas/Table" + "type": "object" }, - "description": "Tables in the schema.", + "description": "Files or connector resources attached to the user message. Empty array when\nthere are no attachments.", "nullable": true } - } + }, + "description": "User-authored prompt for a conversation turn: the user's text message and any\nfiles or connector resources attached to it." }, - "Table": { + "UserMessage": { "type": "object", "required": [ - "name" + "message_id", + "content" ], "properties": { - "name": { + "message_id": { "type": "string", - "description": "Name of the table." - }, - "columns": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Column" - }, - "description": "Columns of the table.", - "nullable": true + "description": "Unique identifier of the user message." }, + "content": { + "type": "string", + "description": "Text body of the user query." + } + }, + "description": "User-authored text message that begins a conversation turn.\nNull when the turn is a synthetic liveboard-started first turn." + }, + "FileResponseItem": { + "type": "object", + "required": [ + "type", + "timestamp_in_millis" + ], + "properties": { "type": { "type": "string", - "description": "Type of table. Either view or table", - "nullable": true + "description": "Variant discriminator. Always `\"file\"`." }, - "description": { - "type": "string", - "description": "Description of the table", - "nullable": true + "timestamp_in_millis": { + "type": "object", + "description": "Milliseconds since Unix epoch when this item was produced." }, - "selected": { + "is_thinking": { "type": "boolean", - "description": "Determines if the table is selected", + "description": "True when the item represents internal agent reasoning rather than user-facing output.", "nullable": true }, - "linked": { - "type": "boolean", - "description": "Determines if the table is linked", + "step_title": { + "type": "string", + "description": "Human-readable label for the agent step producing this item.", "nullable": true }, - "relationships": { + "files": { "type": "array", "items": { - "type": "object" + "$ref": "#/components/schemas/PublicFileInfo" }, - "description": "List of relationships for the table", + "description": "Sanitized file metadata.", "nullable": true } - } + }, + "description": "Uploaded or generated files attached to a turn." }, - "Column": { + "PublicFileInfo": { "type": "object", "required": [ - "name", - "data_type" + "file_id" ], "properties": { - "name": { - "type": "string", - "description": "Name of the column" - }, - "data_type": { + "file_id": { "type": "string", - "description": "Data type of the column" + "description": "Unique identifier of the file." }, - "is_aggregate": { + "display_name": { "type": "string", - "description": "Determines if the column schema is an aggregate", + "description": "Human-readable file name.", "nullable": true }, - "can_import": { - "type": "boolean", - "description": "Determines if the column schema can be imported", + "file_type": { + "type": "string", + "description": "File type such as `csv`, `pdf`, or `png`.", "nullable": true }, - "selected": { - "type": "boolean", - "description": "Determines if the table is selected", + "created_time_in_millis": { + "type": "object", + "description": "Milliseconds since Unix epoch when the file was created.", "nullable": true }, - "is_linked_active": { - "type": "boolean", - "description": "Determines if the table is linked", + "size_bytes": { + "type": "integer", + "format": "int32", + "description": "File size in bytes.", "nullable": true } - } + }, + "description": "Sanitized metadata for a file attached to or produced by a conversation turn.\nNever exposes internal Azure or blob-storage identifiers." }, - "SearchRoleResponse": { + "ResourceResponseItem": { "type": "object", "required": [ - "id", - "name", - "description", - "privileges" + "type", + "timestamp_in_millis", + "title", + "uri" ], "properties": { - "id": { - "type": "string", - "description": "Unique Id of the role." - }, - "name": { - "type": "string", - "description": "Name of the role" - }, - "description": { + "type": { "type": "string", - "description": "Description of the role" - }, - "groups_assigned_count": { - "type": "integer", - "format": "int32", - "description": "number of groups assigned with this role", - "nullable": true + "description": "Variant discriminator. Always `\"resource\"`." }, - "orgs": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GenericInfo" - }, - "description": "Orgs in which role exists.", - "nullable": true + "timestamp_in_millis": { + "type": "object", + "description": "Milliseconds since Unix epoch when this item was produced." }, - "groups": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GenericInfo" - }, - "description": "Details of groups assigned with this role", + "is_thinking": { + "type": "boolean", + "description": "True when the item represents internal agent reasoning rather than user-facing output.", "nullable": true }, - "privileges": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "UNKNOWN", - "ADMINISTRATION", - "AUTHORING", - "USERDATAUPLOADING", - "DATADOWNLOADING", - "USERMANAGEMENT", - "SECURITYMANAGEMENT", - "LOGICALMODELING", - "DATAMANAGEMENT", - "TAGMANAGEMENT", - "SHAREWITHALL", - "SYSTEMMANAGEMENT", - "JOBSCHEDULING", - "A3ANALYSIS", - "EXPERIMENTALFEATUREPRIVILEGE", - "BYPASSRLS", - "RANALYSIS", - "DISABLE_PINBOARD_CREATION", - "DEVELOPER", - "APPLICATION_ADMINISTRATION", - "USER_ADMINISTRATION", - "GROUP_ADMINISTRATION", - "BACKUP_ADMINISTRATION", - "SYSTEM_INFO_ADMINISTRATION", - "ENABLESPOTAPPCREATION", - "SYNCMANAGEMENT", - "ORG_ADMINISTRATION", - "ROLE_ADMINISTRATION", - "AUTHENTICATION_ADMINISTRATION", - "BILLING_INFO_ADMINISTRATION", - "PREVIEW_THOUGHTSPOT_SAGE", - "LIVEBOARD_VERIFIER", - "CAN_MANAGE_CUSTOM_CALENDAR", - "CAN_CREATE_OR_EDIT_CONNECTIONS", - "CAN_CONFIGURE_CONNECTIONS", - "CAN_MANAGE_WORKSHEET_VIEWS_TABLES", - "CAN_MANAGE_VERSION_CONTROL", - "THIRDPARTY_ANALYSIS", - "CONTROL_TRUSTED_AUTH", - "CAN_CREATE_CATALOG", - "ALLOW_NON_EMBED_FULL_APP_ACCESS", - "CAN_ACCESS_ANALYST_STUDIO", - "CAN_MANAGE_ANALYST_STUDIO", - "CAN_VIEW_FOLDERS", - "CAN_MODIDY_FOLDERS", - "CAN_MANAGE_VARIABLES", - "CAN_MANAGE_AGENTSPOT", - "CAN_ACCESS_AGENTSPOT", - "PREVIEW_DOCUMENT_SEARCH", - "CAN_SETUP_VERSION_CONTROL", - "CAN_MANAGE_WEBHOOKS", - "CAN_DOWNLOAD_VISUALS", - "CAN_DOWNLOAD_DETAILED_DATA", - "CAN_USE_SPOTTER" - ] - }, - "description": "Privileges granted to the role." - }, - "permission": { + "step_title": { "type": "string", - "enum": [ - "READ_ONLY", - "MODIFY", - "NO_ACCESS" - ], - "description": "Permission details of the Role", + "description": "Human-readable label for the agent step producing this item.", "nullable": true }, - "author_id": { + "title": { "type": "string", - "description": "Unique identifier of author of the role.", - "nullable": true + "description": "Human-readable title of the resource." }, - "modifier_id": { + "uri": { "type": "string", - "description": "Unique identifier of modifier of the role.", - "nullable": true - }, - "creation_time_in_millis": { - "type": "object", - "description": "Creation time of the role in milliseconds.", - "nullable": true - }, - "modification_time_in_millis": { - "type": "object", - "description": "Last modified time of the role in milliseconds.", - "nullable": true - }, - "deleted": { - "type": "boolean", - "description": "Indicates whether the role is deleted.", - "nullable": true - }, - "deprecated": { - "type": "boolean", - "description": "Indicates whether the role is deprecated.", - "nullable": true + "description": "Resource URI." }, - "external": { - "type": "boolean", - "description": "Indicates whether the role is external.", + "name": { + "type": "string", + "description": "Original name or filename.", "nullable": true }, - "hidden": { - "type": "boolean", - "description": "Indicates whether the role is hidden.", + "mime_type": { + "type": "string", + "description": "MIME type.", "nullable": true }, - "shared_via_connection": { - "type": "boolean", - "description": "Indicates whether the role is shared via connection", - "nullable": true - } - }, - "description": "Response for search role api should handle hidden privileges as well." - }, - "Default_Action_Config_Search_Input": { - "type": "object", - "properties": { - "visibility": { - "type": "boolean", - "description": "Custom action is available on all visualizations. Earlier naming convention: LOCAL/GLOBAL. TRUE signifies GLOBAL for backward compatibility.", - "nullable": true - } - }, - "description": "Default Custom action configuration. This includes the custom action's visibility across all visualizations and Answers. By default, a custom action is added to all visualizations and Answers." - }, - "ResponseCustomAction": { - "type": "object", - "required": [ - "action_details", - "default_action_config", - "id", - "name" - ], - "properties": { - "action_details": { - "$ref": "#/components/schemas/Action_details", - "description": "`Type` and configuration data for custom actions" + "description": { + "type": "string", + "description": "Short description.", + "nullable": true }, - "default_action_config": { - "$ref": "#/components/schemas/Default_action_config", - "description": "Default custom action configuration. This includes the custom action's visibility across all visualizations and Answers. By default, a custom action is added to all visualizations and Answers." + "size": { + "type": "integer", + "format": "int32", + "description": "Size in bytes.", + "nullable": true }, - "id": { + "connector_id": { "type": "string", - "description": "Unique Id of the custom action." + "description": "Connector instance identifier.", + "nullable": true }, - "metadata_association": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Metadata_Association_Item" - }, - "description": "Metadata objects to assign the the custom action to.", + "connector_name": { + "type": "string", + "description": "Human-readable connector name.", "nullable": true }, - "name": { + "connector_slug": { "type": "string", - "description": "Unique name of the custom action." + "description": "Connector slug or type key.", + "nullable": true }, - "user_groups": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Object_ID_And_Name" - }, - "description": "Unique ID or name of the User groups which are associated with the custom action.", + "transport_type": { + "type": "string", + "enum": [ + "STREAMABLE_HTTP", + "SSE" + ], + "description": "Underlying transport protocol used by the MCP connector. See `TransportType`\nfor accepted values.", "nullable": true } }, - "description": "Custom action details" + "description": "MCP (Model Context Protocol) resource — typically a connector-provided artifact\nsuch as a document excerpt." }, - "Action_details": { + "TextResponseItem": { "type": "object", + "required": [ + "type", + "timestamp_in_millis", + "content" + ], "properties": { - "CALLBACK": { - "$ref": "#/components/schemas/CALLBACK", - "description": "CALLBACK Custom Action Type", + "type": { + "type": "string", + "description": "Variant discriminator. Always `\"text\"`." + }, + "timestamp_in_millis": { + "type": "object", + "description": "Milliseconds since Unix epoch when this item was produced." + }, + "is_thinking": { + "type": "boolean", + "description": "True when the item represents internal agent reasoning rather than user-facing output.", "nullable": true }, - "URL": { - "$ref": "#/components/schemas/URL", - "description": "URL Custom Action Type", + "step_title": { + "type": "string", + "description": "Human-readable label for the agent step producing this item.", "nullable": true - } - }, - "description": "Type and Configuration for Custom Actions" - }, - "CALLBACK": { - "type": "object", - "properties": { - "reference": { + }, + "content": { "type": "string", - "description": "Reference name of the SDK. By default, the value will be set to action name.", + "description": "The text body." + }, + "content_type": { + "type": "string", + "enum": [ + "TEXT_PLAIN", + "TEXT_MARKDOWN", + "TEXT_X_MARKDOWN_WITH_CODE", + "TEXT_HTML" + ], + "description": "Rendering hint for the text content. See `ContentMimeType` for accepted values.", + "nullable": true + }, + "file_reference": { + "$ref": "#/components/schemas/FileReference", + "description": "Pointer to a code-execution-generated file associated with this text item.", "nullable": true } }, - "description": "CALLBACK Custom Action Type" + "description": "Agent text output." }, - "URL": { + "FileReference": { "type": "object", "required": [ - "url" + "file_id" ], "properties": { - "authentication": { - "$ref": "#/components/schemas/Authentication", - "description": "Authorization type for the custom action.", - "nullable": true - }, - "parameters": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ParametersListItem" - }, - "description": "Query parameters for url.", - "nullable": true - }, - "url": { + "file_id": { "type": "string", - "description": "Request Url for the Custom action." + "description": "Unique identifier of the code-execution-generated file." }, - "reference": { + "display_name": { "type": "string", - "description": "Reference name of the SDK. By default, the value will be set to action name.", + "description": "Human-readable file name.", + "nullable": true + }, + "created_time_in_millis": { + "type": "object", + "description": "Milliseconds since Unix epoch when the file was created.", "nullable": true } }, - "description": "URL Custom Action Type" + "description": "Pointer to a code-execution-generated file referenced from a text response item.\nFull metadata (including expiry) is in the top-level `code_execution_files` map." }, - "Authentication": { + "ToolCallResponseItem": { "type": "object", + "required": [ + "type", + "timestamp_in_millis", + "arguments" + ], "properties": { - "API_Key": { - "$ref": "#/components/schemas/API_Key", - "description": "With API key auth, you send a key-value pair to the API either in the request headers or query parameters.", + "type": { + "type": "string", + "description": "Variant discriminator. Always `\"tool_call\"`." + }, + "timestamp_in_millis": { + "type": "object", + "description": "Milliseconds since Unix epoch when this item was produced." + }, + "is_thinking": { + "type": "boolean", + "description": "True when the item represents internal agent reasoning rather than user-facing output.", "nullable": true }, - "Basic_Auth": { - "$ref": "#/components/schemas/Basic_Auth", - "description": "Basic Auth: Basic authentication involves sending a verified username and password with your request.", + "step_title": { + "type": "string", + "description": "Human-readable label for the agent step producing this item.", "nullable": true }, - "Bearer_Token": { + "tool_call_id": { "type": "string", - "description": "Bearer tokens enable requests to authenticate using an access key.", + "description": "Identifier linking this tool call to its matching tool_result or answer.", "nullable": true }, - "No_Auth": { + "tool_name": { "type": "string", - "description": "No authorization. If your request doesn't require authorization.", + "description": "Name of the tool being invoked.", "nullable": true + }, + "arguments": { + "type": "object", + "description": "Input arguments passed to the tool. Shape depends on the tool." } }, - "description": "Authorization type for the custom action." + "description": "Agent invoked a tool." }, - "API_Key": { + "ToolResultResponseItem": { "type": "object", + "required": [ + "type", + "timestamp_in_millis", + "content" + ], "properties": { - "key": { + "type": { "type": "string", - "description": "Enter your key name", + "description": "Variant discriminator. Always `\"tool_result\"`." + }, + "timestamp_in_millis": { + "type": "object", + "description": "Milliseconds since Unix epoch when this item was produced." + }, + "is_thinking": { + "type": "boolean", + "description": "True when the item represents internal agent reasoning rather than user-facing output.", "nullable": true }, - "value": { + "step_title": { "type": "string", - "description": "Enter you key value", + "description": "Human-readable label for the agent step producing this item.", "nullable": true - } - }, - "description": "With API key auth, you send a key-value pair to the API either in the request headers or query parameters." - }, - "Basic_Auth": { - "type": "object", - "properties": { - "password": { + }, + "tool_call_id": { "type": "string", - "description": "Password for the basic authentication", + "description": "Matches the originating tool_call.", "nullable": true }, - "username": { + "tool_name": { "type": "string", - "description": "Username for the basic authentication", + "description": "Name of the tool that produced this result.", "nullable": true - } - }, - "description": "Basic Auth: Basic authentication involves sending a verified username and password with your request." - }, - "ParametersListItem": { - "type": "object", - "properties": { - "key": { + }, + "content": { "type": "string", - "description": "Key for the url query parameter", - "nullable": true + "description": "Result body (tool output, or `\": \"` for errors)." }, - "value": { + "content_type": { "type": "string", - "description": "Value for the url query parameter", + "enum": [ + "TEXT_PLAIN", + "TEXT_MARKDOWN", + "TEXT_X_MARKDOWN_WITH_CODE", + "TEXT_HTML" + ], + "description": "Rendering hint for the result content; defaults to `TEXT_PLAIN` for tool\nresults. See `ContentMimeType` for accepted values.", "nullable": true - } - } - }, - "Default_action_config": { - "type": "object", - "properties": { - "visibility": { + }, + "success": { "type": "boolean", - "description": "Custom action is available on all visualizations. Earlier , the naming convention: LOCAL/GLOBAL. TRUE signifies GLOBAL for backward compatibility.", + "description": "False when the tool invocation errored; true otherwise.", "nullable": true } }, - "description": "Default Custom action configuration. This includes the custom action's visibility across all visualizations and Answers. By default, a custom action is added to all visualizations and Answers." + "description": "Result returned from a tool invocation." }, - "Metadata_Association_Item": { + "AnswerResponseItem": { "type": "object", "required": [ - "action_config", - "identifier", - "type" + "type", + "timestamp_in_millis", + "answer_id" ], "properties": { - "action_config": { - "$ref": "#/components/schemas/Action_config", - "description": "Specify that the association is enabled for the metadata object" + "type": { + "type": "string", + "description": "Variant discriminator. Always `\"answer\"`." }, - "identifier": { + "timestamp_in_millis": { + "type": "object", + "description": "Milliseconds since Unix epoch when this item was produced." + }, + "is_thinking": { + "type": "boolean", + "description": "True when the item represents internal agent reasoning rather than user-facing output.", + "nullable": true + }, + "step_title": { "type": "string", - "description": "Unique ID or name of the metadata." + "description": "Human-readable label for the agent step producing this item.", + "nullable": true }, - "type": { + "answer_id": { "type": "string", - "description": " Type of metadata.\n \n\nRequired if the name of the object is set as the identifier. This attribute is optional when the object GUID is specified as the identifier." - } - } - }, - "Action_config": { - "type": "object", - "properties": { - "position": { + "description": "Identifier used to fetch the full answer payload separately." + }, + "tool_call_id": { "type": "string", - "description": "Position of the Custom action on the Metadata object. Earlier naming convention: context.", + "description": "Links to the originating tool_call, when applicable.", "nullable": true }, - "visibility": { - "type": "boolean", - "description": "Visibility of the metadata association with custom action. Earlier naming convention: enabled", + "tool_name": { + "type": "string", + "description": "Tool that produced the answer, when applicable.", "nullable": true } }, - "description": "Specify that the association is enabled for the metadata object" + "description": "Slim reference to a saved answer produced by the agent. Full answer payload\n(visualization spec, formulas, session info) is not embedded — fetch separately\nvia `loadAnswer` using `answer_id`." }, - "CustomActionMetadataTypeInput": { + "SearchDatasetsResponseItem": { "type": "object", "required": [ - "identifier" + "type", + "timestamp_in_millis", + "text" ], "properties": { "type": { "type": "string", - "enum": [ - "VISUALIZATION", - "ANSWER", - "WORKSHEET" - ], - "description": " Type of metadata object.\n \n\nRequired if the name of the object is set as the identifier. This attribute is optional when the object GUID is specified as the identifier.", + "description": "Variant discriminator. Always `\"search_datasets\"`." + }, + "timestamp_in_millis": { + "type": "object", + "description": "Milliseconds since Unix epoch when this item was produced." + }, + "is_thinking": { + "type": "boolean", + "description": "True when the item represents internal agent reasoning rather than user-facing output.", "nullable": true }, - "identifier": { + "step_title": { "type": "string", - "description": "Unique ID or name of the metadata object." + "description": "Human-readable label for the agent step producing this item.", + "nullable": true + }, + "text": { + "type": "string", + "description": "Summary message describing the dataset search results." + }, + "data_sources": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DataSourceInfo" + }, + "description": "Dataset descriptors returned by the `search_datasets` tool.", + "nullable": true } }, - "description": "MetadataType InputType used in Custom Action API's" + "description": "Result of a dataset discovery step." }, - "MetadataContext": { + "DataSourceInfo": { "type": "object", "properties": { - "data_source_identifiers": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of data_source_identifiers to provide context for breaking down user query into analytical queries that can be run on them.", + "data_source_identifier": { + "type": "string", + "description": "Unique identifier of the data source (mirrors `header.guid`).", "nullable": true }, - "answer_identifiers": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of answer unique identifiers (GUIDs) whose data will be used to guide the response.", + "data_source_name": { + "type": "string", + "description": "Display name of the data source (mirrors `header.display_name`).", "nullable": true }, - "conversation_identifier": { + "description": { "type": "string", - "description": "Unique identifier to denote current conversation.", + "description": "Optional description of the data source.", + "nullable": true + }, + "confidence": { + "type": "number", + "format": "float", + "description": "Tool-reported confidence that this data source matches the query, in `[0, 1]`.", + "nullable": true + }, + "reasoning": { + "type": "string", + "description": "LLM reasoning describing why the data source was selected.", + "nullable": true + }, + "header": { + "$ref": "#/components/schemas/DataSourceHeader", + "description": "Header metadata extracted from the data source proto.", "nullable": true }, - "liveboard_identifiers": { + "related_liveboard_visualizations": { "type": "array", "items": { - "type": "string" + "type": "object" }, - "description": "List of liveboard unique identifiers (GUIDs) whose data will be used to guide the response.", + "description": "Related liveboard visualizations for this data source. Open-ended JSON shape\ndriven by the underlying proto.", "nullable": true - } - } - }, - "AIContext": { - "type": "object", - "properties": { - "instructions": { + }, + "related_answers": { "type": "array", "items": { - "type": "string" + "type": "object" }, - "description": "User specific text instructions sent to AI system for processing the query.", + "description": "Related saved answers for this data source. Open-ended JSON shape driven by\nthe underlying proto.", "nullable": true }, - "content": { + "related_spotter_queries": { "type": "array", "items": { "type": "string" }, - "description": "User provided content like text data, csv data as a string message to provide context & potentially improve the quality of the response.", + "description": "Related Spotter queries previously run against this data source. Truncated to\na small upper bound by the tool.", "nullable": true - } - } - }, - "eureka_GetRelevantQuestionsResponse": { - "type": "object", - "properties": { - "relevant_questions": { - "type": "array", - "items": { - "$ref": "#/components/schemas/eureka_RelevantQuestion" - }, - "description": "List of relevant questions that can be run on their respective data sources.", + }, + "popularity": { + "$ref": "#/components/schemas/DataSourcePopularity", + "description": "Aggregate popularity counters.", + "nullable": true + }, + "user_usage": { + "$ref": "#/components/schemas/DataSourceUserUsage", + "description": "Per-user usage counters scoped to the calling user.", "nullable": true } - } + }, + "description": "A data source descriptor returned by the agent's `search_datasets` tool." }, - "eureka_RelevantQuestion": { + "DataSourceHeader": { "type": "object", "properties": { - "query": { + "display_name": { "type": "string", - "description": "NL query that can be run using spotter aka natural language search to get an AI generated answer.", + "description": "Display name of the data source.", "nullable": true }, - "data_source_identifier": { + "guid": { "type": "string", - "description": "Unique identifier of the data source on which this query can be run on.", + "description": "Canonical unique identifier (GUID) of the data source.", "nullable": true }, - "data_source_name": { + "description": { "type": "string", - "description": "Display name of the data source on which this query can be run on.", + "description": "Optional description of the data source.", "nullable": true } - } + }, + "description": "Header metadata extracted from a data source proto. `guid` is the canonical\ndata source identifier and `display_name` is its user-facing name." }, - "Input_eureka_NLSRequest": { + "DataSourcePopularity": { "type": "object", "properties": { - "agentVersion": { + "total_spotter_queries": { "type": "integer", "format": "int32", - "description": "Cluster version like 10.4.0.cl, 10.5.0.cl, so on.", - "nullable": true - }, - "bypassCache": { - "type": "boolean", - "description": "If true, results are not returned from cache & calculated every time. Can incur high costs & latency.", + "description": "Total number of Spotter natural-language queries run against this data source.", "nullable": true }, - "instructions": { - "type": "array", - "items": { - "type": "string" - }, - "description": "User specific instructions for processing the @query.", + "total_answers": { + "type": "integer", + "format": "int32", + "description": "Total number of saved answers backed by this data source.", "nullable": true }, - "query": { - "type": "string", - "description": "User query which is a topical/goal oriented question that needs to be broken down into smaller simple analytical questions.", - "nullable": true - } - } - }, - "eureka_DecomposeQueryResponse": { - "type": "object", - "properties": { - "decomposedQueryResponse": { - "$ref": "#/components/schemas/eureka_LLMDecomposeQueryResponse", - "description": "Decomposed query response for a topical/goal oriented question that contains broken down analytical questions.", + "total_answer_impressions": { + "type": "integer", + "format": "int32", + "description": "Total number of impressions across saved answers backed by this data source.", "nullable": true } - } + }, + "description": "Aggregate popularity counters for a data source." }, - "eureka_LLMDecomposeQueryResponse": { + "DataSourceUserUsage": { "type": "object", "properties": { - "decomposedQueries": { - "type": "array", - "items": { - "$ref": "#/components/schemas/eureka_LLMSuggestedQuery" - }, - "description": "List of analytical questions that can be run on their respective worksheet/data sources.", + "total_spotter_queries": { + "type": "integer", + "format": "int32", + "description": "Total Spotter natural-language queries the calling user has run against this\ndata source.", "nullable": true } - } + }, + "description": "Per-user usage counters for a data source, scoped to the calling user." }, - "eureka_LLMSuggestedQuery": { + "CodeExecutionFileMetadata": { "type": "object", + "required": [ + "file_id", + "expired" + ], "properties": { - "query": { + "file_id": { "type": "string", - "description": "NL query that can be run using spotter aka natural language search to get an AI generated answer.", - "nullable": true + "description": "Unique identifier of the code-execution-generated file. Stable across\nconversation turns." }, - "worksheetId": { + "display_name": { "type": "string", - "description": "Unique identifier of the worksheet on which this query can be run on.", + "description": "Human-readable file name.", "nullable": true }, - "worksheetName": { + "file_type": { "type": "string", - "description": "Display name of the worksheet on which this query can be run on.", + "description": "File type hint. Either a MIME string (e.g. `text/csv`) or an extension\n(e.g. `csv`).", + "nullable": true + }, + "created_time_in_millis": { + "type": "object", + "description": "Milliseconds since Unix epoch when the file was created.", "nullable": true + }, + "expired": { + "type": "boolean", + "description": "True when the file is no longer downloadable (storage expired or evicted)." } - } + }, + "description": "Sanitized public metadata for a code-execution-generated file. Internal\nstorage identifiers (e.g. Azure blob ids) are deliberately not exposed." }, - "eureka_DataSourceSuggestionResponse": { + "LoadAnswerResponse": { "type": "object", "properties": { - "data_sources": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DataSource" - }, - "description": "List of data sources suggested.", + "answer": { + "$ref": "#/components/schemas/AnswerDetails", + "description": "Answer details for the loaded message.", "nullable": true } } }, - "DataSource": { + "AnswerDetails": { "type": "object", "properties": { - "confidence": { - "type": "number", - "format": "float", - "description": "Confidence score for the data source suggestion.", + "title": { + "type": "string", + "description": "Display title of the answer.", "nullable": true }, - "details": { - "$ref": "#/components/schemas/EntityHeader", - "description": "Details of the data source.", + "description": { + "type": "string", + "description": "Description of the answer.", "nullable": true }, - "reasoning": { + "session_identifier": { "type": "string", - "description": "LLM reasoning for the data source.", + "description": "Unique identifier of the session.", "nullable": true - } - } - }, - "EntityHeader": { - "type": "object", - "properties": { - "description": { - "type": "string", - "description": "Description of the data source.", + }, + "generation_number": { + "type": "integer", + "format": "int32", + "description": "Generation number of the answer.", "nullable": true }, - "data_source_name": { - "type": "string", - "description": "Display name of the data source.", + "tokens": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Ordered list of TML token strings that make up the answer query.", "nullable": true }, - "data_source_identifier": { + "visualization_type": { "type": "string", - "description": "Unique identifier of the data source.", + "enum": [ + "Chart", + "CHART", + "Table", + "TABLE", + "Undefined", + "UNDEFINED" + ], + "description": "Visualization type for the answer.", "nullable": true - } - } - }, - "eureka_GetNLInstructionsResponse": { - "type": "object", - "required": [ - "nl_instructions_info" - ], - "properties": { - "nl_instructions_info": { + }, + "formulas": { "type": "array", "items": { - "$ref": "#/components/schemas/NLInstructionsInfo" + "type": "string" }, - "description": "List of NL instructions with their scopes." - } - } - }, - "NLInstructionsInfo": { - "type": "object", - "required": [ - "instructions", - "scope" - ], - "properties": { - "instructions": { + "description": "List of formulas used in the answer.", + "nullable": true + }, + "parameters": { "type": "array", "items": { "type": "string" }, - "description": "User instructions for natural language processing." + "description": "List of parameters used in the answer.", + "nullable": true }, - "scope": { + "sub_queries": { + "type": "array", + "items": { + "type": "object" + }, + "description": "List of sub-queries used in the answer.", + "nullable": true + }, + "ac_state": { + "$ref": "#/components/schemas/ACState", + "description": "Agent context state for the answer.", + "nullable": true + } + } + }, + "ACState": { + "type": "object", + "properties": { + "transaction_identifier": { "type": "string", - "enum": [ - "GLOBAL" - ], - "description": "Scope of the instruction." + "description": "Unique identifier of the transaction.", + "nullable": true + }, + "generation_number": { + "type": "integer", + "format": "int32", + "description": "Generation number of the transaction.", + "nullable": true } } }, @@ -17026,7 +20477,93 @@ "type": "string", "nullable": true } - } + } + }, + "WebhookStorageConfigInfo": { + "type": "object", + "required": [ + "storage_type", + "provider", + "config" + ], + "properties": { + "storage_type": { + "type": "string", + "enum": [ + "OBJECT_STORAGE" + ], + "description": "Type of storage destination." + }, + "provider": { + "type": "string", + "enum": [ + "AWS_S3", + "GCP_GCS" + ], + "description": "Storage destination provider." + }, + "config": { + "$ref": "#/components/schemas/WebhookStorageSetupConfig", + "description": "Setup configuration specific to the upload path." + } + }, + "description": "Cluster-level storage setup information for configuring customer-managed storage." + }, + "WebhookStorageSetupConfig": { + "type": "object", + "required": [ + "config_type", + "setup_instructions" + ], + "properties": { + "config_type": { + "type": "string", + "enum": [ + "AWS_TO_S3_STORAGE", + "GCP_TO_S3_STORAGE", + "GCP_TO_GCS_STORAGE" + ], + "description": "Discriminator identifying the upload path. One of: AWS_TO_S3_STORAGE, GCP_TO_S3_STORAGE, GCP_TO_GCS_STORAGE." + }, + "aws_account_id": { + "type": "string", + "description": "AWS Account ID of the platform. Populated for AWS_TO_S3_STORAGE. Include in your IAM role trust policy.", + "nullable": true + }, + "gcp_service_account_id": { + "type": "string", + "description": "GCP service account numeric ID of the platform (the 'sub' claim in OIDC tokens). Populated for GCP_TO_S3_STORAGE.", + "nullable": true + }, + "oidc_provider": { + "type": "string", + "description": "OIDC identity provider URL. Populated for GCP_TO_S3_STORAGE; always 'accounts.google.com' for GCP.", + "nullable": true + }, + "trust_policy_template": { + "type": "object", + "description": "Sample IAM trust policy JSON. Populated for AWS_TO_S3_STORAGE and GCP_TO_S3_STORAGE.", + "nullable": true + }, + "service_account_email": { + "type": "string", + "description": "GCP service account email of the platform. Populated for GCP_TO_GCS_STORAGE. Grant it roles/iam.serviceAccountTokenCreator on your service account.", + "nullable": true + }, + "required_role": { + "type": "string", + "description": "IAM role the customer must grant to the platform service account. Populated for GCP_TO_GCS_STORAGE.", + "nullable": true + }, + "setup_instructions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Step-by-step instructions to configure the storage destination." + } + }, + "description": "Storage setup configuration for a specific upload path. The populated fields depend on config_type:\nAWS_TO_S3_STORAGE: aws_account_id, trust_policy_template, setup_instructions.\nGCP_TO_S3_STORAGE: gcp_service_account_id, oidc_provider, trust_policy_template, setup_instructions.\nGCP_TO_GCS_STORAGE: service_account_email, required_role, setup_instructions." }, "WebhookSortOptionsInput": { "type": "object", @@ -17164,6 +20701,15 @@ "$ref": "#/components/schemas/StorageDestination", "description": "Storage destination configuration for webhook payload delivery.", "nullable": true + }, + "status": { + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ], + "description": "Status of the webhook (ENABLED or DISABLED).\nOnly present when explicitly set.
Version: 26.7.0.cl or later", + "nullable": true } } }, @@ -17343,7 +20889,8 @@ "storage_type": { "type": "string", "enum": [ - "AWS_S3" + "AWS_S3", + "GCP_GCS" ], "description": "Type of storage destination (e.g., AWS_S3)." }, @@ -17361,6 +20908,11 @@ "$ref": "#/components/schemas/AwsS3Config", "description": "AWS S3 storage configuration.", "nullable": true + }, + "gcp_gcs_config": { + "$ref": "#/components/schemas/GcpGcsConfig", + "description": "GCP GCS storage configuration.
Version: 26.7.0.cl or later", + "nullable": true } }, "description": "Storage configuration containing provider-specific settings." @@ -17398,6 +20950,29 @@ }, "description": "AWS S3 storage configuration details." }, + "GcpGcsConfig": { + "type": "object", + "required": [ + "bucket_name", + "service_account_email" + ], + "properties": { + "bucket_name": { + "type": "string", + "description": "Name of the GCS bucket where webhook payloads are stored." + }, + "service_account_email": { + "type": "string", + "description": "Email of the GCP service account to impersonate for bucket access." + }, + "path_prefix": { + "type": "string", + "description": "Path prefix for organizing objects within the bucket.", + "nullable": true + } + }, + "description": "GCP GCS storage configuration details." + }, "WebhookPagination": { "type": "object", "required": [ @@ -17710,7 +21285,380 @@ "nullable": true } }, - "description": "A recipient (user, group, or external) for a job execution." + "description": "A recipient (user, group, or external) for a job execution." + }, + "StylePreference": { + "type": "object", + "properties": { + "scope": { + "type": "string", + "enum": [ + "CLUSTER", + "ORG" + ], + "description": "Scope at which these style preferences apply.", + "nullable": true + }, + "org": { + "$ref": "#/components/schemas/StyleOrgInfo", + "description": "Org associated with these preferences. Present only when scope is ORG.", + "nullable": true + }, + "navigation_panel": { + "$ref": "#/components/schemas/StyleNavigationPanel", + "description": "Navigation panel color configuration.", + "nullable": true + }, + "chart_color_palette": { + "$ref": "#/components/schemas/StyleChartColorPalette", + "description": "Chart color palette configuration.", + "nullable": true + }, + "embedded_footer_text": { + "$ref": "#/components/schemas/StyleEmbeddedFooterText", + "description": "Embedded footer text configuration.", + "nullable": true + }, + "logo": { + "$ref": "#/components/schemas/StyleLogoStatus", + "description": "Logo status per slot.", + "nullable": true + }, + "visualization_fonts": { + "$ref": "#/components/schemas/StyleVisualizationFonts", + "description": "Effective font assignments per visualization area.", + "nullable": true + } + }, + "description": "Style preferences for a single scope entry." + }, + "StyleOrgInfo": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32", + "description": "Unique integer ID of the org.", + "nullable": true + }, + "name": { + "type": "string", + "description": "Name of the org.", + "nullable": true + } + }, + "description": "Org information returned in style API responses." + }, + "StyleNavigationPanel": { + "type": "object", + "properties": { + "theme": { + "type": "string", + "enum": [ + "DARK", + "TWO_TONE", + "CUSTOM" + ], + "description": "Navigation panel color mode.", + "nullable": true + }, + "base_color": { + "type": "string", + "description": "Base color as a 6-digit hex string. Present only when theme is CUSTOM.", + "nullable": true + }, + "is_overridden": { + "type": "boolean", + "description": "True if explicitly set at this scope, overriding any inherited value.", + "nullable": true + } + }, + "description": "Navigation panel color configuration for a specific scope." + }, + "StyleChartColorPalette": { + "type": "object", + "properties": { + "colors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/StyleColorEntry" + }, + "description": "Ordered array of 8 color entries.", + "nullable": true + }, + "disable_color_rotation": { + "type": "boolean", + "description": "When true, automatic color rotation across chart data series is disabled.", + "nullable": true + }, + "is_overridden": { + "type": "boolean", + "description": "True if explicitly set at this scope, overriding any inherited value.", + "nullable": true + } + }, + "description": "Chart color palette configuration for a specific scope." + }, + "StyleColorEntry": { + "type": "object", + "properties": { + "primary": { + "type": "string", + "description": "Primary color as a 6-digit hex string.", + "nullable": true + }, + "secondary": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of 4 secondary shade hex strings.", + "nullable": true + } + }, + "description": "A single color entry in the chart color palette." + }, + "StyleEmbeddedFooterText": { + "type": "object", + "properties": { + "value": { + "type": "string", + "description": "Footer text value. Empty string indicates no footer is set.", + "nullable": true + }, + "is_overridden": { + "type": "boolean", + "description": "True if explicitly set at this scope, overriding any inherited value.", + "nullable": true + } + }, + "description": "Embedded footer text configuration for a specific scope." + }, + "StyleLogoStatus": { + "type": "object", + "properties": { + "default_logo": { + "$ref": "#/components/schemas/StyleLogoSlot", + "description": "Status of the DEFAULT logo slot (square app icon and favicon; recommended\n140x140 px).", + "nullable": true + }, + "wide_logo": { + "$ref": "#/components/schemas/StyleLogoSlot", + "description": "Status of the WIDE logo slot (horizontal top nav bar logo; recommended\n230x45 px).", + "nullable": true + } + }, + "description": "Logo status per slot." + }, + "StyleLogoSlot": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "UUID of the active logo.", + "nullable": true + }, + "is_overridden": { + "type": "boolean", + "description": "True if a custom logo is uploaded at this scope. False if the system\ndefault or cluster logo is active.", + "nullable": true + } + }, + "description": "Status of a single logo slot." + }, + "StyleVisualizationFonts": { + "type": "object", + "properties": { + "chart_visualization_fonts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChartVisualizationFontRecord" + }, + "description": "Font assignments for chart visualization areas.", + "nullable": true + }, + "table_visualization_fonts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TableVisualizationFontRecord" + }, + "description": "Font assignments for table visualization areas.", + "nullable": true + } + }, + "description": "Effective font assignments per visualization type." + }, + "ChartVisualizationFontRecord": { + "type": "object", + "properties": { + "visualization_area": { + "type": "string", + "enum": [ + "CHART_X_AXIS_LABELS", + "CHART_X_AXIS_TITLE", + "CHART_Y_AXIS_LABELS", + "CHART_Y_AXIS_TITLE", + "CHART_TOOLTIP", + "CHART_SCATTER_DATA_LABELS", + "CHART_DONUT_DATA_LABELS", + "CHART_LINE_DATA_LABELS", + "CHART_COLUMN_DATA_LABELS", + "CHART_BAR_DATA_LABELS", + "CHART_AREA_DATA_LABELS" + ], + "description": "Chart visualization area.", + "nullable": true + }, + "font_id": { + "type": "string", + "description": "UUID of the font assigned to this area. Null when the system default font\nis active.", + "nullable": true + }, + "font_name": { + "type": "string", + "description": "Display name of the font assigned to this area. Null when the system\ndefault font is active.", + "nullable": true + }, + "is_overridden": { + "type": "boolean", + "description": "True if explicitly set at this scope, overriding any inherited value.", + "nullable": true + } + }, + "description": "Font assignment for a chart visualization area in the response." + }, + "TableVisualizationFontRecord": { + "type": "object", + "properties": { + "visualization_area": { + "type": "string", + "enum": [ + "TABLE_VALUE_CELLS" + ], + "description": "Table visualization area.", + "nullable": true + }, + "font_id": { + "type": "string", + "description": "UUID of the font assigned to this area. Null when the system default font\nis active.", + "nullable": true + }, + "font_name": { + "type": "string", + "description": "Display name of the font assigned to this area. Null when the system\ndefault font is active.", + "nullable": true + }, + "is_overridden": { + "type": "boolean", + "description": "True if explicitly set at this scope, overriding any inherited value.", + "nullable": true + } + }, + "description": "Font assignment for a table visualization area in the response." + }, + "StyleFontRecord": { + "type": "object", + "required": [ + "id", + "name" + ], + "properties": { + "id": { + "type": "string", + "description": "Unique UUID identifier of the font." + }, + "scope": { + "type": "string", + "enum": [ + "CLUSTER", + "ORG" + ], + "description": "Scope indicating whether this font belongs to the cluster or org library.", + "nullable": true + }, + "org": { + "$ref": "#/components/schemas/StyleOrgInfo", + "description": "Org associated with this font. Present only when scope is ORG.", + "nullable": true + }, + "name": { + "type": "string", + "description": "Display name of the font." + }, + "weight": { + "type": "string", + "enum": [ + "NORMAL", + "LIGHT", + "BOLD" + ], + "description": "Weight of the font.", + "nullable": true + }, + "style": { + "type": "string", + "enum": [ + "NORMAL", + "ITALIC", + "OBLIQUE" + ], + "description": "Style of the font.", + "nullable": true + }, + "color": { + "type": "string", + "description": "Color of the font as a 6-digit hex string.", + "nullable": true + }, + "creation_time_in_millis": { + "type": "number", + "format": "float", + "description": "Timestamp in milliseconds when the font was uploaded.", + "nullable": true + }, + "assignments": { + "type": "array", + "items": { + "$ref": "#/components/schemas/StyleFontAssignment" + }, + "description": "Visualization areas currently assigned to this font. Empty if not assigned\nto any area. Populated only when include_font_assignments is true.", + "nullable": true + } + }, + "description": "A custom font record in the font library." + }, + "StyleFontAssignment": { + "type": "object", + "properties": { + "org": { + "$ref": "#/components/schemas/StyleOrgInfo", + "description": "Org context for this assignment. Present only when scope is ORG.", + "nullable": true + }, + "visualization_areas": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "CHART_X_AXIS_LABELS", + "CHART_X_AXIS_TITLE", + "CHART_Y_AXIS_LABELS", + "CHART_Y_AXIS_TITLE", + "CHART_TOOLTIP", + "CHART_SCATTER_DATA_LABELS", + "CHART_DONUT_DATA_LABELS", + "CHART_LINE_DATA_LABELS", + "CHART_COLUMN_DATA_LABELS", + "CHART_BAR_DATA_LABELS", + "CHART_AREA_DATA_LABELS", + "TABLE_VALUE_CELLS" + ] + }, + "description": "Visualization areas using this font.", + "nullable": true + } + }, + "description": "Visualization areas assigned to a font, grouped by org context." }, "GenericInfo": { "type": "object", @@ -18897,6 +22845,11 @@ "$ref": "#/components/schemas/ChannelValidationAwsS3Info", "description": "AWS S3 storage information from the validation step.", "nullable": true + }, + "gcp_gcs_info": { + "$ref": "#/components/schemas/ChannelValidationGcpGcsInfo", + "description": "GCP GCS storage information from the validation step.
Version: 26.7.0.cl or later", + "nullable": true } }, "description": "Validation detail result for a sub-step." @@ -18922,6 +22875,27 @@ }, "description": "AWS S3 storage information returned from a validation step." }, + "ChannelValidationGcpGcsInfo": { + "type": "object", + "properties": { + "bucket_name": { + "type": "string", + "description": "Name of the GCS bucket.", + "nullable": true + }, + "file_name": { + "type": "string", + "description": "Name of the uploaded file.", + "nullable": true + }, + "object_key": { + "type": "string", + "description": "Key (path) of the object within the GCS bucket.", + "nullable": true + } + }, + "description": "GCP GCS storage information returned from a validation step." + }, "TagMetadataTypeInput": { "type": "object", "required": [ @@ -19014,10 +22988,11 @@ "CAN_SETUP_VERSION_CONTROL", "CAN_DOWNLOAD_VISUALS", "CAN_DOWNLOAD_DETAILED_DATA", - "CAN_USE_SPOTTER" + "CAN_USE_SPOTTER", + "CAN_MANAGE_SPOTTER" ] }, - "description": "Privileges that will be assigned to the group.", + "description": "Privileges that will be assigned to the group. Note: AUTHORING is a no-op — always inherited via ALL_GROUP, assigning it has no effect.", "nullable": true }, "sub_group_identifiers": { @@ -19372,7 +23347,8 @@ "ACTION_OBJECT", "DATA_SOURCE", "USER", - "USER_GROUP" + "USER_GROUP", + "FOLDER" ], "description": "Optional type of the header object.", "nullable": true @@ -19426,7 +23402,8 @@ "ACTION_OBJECT", "DATA_SOURCE", "USER", - "USER_GROUP" + "USER_GROUP", + "FOLDER" ], "description": "Type of metadata. Required if metadata_identifier is name of the object.", "nullable": true @@ -19457,7 +23434,8 @@ "USER", "USER_GROUP", "ROLE", - "FEEDBACK" + "FEEDBACK", + "COLLECTION" ], "description": " Type of metadata.\n \n\nRequired if the name of the object is set as the identifier. This attribute is optional when the object GUID is specified as the identifier.", "nullable": true @@ -20078,7 +24056,8 @@ "CAN_MANAGE_WEBHOOKS", "CAN_DOWNLOAD_VISUALS", "CAN_DOWNLOAD_DETAILED_DATA", - "CAN_USE_SPOTTER" + "CAN_USE_SPOTTER", + "CAN_MANAGE_SPOTTER" ] }, "description": "Privileges granted to the role." @@ -21083,8 +25062,11 @@ "type": "string", "enum": [ "Chart", + "CHART", "Table", - "Undefined" + "TABLE", + "Undefined", + "UNDEFINED" ], "description": "Generated visualization type.", "nullable": true @@ -21574,6 +25556,79 @@ } } }, + "InputTableDefinitionInput": { + "type": "object", + "required": [ + "new_columns", + "referenced_columns" + ], + "properties": { + "new_columns": { + "type": "array", + "items": { + "$ref": "#/components/schemas/InputColumnSchemaInput" + }, + "description": "New input-only columns to create in the table." + }, + "referenced_columns": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Column IDs from the linked model to include in the table.\nPass an empty array to create an input table with no reference\ncolumns from the model." + } + }, + "description": "Definition of the input table schema." + }, + "InputColumnSchemaInput": { + "type": "object", + "required": [ + "name", + "data_type", + "type" + ], + "properties": { + "name": { + "type": "string", + "description": "Name of the column." + }, + "data_type": { + "type": "string", + "description": "Physical data type of the column as recognized by the connected\nwarehouse (for example, VARCHAR, INT64, DOUBLE, BOOL, DATE).\nThe accepted values depend on the underlying Cloud Data Warehouse." + }, + "type": { + "type": "string", + "enum": [ + "ATTRIBUTE", + "MEASURE" + ], + "description": "Semantic role of the column in ThoughtSpot. Use ATTRIBUTE for\ndimensional data such as text, dates, and identifiers, and\nMEASURE for numeric or aggregatable values." + } + }, + "description": "Schema definition for a single input column." + }, + "InputTableResponse": { + "type": "object", + "properties": { + "input_table_identifier": { + "type": "string", + "description": "Unique ID of the newly created input table.", + "nullable": true + } + } + }, + "InputTableUpdateResponse": { + "type": "object", + "properties": { + "rows_loaded": { + "type": "integer", + "format": "int32", + "description": "Number of rows successfully written to the input table.", + "nullable": true + } + }, + "description": "Response returned after successfully writing rows to an input table." + }, "PolicyProcessOptionsInput": { "type": "object", "properties": { @@ -21707,13 +25762,14 @@ "storage_type": { "type": "string", "enum": [ - "AWS_S3" + "AWS_S3", + "GCP_GCS" ], "description": "Type of storage destination.\nExample: \"AWS_S3\"" }, "storage_config": { "$ref": "#/components/schemas/StorageConfigInput", - "description": "Storage-specific configuration settings.\nExample: {\"aws_s3_config\": {\"bucket_name\": \"my-webhook-files\", \"region\": \"us-west-2\", \"role_arn\": \"arn:aws:iam::123456789012:role/ThoughtSpotDeliveryRole\", \"external_id\": \"ts-webhook-a1b2c3d4-7890\", \"path_prefix\": \"thoughtspot-webhooks/\"}}" + "description": "Storage-specific configuration settings.\nExample: {\"aws_s3_config\": {\"bucket_name\": \"my-webhook-files\", \"region\": \"us-west-2\", \"role_arn\": \"arn:aws:iam::123456789012:role/WebhookDeliveryRole\", \"external_id\": \"ts-webhook-a1b2c3d4-7890\", \"path_prefix\": \"webhook-deliveries/\"}}" } }, "description": "Input type for storage destination configuration." @@ -21723,7 +25779,12 @@ "properties": { "aws_s3_config": { "$ref": "#/components/schemas/AwsS3ConfigInput", - "description": "AWS S3 storage configuration.\nExample: {\"bucket_name\": \"my-webhook-files\", \"region\": \"us-west-2\", \"role_arn\": \"arn:aws:iam::123456789012:role/ThoughtSpotDeliveryRole\", \"external_id\": \"ts-webhook-a1b2c3d4-7890\", \"path_prefix\": \"thoughtspot-webhooks/\"}", + "description": "AWS S3 storage configuration.\nExample: {\"bucket_name\": \"my-webhook-files\", \"region\": \"us-west-2\", \"role_arn\": \"arn:aws:iam::123456789012:role/WebhookDeliveryRole\", \"external_id\": \"ts-webhook-a1b2c3d4-7890\", \"path_prefix\": \"webhook-deliveries/\"}", + "nullable": true + }, + "gcp_gcs_config": { + "$ref": "#/components/schemas/GcpGcsConfigInput", + "description": "GCP GCS storage configuration.\nExample: {\"bucket_name\": \"my-webhook-files\", \"service_account_email\": \"my-sa@my-project.iam.gserviceaccount.com\", \"path_prefix\": \"webhooks/\"}
Version: 26.7.0.cl or later", "nullable": true } }, @@ -21747,7 +25808,7 @@ }, "role_arn": { "type": "string", - "description": "ARN of the IAM role to assume for S3 access.\nExample: \"arn:aws:iam::123456789012:role/ThoughtSpotDeliveryRole\"" + "description": "ARN of the IAM role to assume for S3 access.\nExample: \"arn:aws:iam::123456789012:role/WebhookDeliveryRole\"" }, "external_id": { "type": "string", @@ -21756,12 +25817,35 @@ }, "path_prefix": { "type": "string", - "description": "Optional path prefix for organizing objects within the bucket.\nExample: \"thoughtspot-webhooks/\"", + "description": "Optional path prefix for organizing objects within the bucket.\nExample: \"webhook-deliveries/\"", "nullable": true } }, "description": "Input type for AWS S3 storage configuration." }, + "GcpGcsConfigInput": { + "type": "object", + "required": [ + "bucket_name", + "service_account_email" + ], + "properties": { + "bucket_name": { + "type": "string", + "description": "Name of the GCS bucket where webhook payloads will be stored.\nExample: \"my-webhook-files\"" + }, + "service_account_email": { + "type": "string", + "description": "Email of the GCP service account to impersonate for bucket access.\nThe platform's service account must be granted roles/iam.serviceAccountTokenCreator on this SA.\nExample: \"my-sa@my-project.iam.gserviceaccount.com\"" + }, + "path_prefix": { + "type": "string", + "description": "Optional path prefix for organizing objects within the bucket.\nExample: \"webhooks/\"", + "nullable": true + } + }, + "description": "Input type for GCP GCS storage configuration." + }, "WebhookKeyValuePairInput": { "type": "object", "required": [ @@ -21831,79 +25915,322 @@ "type": "string", "description": "Name of the webhook that failed to delete." }, - "error": { + "error": { + "type": "string", + "description": "Error message describing why the deletion failed." + } + } + }, + "CollectionMetadataInput": { + "type": "object", + "required": [ + "type", + "identifiers" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "LIVEBOARD", + "ANSWER", + "LOGICAL_TABLE", + "COLLECTION" + ], + "description": "Type of metadata object." + }, + "identifiers": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of unique IDs or names of metadata objects." + } + }, + "description": "Input type for metadata to be added to a collection." + }, + "CollectionDeleteResponse": { + "type": "object", + "properties": { + "metadata_deleted": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CollectionDeleteTypeIdentifiers" + }, + "description": "List of metadata objects that were successfully deleted.", + "nullable": true + }, + "metadata_skipped": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CollectionDeleteTypeIdentifiers" + }, + "description": "List of metadata objects that were skipped during deletion.\nObjects may be skipped due to lack of permissions, dependencies, or other constraints.", + "nullable": true + } + }, + "description": "Response object for delete collection operation." + }, + "CollectionDeleteTypeIdentifiers": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Type of the metadata object (e.g., Collection, Worksheet, Table).", + "nullable": true + }, + "identifiers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GenericInfo" + }, + "description": "List of metadata identifiers belonging to the given type.", + "nullable": true + } + }, + "description": "Group of metadata objects identified by type." + }, + "StyleResetOptionsInput": { + "type": "object", + "properties": { + "style": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "CHART_COLOR_PALETTE", + "EMBEDDED_FOOTER_TEXT", + "NAV_PANEL_COLOR", + "DEFAULT_LOGO", + "WIDE_LOGO" + ] + }, + "description": "Style fields to reset. Supported values: CHART_COLOR_PALETTE,\nEMBEDDED_FOOTER_TEXT, NAV_PANEL_COLOR, DEFAULT_LOGO, WIDE_LOGO.", + "nullable": true + }, + "visualization_areas": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "CHART_X_AXIS_LABELS", + "CHART_X_AXIS_TITLE", + "CHART_Y_AXIS_LABELS", + "CHART_Y_AXIS_TITLE", + "CHART_TOOLTIP", + "CHART_SCATTER_DATA_LABELS", + "CHART_DONUT_DATA_LABELS", + "CHART_LINE_DATA_LABELS", + "CHART_COLUMN_DATA_LABELS", + "CHART_BAR_DATA_LABELS", + "CHART_AREA_DATA_LABELS", + "TABLE_VALUE_CELLS" + ] + }, + "description": "Visualization areas whose font assignments should revert to the system\ndefault font.", + "nullable": true + } + }, + "description": "Fields to revert to defaults when operation is RESET." + }, + "NavigationPanelInput": { + "type": "object", + "properties": { + "theme": { + "type": "string", + "enum": [ + "DARK", + "TWO_TONE", + "CUSTOM" + ], + "description": "Color mode for the navigation panel. DARK applies the default dark theme.\nTWO_TONE applies a dual-tone style. CUSTOM enables a user-defined base\ncolor; base_color is required when theme is CUSTOM.", + "nullable": true + }, + "base_color": { + "type": "string", + "description": "Base color as a 6-digit hex string (e.g. \"#2359B6\"). Required when theme\nis CUSTOM.", + "nullable": true + } + }, + "description": "Navigation panel color configuration." + }, + "StyleColorPaletteInput": { + "type": "object", + "properties": { + "colors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/StyleColorEntryInput" + }, + "description": "Ordered array of exactly 8 color entries defining the chart color palette.", + "nullable": true + }, + "disable_color_rotation": { + "type": "boolean", + "description": "When true, disables automatic color rotation across chart data series.", + "nullable": true + } + }, + "description": "Chart color palette configuration." + }, + "StyleColorEntryInput": { + "type": "object", + "required": [ + "primary" + ], + "properties": { + "primary": { + "type": "string", + "description": "Primary color as a 6-digit hex string (e.g. \"#2359B6\"). Required." + }, + "secondary": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Array of exactly 4 secondary shade hex strings. If omitted, the server\nauto-generates 4 shades from the primary color. If provided, must contain\nexactly 4 valid 6-digit hex color strings.", + "nullable": true + } + }, + "description": "A single color entry in the chart color palette." + }, + "VisualizationFontsInput": { + "type": "object", + "properties": { + "chart_visualization_fonts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChartFontAssignmentInput" + }, + "description": "Font assignments for chart visualization areas. Provide only the areas to\nupdate; omitted areas remain unchanged.", + "nullable": true + }, + "table_visualization_fonts": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TableFontAssignmentInput" + }, + "description": "Font assignments for table visualization areas. Provide only the areas to\nupdate; omitted areas remain unchanged.", + "nullable": true + } + }, + "description": "Font assignments grouped by visualization type." + }, + "ChartFontAssignmentInput": { + "type": "object", + "required": [ + "visualization_area", + "font_identifier" + ], + "properties": { + "visualization_area": { + "type": "string", + "enum": [ + "CHART_X_AXIS_LABELS", + "CHART_X_AXIS_TITLE", + "CHART_Y_AXIS_LABELS", + "CHART_Y_AXIS_TITLE", + "CHART_TOOLTIP", + "CHART_SCATTER_DATA_LABELS", + "CHART_DONUT_DATA_LABELS", + "CHART_LINE_DATA_LABELS", + "CHART_COLUMN_DATA_LABELS", + "CHART_BAR_DATA_LABELS", + "CHART_AREA_DATA_LABELS" + ], + "description": "Chart visualization area to assign the font to." + }, + "font_identifier": { "type": "string", - "description": "Error message describing why the deletion failed." + "description": "UUID or name of the font to assign to this area." } - } + }, + "description": "Font assignment for a single chart visualization area." }, - "CollectionMetadataInput": { + "TableFontAssignmentInput": { "type": "object", "required": [ - "type", - "identifiers" + "visualization_area", + "font_identifier" ], "properties": { - "type": { + "visualization_area": { "type": "string", "enum": [ - "LIVEBOARD", - "ANSWER", - "LOGICAL_TABLE", - "COLLECTION" + "TABLE_VALUE_CELLS" ], - "description": "Type of metadata object." + "description": "Table visualization area to assign the font to." }, - "identifiers": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of unique IDs or names of metadata objects." + "font_identifier": { + "type": "string", + "description": "UUID or name of the font to assign to this area." } }, - "description": "Input type for metadata to be added to a collection." + "description": "Font assignment for a single table visualization area." }, - "CollectionDeleteResponse": { + "StyleFontUploadData": { "type": "object", + "required": [ + "id", + "name" + ], "properties": { - "metadata_deleted": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CollectionDeleteTypeIdentifiers" - }, - "description": "List of metadata objects that were successfully deleted.", - "nullable": true + "id": { + "type": "string", + "description": "Unique UUID identifier of the uploaded font." }, - "metadata_skipped": { + "name": { + "type": "string", + "description": "Display name of the uploaded font." + } + }, + "description": "Font data returned after a successful upload." + }, + "StyleFontDeleteData": { + "type": "object", + "properties": { + "affected_assignments": { "type": "array", "items": { - "$ref": "#/components/schemas/CollectionDeleteTypeIdentifiers" + "$ref": "#/components/schemas/StyleFontDeleteAffectedAssignment" }, - "description": "List of metadata objects that were skipped during deletion.\nObjects may be skipped due to lack of permissions, dependencies, or other constraints.", + "description": "Visualization areas that used the deleted font(s) and were automatically\nreset to the system default font. Empty if no areas were affected.", "nullable": true } }, - "description": "Response object for delete collection operation." + "description": "Result data for font deletion." }, - "CollectionDeleteTypeIdentifiers": { + "StyleFontDeleteAffectedAssignment": { "type": "object", "properties": { - "type": { - "type": "string", - "description": "Type of the metadata object (e.g., Collection, Worksheet, Table).", + "org": { + "$ref": "#/components/schemas/StyleOrgInfo", + "description": "Org context for this assignment. Present only when scope is ORG.", "nullable": true }, - "identifiers": { + "visualization_areas": { "type": "array", "items": { - "$ref": "#/components/schemas/GenericInfo" + "type": "string", + "enum": [ + "CHART_X_AXIS_LABELS", + "CHART_X_AXIS_TITLE", + "CHART_Y_AXIS_LABELS", + "CHART_Y_AXIS_TITLE", + "CHART_TOOLTIP", + "CHART_SCATTER_DATA_LABELS", + "CHART_DONUT_DATA_LABELS", + "CHART_LINE_DATA_LABELS", + "CHART_COLUMN_DATA_LABELS", + "CHART_BAR_DATA_LABELS", + "CHART_AREA_DATA_LABELS", + "TABLE_VALUE_CELLS" + ] }, - "description": "List of metadata identifiers belonging to the given type.", + "description": "Visualization areas that used the deleted font and were automatically reset\nto the system default font.", "nullable": true } }, - "description": "Group of metadata objects identified by type." + "description": "A visualization area assignment affected by a font deletion." }, "Runtime_Filter": { "type": "object", @@ -21980,7 +26307,7 @@ "type": "object", "properties": { "query": { - "description": "User query used to suggest data sources.", + "description": "User query used to suggest data sources. Must be a non-empty string.", "type": "string" } }, @@ -22022,7 +26349,7 @@ "nullable": true }, "query": { - "description": "A user query that requires breaking down into smaller, more manageable analytical questions to facilitate better understanding and analysis.", + "description": "A user query that requires breaking down into smaller, more manageable analytical questions to facilitate better understanding and analysis. Must be a non-empty string.", "type": "string" }, "ai_context": { @@ -22171,6 +26498,18 @@ "message" ] }, + "SetAgentInstructionsRequest": { + "type": "object", + "properties": { + "instructions": { + "description": "The admin instructions text to set for the agent.", + "type": "string" + } + }, + "required": [ + "instructions" + ] + }, "SetNLInstructionsRequest": { "type": "object", "properties": { @@ -22208,6 +26547,15 @@ "metadata_identifier" ] }, + "UpdateConversationRequest": { + "type": "object", + "properties": { + "title": { + "description": "New display title for the conversation. Omit to leave the title\nunchanged.", + "type": "string" + } + } + }, "ConfigureAuthSettingsRequest": { "type": "object", "properties": { @@ -23841,7 +28189,7 @@ "type": "string" }, "privileges": { - "description": "Privileges to assign to the group", + "description": "Privileges to assign to the group. Note: AUTHORING is a no-op — always inherited via ALL_GROUP, assigning it has no effect.", "type": "array", "items": { "type": "string", @@ -23880,7 +28228,8 @@ "CAN_SETUP_VERSION_CONTROL", "CAN_DOWNLOAD_VISUALS", "CAN_DOWNLOAD_DETAILED_DATA", - "CAN_USE_SPOTTER" + "CAN_USE_SPOTTER", + "CAN_MANAGE_SPOTTER" ] } }, @@ -24038,7 +28387,8 @@ "CAN_MANAGE_WEBHOOKS", "CAN_DOWNLOAD_VISUALS", "CAN_DOWNLOAD_DETAILED_DATA", - "CAN_USE_SPOTTER" + "CAN_USE_SPOTTER", + "CAN_MANAGE_SPOTTER" ] } }, @@ -24138,7 +28488,7 @@ "type": "string" }, "privileges": { - "description": "Privileges to assign to the group.", + "description": "Privileges to assign to the group. Note: AUTHORING is a no-op — always inherited via ALL_GROUP, assigning it has no effect.", "type": "array", "items": { "type": "string", @@ -24177,7 +28527,8 @@ "CAN_SETUP_VERSION_CONTROL", "CAN_DOWNLOAD_VISUALS", "CAN_DOWNLOAD_DETAILED_DATA", - "CAN_USE_SPOTTER" + "CAN_USE_SPOTTER", + "CAN_MANAGE_SPOTTER" ] } }, @@ -24232,6 +28583,58 @@ } } }, + "CreateInputTableRequest": { + "type": "object", + "properties": { + "table_name": { + "description": "Physical table name to create in the external warehouse.", + "type": "string" + }, + "model_identifier": { + "description": "Unique ID or name of the model (worksheet) to link the\ninput table to.", + "type": "string" + }, + "table_definition": { + "description": "Definition of the input table, including new columns\nand referenced model columns.", + "allOf": [ + { + "$ref": "#/components/schemas/InputTableDefinitionInput" + } + ] + } + }, + "required": [ + "table_name", + "model_identifier", + "table_definition" + ] + }, + "UpdateInputTableRequest": { + "type": "object", + "properties": { + "columns": { + "description": "Names of the columns being written, in the same order as\nthe values in each row.", + "type": "array", + "items": { + "type": "string" + } + }, + "rows": { + "description": "Rows to write into the input table. Each row is an array\nof string values aligned positionally with columns.", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "required": [ + "columns", + "rows" + ] + }, "SearchChannelHistoryRequest": { "type": "object", "properties": { @@ -24277,6 +28680,11 @@ "description": "Filter records created on or after this time (epoch milliseconds).", "type": "number", "format": "float" + }, + "end_epoch_time_in_millis": { + "description": "Filter records created before this time (epoch milliseconds).
Version: 26.7.0.cl or later", + "type": "number", + "format": "float" } }, "required": [ @@ -24314,6 +28722,34 @@ "log_type" ] }, + "DeleteManualTranslationsRequest": { + "type": "object", + "properties": { + "scope": { + "description": "Org scope for the delete. `ORG` (default) targets the calling\nuser's current org. `CLUSTER` targets the All-Org context.", + "default": "ORG", + "type": "string", + "enum": [ + "ORG", + "CLUSTER" + ] + } + } + }, + "ExportManualTranslationsRequest": { + "type": "object", + "properties": { + "scope": { + "description": "Org scope for the export. `ORG` (default) targets the calling\nuser's current org. `CLUSTER` targets the All-Org context.", + "default": "ORG", + "type": "string", + "enum": [ + "ORG", + "CLUSTER" + ] + } + } + }, "ConvertWorksheetToModelRequest": { "type": "object", "properties": { @@ -24638,6 +29074,12 @@ "default": false, "type": "boolean", "nullable": true + }, + "enable_personalized_view_upsert": { + "description": "
Version: 26.8.0.cl or later
\n\nBoolean flag to enable update/insert of personalized views in liveboard.", + "default": false, + "type": "boolean", + "nullable": true } }, "required": [ @@ -24688,6 +29130,12 @@ "default": false, "type": "boolean", "nullable": true + }, + "enable_personalized_view_upsert": { + "description": "
Version: 26.8.0.cl or later
\n\nBoolean flag to enable update/insert of personalized views in liveboard.", + "default": false, + "type": "boolean", + "nullable": true } }, "required": [ @@ -25283,7 +29731,7 @@ "type": "string" }, "privileges": { - "description": "Privileges granted to the Role. See [Documentation](https://developers.thoughtspot.com/docs/rbac#_role_categories_and_privileges)for supported roles privileges.", + "description": "Privileges granted to the Role. See [Documentation](https://developers.thoughtspot.com/docs/rbac#_role_categories_and_privileges)for supported roles privileges. Note: AUTHORING is a no-op — always inherited via ALL_GROUP, assigning it has no effect.", "type": "array", "items": { "type": "string", @@ -25329,7 +29777,8 @@ "CAN_MANAGE_WEBHOOKS", "CAN_DOWNLOAD_VISUALS", "CAN_DOWNLOAD_DETAILED_DATA", - "CAN_USE_SPOTTER" + "CAN_USE_SPOTTER", + "CAN_MANAGE_SPOTTER" ] } }, @@ -25427,7 +29876,8 @@ "CAN_MANAGE_WEBHOOKS", "CAN_DOWNLOAD_VISUALS", "CAN_DOWNLOAD_DETAILED_DATA", - "CAN_USE_SPOTTER" + "CAN_USE_SPOTTER", + "CAN_MANAGE_SPOTTER" ] } }, @@ -25476,7 +29926,7 @@ "type": "string" }, "privileges": { - "description": "Privileges granted to the role. See [Documentation](https://developers.thoughtspot.com/docs/rbac#_role_categories_and_privileges)for supported roles privileges.", + "description": "Privileges granted to the role. See [Documentation](https://developers.thoughtspot.com/docs/rbac#_role_categories_and_privileges)for supported roles privileges. Note: AUTHORING is a no-op — always inherited via ALL_GROUP, assigning it has no effect.", "type": "array", "items": { "type": "string", @@ -25520,7 +29970,8 @@ "CAN_MANAGE_WEBHOOKS", "CAN_DOWNLOAD_VISUALS", "CAN_DOWNLOAD_DETAILED_DATA", - "CAN_USE_SPOTTER" + "CAN_USE_SPOTTER", + "CAN_MANAGE_SPOTTER" ] } } @@ -27385,6 +31836,130 @@ "column_security_rules" ] }, + "DeleteStyleFontsRequest": { + "type": "object", + "properties": { + "scope": { + "description": "Scope of the font library to delete from. CLUSTER deletes from the\ncluster-level library. ORG deletes from the authenticated user's org\nlibrary. Defaults to ORG if omitted.", + "default": "ORG", + "type": "string", + "enum": [ + "CLUSTER", + "ORG" + ] + }, + "font_identifiers": { + "description": "UUIDs or names of the fonts to delete. At least one identifier is\nrequired.", + "type": "array", + "items": { + "type": "string" + } + }, + "dry_run": { + "description": "When true, returns affected assignments without applying the deletion.\nUse this to preview the impact before committing. Defaults to true if\nomitted.", + "default": true, + "type": "boolean", + "nullable": true + } + }, + "required": [ + "font_identifiers" + ] + }, + "ExportStyleLogosRequest": { + "type": "object", + "properties": { + "scope": { + "description": "Scope of the logos to export. CLUSTER exports cluster-level logos. ORG\nexports logos for the authenticated user's org, falling back to cluster\nor defaults if no custom logo is set. Defaults to ORG if\nomitted.", + "default": "ORG", + "type": "string", + "enum": [ + "CLUSTER", + "ORG" + ] + } + } + }, + "SearchStyleCustomizationsRequest": { + "type": "object", + "properties": { + "scope": { + "description": "Scope of the style preferences to retrieve. CLUSTER returns cluster-level\ndefaults. ORG returns preferences for the authenticated user's org, which\nmay override cluster defaults. If not specified, returns both cluster and\norg preferences based on user privileges.", + "type": "string", + "enum": [ + "CLUSTER", + "ORG" + ] + } + } + }, + "SearchStyleFontsRequest": { + "type": "object", + "properties": { + "scope": { + "description": "Scope of the font library to search. CLUSTER searches the cluster-level\nlibrary. ORG searches the authenticated user's org library. Returns both Cluster and Org\nlevel font if omitted.", + "type": "string", + "enum": [ + "CLUSTER", + "ORG" + ] + }, + "font_identifier": { + "description": "Filter by UUID or name of a specific font.", + "type": "string" + }, + "name_pattern": { + "description": "Filter by font display name. Supports partial, case-insensitive matching.", + "type": "string" + }, + "include_font_assignments": { + "description": "When true, includes visualization areas this font is assigned to in the\nresponse. Defaults to false if omitted.", + "default": false, + "type": "boolean", + "nullable": true + } + } + }, + "UpdateStyleFontRequest": { + "type": "object", + "properties": { + "scope": { + "description": "Scope of the font library containing this font. CLUSTER targets the\ncluster-level library. ORG targets the authenticated user's org library.\nDefaults to ORG if omitted.", + "default": "ORG", + "type": "string", + "enum": [ + "CLUSTER", + "ORG" + ] + }, + "name": { + "description": "New display name for the font. Must be unique within the target scope.", + "type": "string" + }, + "weight": { + "description": "New weight for the font. Supported values: NORMAL, LIGHT, BOLD.", + "type": "string", + "enum": [ + "NORMAL", + "LIGHT", + "BOLD" + ] + }, + "style": { + "description": "New style for the font. Supported values: NORMAL, ITALIC, OBLIQUE.", + "type": "string", + "enum": [ + "NORMAL", + "ITALIC", + "OBLIQUE" + ] + }, + "color": { + "description": "New color for the font as a 6-digit hex string (e.g. \"#333333\"). Returns\nan error if the value is malformed.", + "type": "string" + } + } + }, "ConfigureCommunicationChannelPreferencesRequest": { "type": "object", "properties": { @@ -27959,7 +32534,8 @@ "CAN_MANAGE_WEBHOOKS", "CAN_DOWNLOAD_VISUALS", "CAN_DOWNLOAD_DETAILED_DATA", - "CAN_USE_SPOTTER" + "CAN_USE_SPOTTER", + "CAN_MANAGE_SPOTTER" ] } }, @@ -28655,7 +33231,7 @@ ] }, "storage_destination": { - "description": "Configuration for storage destination.\nExample: {\"storage_type\": \"AWS_S3\", \"storage_config\": {\"aws_s3_config\": {\"bucket_name\": \"my-webhook-files\", \"region\": \"us-west-2\", \"role_arn\": \"arn:aws:iam::123456789012:role/ThoughtSpotDeliveryRole\", \"external_id\": \"ts-webhook-a1b2c3d4-7890\", \"path_prefix\": \"thoughtspot-webhooks/\"}}}
Version: 26.3.0.cl or later", + "description": "Configuration for storage destination.\nAWS S3 example: {\"storage_type\": \"AWS_S3\", \"storage_config\": {\"aws_s3_config\": {\"bucket_name\": \"my-webhook-files\", \"region\": \"us-west-2\", \"role_arn\": \"arn:aws:iam::123456789012:role/ThoughtSpotDeliveryRole\", \"external_id\": \"ts-webhook-a1b2c3d4-7890\", \"path_prefix\": \"thoughtspot-webhooks/\"}}}\nGCP GCS example: {\"storage_type\": \"GCP_GCS\", \"storage_config\": {\"gcp_gcs_config\": {\"bucket_name\": \"my-webhook-files\", \"service_account_email\": \"my-sa@my-project.iam.gserviceaccount.com\", \"path_prefix\": \"webhooks/\"}}}
Version: 26.3.0.cl or later", "allOf": [ { "$ref": "#/components/schemas/StorageDestinationInput" @@ -28668,6 +33244,14 @@ "items": { "$ref": "#/components/schemas/WebhookKeyValuePairInput" } + }, + "status": { + "description": "Status of the webhook (ENABLED or DISABLED). Optional — when omitted,\nstatus is not stored and will be absent from the response.
Version: 26.7.0.cl or later", + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] } }, "required": [ @@ -28728,6 +33312,14 @@ "$ref": "#/components/schemas/WebhookSortOptionsInput" } ] + }, + "status": { + "description": "Filter webhooks by status (ENABLED or DISABLED).
Version: 26.7.0.cl or later", + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] } } }, @@ -28777,7 +33369,7 @@ ] }, "storage_destination": { - "description": "Configuration for storage destination.\nExample: {\"storage_type\": \"AWS_S3\", \"storage_config\": {\"aws_s3_config\": {\"bucket_name\": \"my-webhook-files\", \"region\": \"us-west-2\", \"role_arn\": \"arn:aws:iam::123456789012:role/ThoughtSpotDeliveryRole\", \"external_id\": \"ts-webhook-a1b2c3d4-7890\", \"path_prefix\": \"thoughtspot-webhooks/\"}}}
Version: 26.3.0.cl or later", + "description": "Configuration for storage destination.\nAWS S3 example: {\"storage_type\": \"AWS_S3\", \"storage_config\": {\"aws_s3_config\": {\"bucket_name\": \"my-webhook-files\", \"region\": \"us-west-2\", \"role_arn\": \"arn:aws:iam::123456789012:role/ThoughtSpotDeliveryRole\", \"external_id\": \"ts-webhook-a1b2c3d4-7890\", \"path_prefix\": \"thoughtspot-webhooks/\"}}}\nGCP GCS example: {\"storage_type\": \"GCP_GCS\", \"storage_config\": {\"gcp_gcs_config\": {\"bucket_name\": \"my-webhook-files\", \"service_account_email\": \"my-sa@my-project.iam.gserviceaccount.com\", \"path_prefix\": \"webhooks/\"}}}
Version: 26.3.0.cl or later", "allOf": [ { "$ref": "#/components/schemas/StorageDestinationInput" @@ -28790,6 +33382,26 @@ "items": { "$ref": "#/components/schemas/WebhookKeyValuePairInput" } + }, + "status": { + "description": "Status of the webhook (ENABLED or DISABLED).
Version: 26.7.0.cl or later", + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "reset_options": { + "description": "List of optional configuration sections to clear. Each value removes the\ncorresponding configuration entirely from the webhook: AUTHENTICATION\nremoves the authentication config, SIGNATURE_VERIFICATION removes the\nsignature verification config, STORAGE_DESTINATION removes the storage\ndestination config.
Version: 26.7.0.cl or later", + "type": "array", + "items": { + "type": "string", + "enum": [ + "AUTHENTICATION", + "SIGNATURE_VERIFICATION", + "STORAGE_DESTINATION" + ] + } } } }