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: '
The 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: ''
'201':
description: Common error response
content:
application/json:
schema:
type: object
'400':
description: Operation failed
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: Operation failed
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/api/rest/2.0/ai/agent/conversation/{conversation_identifier}/send/stream:
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"
tags:
- AI
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SendAgentConversationMessageStreamingRequest'
required: true
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/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: '
I 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
'201':
description: Common error response
content:
application/json:
schema:
$ref: '#/components/schemas/SendAgentMessageResponse'
'400':
description: Operation failed
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: Operation failed
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
x-streaming: true
/api/rest/2.0/ai/agent/{conversation_identifier}/converse:
post:
operationId: sendAgentMessage
description: '
Beta Version: 26.2.0.cl or later
**Deprecated** — Use `sendAgentConversationMessage` instead.
Send natural language messages to an existing Spotter agent conversation and returns the complete response synchronously.
Requires `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.
#### Usage guidelines
The request must include:
- `conversation_identifier`: the unique session ID returned by `createAgentConversation`, used for context continuity and message tracking
- `messages`: an array of one or more text messages to send to the agent
The API returns an array of response objects, each containing:
- `type`: the kind of response — `text`, `answer`, or `error`
- `message`: the main content of the response
- `metadata`: additional information depending on the message type (e.g., answer metadata includes analytics and visualization details)
#### Error responses
| Code | Description |
|------|----------------------------------------------------------------------------------------------------------------------------------|
| 401 | Unauthorized — authentication token is missing, expired, or invalid. |
| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks permission on the referenced conversation. |
> ###### Note:
>
> - This endpoint is deprecated. Use `sendAgentConversationMessage` for new integrations.
> - This endpoint is currently in Beta. Breaking changes may be introduced before the endpoint is made Generally Available.
> - This endpoint requires Spotter - please contact ThoughtSpot support to enable Spotter on your cluster.
#### Endpoint URL
'
deprecated: true
tags:
- AI
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SendAgentMessageRequest'
required: true
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:
type: object
'201':
description: Common error response
content:
application/json:
schema:
type: object
'400':
description: Operation failed
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: Operation failed
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/api/rest/2.0/ai/agent/converse/sse:
post:
operationId: sendAgentMessageStreaming
description: '
Beta Version: 26.2.0.cl or later
**Deprecated** — Use `sendAgentConversationMessageStreaming` instead.
Sends one or more natural language messages to an existing Spotter agent conversation and returns the response as a real-time Server-Sent Events stream.
Requires `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.
#### Usage guidelines
The request must include:
- `conversation_identifier`: the unique session ID returned by `createAgentConversation`, used for context continuity and message tracking
- `messages`: an array of one or more text messages to send to the agent
If 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:
- `ack`: confirms receipt of the request (`node_id`)
- `conv_title`: conversation title (`title`, `conv_id`)
- `notification`: status updates on operations (`group_id`, `metadata`, `code` — e.g. `TOOL_CALL_NOTIFICATION`, `nls_start`, `FINAL_RESPONSE_NOTIFICATION`)
- `text-chunk`: incremental content chunks (`id`, `group_id`, `metadata` with `format` and `type` such as `thinking` or `text`, `content`)
- `text`: full text block with same structure as `text-chunk`
- `answer`: structured answer with metadata (`id`, `group_id`, `metadata` with `sage_query`, `session_id`, `title`, etc., `title`)
- `error`: if a failure occurs
#### Error responses
| Code | Description |
|------|----------------------------------------------------------------------------------------------------------------------------------|
| 401 | Unauthorized — authentication token is missing, expired, or invalid. |
| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks permission on the referenced conversation. |
> ###### Note:
>
> - This endpoint is deprecated. Use `sendAgentConversationMessageStreaming` for new integrations.
> - This endpoint is currently in Beta. Breaking changes may be introduced before the endpoint is made Generally Available.
> - This endpoint requires Spotter - please contact ThoughtSpot support to enable Spotter on your cluster.
> - The streaming protocol uses Server-Sent Events (SSE).
#### Endpoint URL
'
deprecated: true
tags:
- AI
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SendAgentMessageStreamingRequest'
required: true
parameters: []
responses:
'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: Operation failed
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: Operation failed
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
x-streaming: true
/api/rest/2.0/ai/conversation/{conversation_identifier}/converse:
post:
operationId: sendMessage
description: '
Beta Version: 10.4.0.cl or later
Sends a follow-up message to an existing conversation within the context of a data model.
Requires `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.
#### Usage guidelines
The request must include:
- `conversation_identifier`: the unique session ID returned by `createConversation`
- `metadata_identifier`: the unique ID of the data source used for the conversation
- `message`: a natural language string with the follow-up question
If the request is successful, the API returns an array of response messages, each containing:
- `session_identifier`: the unique ID of the generated response
- `generation_number`: the generation number of the response
- `message_type`: the type of the response (e.g., `TSAnswer`)
- `visualization_type`: the generated visualization type (`Chart`, `Table`, or `Undefined`)
- `tokens` / `display_tokens`: the search tokens and user-friendly display tokens for the response
#### Error responses
| Code | Description |
|------|-----------------------------------------------------------------------------------------------------------------------------------------|
| 401 | Unauthorized — authentication token is missing, expired, or invalid. |
| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks view permission on the specified metadata object. |
> ###### Note:
> * This endpoint is currently in Beta. Breaking changes may be introduced before the endpoint is made Generally Available.
> * This endpoint requires Spotter - please contact ThoughtSpot support to enable Spotter on your cluster.
#### Endpoint URL
'
tags:
- AI
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.
responses:
'200':
description: Common successful response
content:
application/json:
schema:
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: Operation failed
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: Operation failed
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/api/rest/2.0/ai/agent/instructions/set:
put:
operationId: setAgentInstructions
description: '
Beta Version: 26.6.0.cl or later
Creates 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).
Requires admin privileges. Only users with org admin access can set agent instructions.
#### Usage guidelines
The request must include:
- `instructions`: the instructions text to apply to the agent (maximum 5000 characters)
Instructions 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.
If the request is successful, the response includes the saved `AgentInstructions` record:
- `id`: unique identifier of the record
- `instructions`: the saved instructions text
- `created_at`: ISO timestamp when the instructions were first created
- `updated_at`: ISO timestamp of this update
- `last_updated_by`: user ID of the admin who performed this update
#### Error responses
| Code | Description |
|------|-------------|
| 400 | Bad request — the request body is missing required fields or the `instructions` field exceeds the maximum allowed length of 5000 characters. |
| 401 | Unauthorized — authentication token is missing, expired, or invalid. |
| 403 | Forbidden — the authenticated user does not have org admin privileges required to set agent instructions. |
| 409 | Conflict — the provided instructions conflict with system guardrails. Review and revise the instructions text before retrying. |
| 500 | Internal server error. |
> ###### Note:
>
> - This operation uses upsert semantics: it creates the instructions record if none exists, or replaces the existing one.
> - Instructions take effect immediately for new conversations created after the update.
> - Use `getAgentInstructions` to retrieve the current instructions before making changes.
> - Available from version 26.6.0.cl and later.
#### Endpoint URL
'
tags:
- AI
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SetAgentInstructionsRequest'
required: true
parameters: []
responses:
'200':
description: Common successful response
content:
application/json:
schema:
$ref: '#/components/schemas/AgentInstructions'
'201':
description: Common error response
content:
application/json:
schema:
$ref: '#/components/schemas/AgentInstructions'
'400':
description: Operation failed
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: Operation failed
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/api/rest/2.0/ai/instructions/set:
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"
tags:
- AI
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SetNLInstructionsRequest'
required: true
parameters: []
responses:
'200':
description: Common successful response
content:
application/json:
schema:
$ref: '#/components/schemas/eureka_SetNLInstructionsResponse'
'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'
'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: Operation failed
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/api/rest/2.0/ai/agent/conversations/{conversation_identifier}/share:
post:
operationId: shareConversation
description: "\nGrants or revokes access to a shared conversation for one or more principals\n(users or groups). When principals are added, a read-only shared view of the\nconversation is created from its current state. Use `refresh_shared_content`\nto regenerate the shared view with the latest conversation content.\nRequires `CAN_USE_SPOTTER` privilege and ownership of the specified conversation.
Version: 26.9.0.cl or later\n\nGrants or revokes access to a shared conversation for one or more principals (users or groups). When principals are added, a read-only shared view of the conversation is created from its current state. The shared view is a point-in-time copy — use `refresh_shared_content` to regenerate it with the latest conversation content.\n\nRequires ownership of the specified conversation. Only the user who created the conversation can manage its share access.\n\n#### Usage guidelines\n\nThe conversation to share is identified by the `{conversation_identifier}` URL path parameter. At least one of the following must be true: `grant` is non-empty, `revoke` is non-empty, or `refresh_shared_content` is `true`. A principal cannot appear in both lists in the same request.\n\n| Field | Type | Default | Description |\n| --- | --- | --- | --- |\n| `refresh_shared_content` | `Boolean` | `false` | When `true`, always regenerates the shared view from the latest conversation state, even if a shared view already exists. When `false`, reuses the existing shared view. |\n| `grant` | `PrincipalRefInput[]` | `[]` | Principals to grant read-only access. |\n| `revoke` | `PrincipalRefInput[]` | `[]` | Principals to revoke access from. |\n| `notify_on_share` | `Boolean` | `true` | *(available from 26.10.0.cl)* When `true`, newly granted principals are notified of the share. When `false`, access is granted without sending a notification. Has no effect on principals passed in `revoke`, and does not re-notify a principal who already had access. |\n\n#### PrincipalRefInput fields\n\n| Field | Type | Description |\n| --- | --- | --- |\n| `principal_identifier` | `String` | Unique identifier of the user or group. |\n| `principal_type` | `Principals` | `USER` for individual users, `USER_GROUP` for groups. |\n\n#### Example request — granting access\n\n```bash\nPOST /api/rest/2.0/ai/agent/conversations/{conversation_identifier}/share\n```\n\n```json\n{\n \"refresh_shared_content\": false,\n \"grant\": [\n { \"principal_identifier\": \"user-001\", \"principal_type\": \"USER\" },\n { \"principal_identifier\": \"group-001\", \"principal_type\": \"USER_GROUP\" }\n ],\n \"revoke\": [],\n \"notify_on_share\": true\n}\n```\n\n#### Example request — revoking access\n\n```json\n{\n \"refresh_shared_content\": false,\n \"grant\": [],\n \"revoke\": [\n { \"principal_identifier\": \"user-001\", \"principal_type\": \"USER\" }\n ]\n}\n```\n\nSet `refresh_shared_content: true` with empty `grant` and `revoke` to regenerate the shared snapshot for existing recipients without changing access. Combine with non-empty `grant` or `revoke` to update access and refresh the snapshot in a single call.\n\n#### Error responses\n\n| Code | Description |\n| --- | --- |\n| 401 | Unauthorized — authentication token is missing, expired, or invalid. |\n| 403 | Forbidden — the caller does not own the specified conversation, or does not have `CAN_USE_SPOTTER` privilege. |\n| 404 | Not Found — no conversation exists with the given identifier for the authenticated user. |\n| 422 | Unprocessable — `refresh_shared_content` is `false` and both `grant` and `revoke` are empty, or a principal appears in both lists. |\n\n> ###### Note:\n>\n> - The shared view is a read-only snapshot of the conversation at the time of sharing. Recipients cannot send messages or modify the conversation.\n> - Use `getShareInfo` to check whether the shared view is outdated relative to the current conversation state.\n> - `notify_on_share: false` only suppresses the share notification; access is still granted.\n> - This endpoint requires Spotter — please contact ThoughtSpot Support to enable Spotter on your cluster.\nVersion: 26.9.0.cl or later\n\n\n\n\n#### Endpoint URL\n"
tags:
- AI
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ShareConversationRequest'
required: true
parameters:
- in: path
name: conversation_identifier
required: true
schema:
type: string
description: Unique identifier of the conversation to share.
responses:
'204':
description: Successfully updated the share access for the conversation.
'400':
description: Operation failed
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: Operation failed
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/api/rest/2.0/ai/answer/create:
post:
operationId: singleAnswer
description: '
Beta Version: 10.4.0.cl or later
Processes a natural language query against a specified data model and returns a single AI-generated answer without requiring a conversation session.
Requires `CAN_USE_SPOTTER` privilege and at least view access to the metadata object specified in the request.
#### Usage guidelines
The request must include:
- `query`: a natural language question (e.g., "What were total sales last quarter?")
- `metadata_identifier`: the unique ID of the data source to query against
If the request is successful, the API returns a response message containing:
- `session_identifier`: the unique ID of the generated response
- `generation_number`: the generation number of the response
- `message_type`: the type of the response (e.g., `TSAnswer`)
- `visualization_type`: the generated visualization type (`Chart`, `Table`, or `Undefined`)
- `tokens` / `display_tokens`: the search tokens and user-friendly display tokens for the response
#### Error responses
| Code | Description |
|------|-----------------------------------------------------------------------------------------------------------------------------------------|
| 401 | Unauthorized — authentication token is missing, expired, or invalid. |
| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks view permission on the specified metadata object. |
> ###### Note:
> * This endpoint is currently in Beta. Breaking changes may be introduced before the endpoint is made Generally Available.
> * This endpoint requires Spotter - please contact ThoughtSpot support to enable Spotter on your cluster.
#### Endpoint URL
'
tags:
- AI
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SingleAnswerRequest'
required: true
parameters: []
responses:
'200':
description: Common successful response
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseMessage'
'201':
description: Common error response
content:
application/json:
schema:
$ref: '#/components/schemas/ResponseMessage'
'400':
description: Operation failed
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: Operation failed
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/api/rest/2.0/ai/agent/conversation/{conversation_identifier}/stop-response:
post:
operationId: stopConversation
description: '
Stops an in-progress agent conversation response.
Version: 26.6.0.cl or later
Version: 26.6.0.cl or later
Stops 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.
Requires `CAN_USE_SPOTTER` privilege and access to the specified conversation.
#### Usage guidelines
The request must include:
- `conversation_identifier` *(path parameter)*: the unique ID of the conversation whose active response should be stopped, as returned by `createAgentConversation`
A 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.
After stopping a response, the conversation session remains active. You can continue sending messages using `sendAgentConversationMessage` or `sendAgentConversationMessageStreaming`.
#### Example request
```bash
POST /api/rest/2.0/ai/agent/conversation/{conversation_identifier}/stop-response
```
#### Typical usage scenario
This endpoint is useful when integrating Spotter into a chat UI where users can cancel a long-running query. For example:
1. User sends a message via `sendAgentConversationMessageStreaming`.
2. User clicks a "Stop generating" button while the response is streaming.
3. Your client calls `stopConversation` with the active `conversation_identifier`.
4. The stream is terminated and the user can ask a new question.
#### Error responses
| Code | Description |
|------|-------------|
| 401 | Unauthorized — authentication token is missing, expired, or invalid. |
| 403 | Forbidden — the authenticated user does not have `CAN_USE_SPOTTER` privilege or lacks access to the specified conversation. |
> ###### Note:
>
> - Calling this endpoint when no response is in progress does not return an error.
> - The conversation context is preserved after stopping — previous messages and answers remain accessible.
> - Available from version 26.6.0.cl and later.
> - This endpoint requires Spotter — please contact ThoughtSpot Support to enable Spotter on your cluster.
> - This feature is available only for **Spotter 3** (`SPOTTER3`) version.
#### Endpoint URL
'
tags:
- AI
parameters:
- in: path
name: conversation_identifier
required: true
schema:
type: string
description: Unique identifier of the conversation to stop.
responses:
'204':
description: Successfully stopped the in-progress agent conversation response for the given.
'400':
description: Operation failed
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: Operation failed
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/api/rest/2.0/ai/agent/conversations/{conversation_identifier}/update:
post:
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:
- AI
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateConversationRequest'
required: true
parameters:
- in: path
name: conversation_identifier
required: true
schema:
type: string
description: Unique identifier of the conversation to update.
responses:
'204':
description: Successfully updated the agent conversation.
'400':
description: Operation failed
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: Operation failed
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
components:
schemas:
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
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: User specific instructions for processing the @query.
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
GetRelevantQuestionsRequest:
type: object
properties:
metadata_context:
description: metadata for the query to enable generation of relevant sub-questions; at least one context identifier is required.
allOf:
- $ref: '#/components/schemas/MetadataContext'
limit_relevant_questions:
description: Maximum number of relevant questions that is allowed in the response, default = 5.
type: integer
format: int32
bypass_cache:
description: If true, results are not returned from cache & calculated every time.
type: boolean
nullable: true
query:
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:
description: Additional context to guide the response.
allOf:
- $ref: '#/components/schemas/AIContext'
required:
- metadata_context
- query
AgentConversation:
type: object
required:
- conversation_id
- conversation_identifier
properties:
conversation_id:
type: string
description: Unique identifier of the conversation.
conversation_identifier:
type: string
description: 'Unique identifier of the conversation.
Version: 26.5.0.cl or later'
AgentConversationHistoryResponse:
type: object
properties:
conversations:
type: array
items:
$ref: '#/components/schemas/AgentConversationList'
description: List of saved agent conversations for the current user.
nullable: true
has_more:
type: boolean
description: 'Whether additional conversations exist beyond this page. `true` when one or
more conversations remain after the current page; `false` when the current
page is the last. Use `offset` to fetch the next page.'
nullable: true
description: Response returned by getConversationList.
ImportMemoryRequest:
type: object
properties:
content:
description: 'The full serialized memory payload to import (YAML) —
typically a previous `exportMemory` response''s `content`, edited
locally and re-submitted.'
type: string
dry_run:
description: 'Required. When `true`, validate the payload and return preview
counts and row failures without writing anything. Pass `false` to
apply the import. The caller must choose explicitly so
a real import is never triggered by omission.'
type: boolean
required:
- content
- dry_run
eureka_LLMDecomposeQueryResponse:
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.
nullable: true
NLInstructionsInfoInput:
type: object
required:
- instructions
- scope
properties:
instructions:
type: array
items:
type: string
description: User instructions for natural language processing.
scope:
type: string
enum:
- GLOBAL
description: Scope of the instruction (USER or GLOBAL). Defaults to GLOBAL.
eureka_RelevantQuestion:
type: object
properties:
query:
type: string
description: NL query that can be run using spotter aka natural language search to get an AI generated answer.
nullable: true
data_source_identifier:
type: string
description: Unique identifier of the data source on which this query can be run on.
nullable: true
data_source_name:
type: string
description: Display name of the data source on which this query can be run on.
nullable: true
SingleAnswerRequest:
type: object
properties:
query:
description: A natural language query string to generate the Answer.
type: string
metadata_identifier:
description: ID of the metadata object, such as a Worksheet or Model, to use as a data source for the query.
type: string
required:
- query
- metadata_identifier
CreateAgentConversationRequest:
type: object
properties:
metadata_context:
description: Context for the conversation.
allOf:
- $ref: '#/components/schemas/ContextPayloadV2Input'
conversation_settings:
description: Conversation settings.
allOf:
- $ref: '#/components/schemas/ConversationSettingsInput'
required:
- metadata_context
- conversation_settings
ACState:
type: object
properties:
transaction_identifier:
type: string
description: Unique identifier of the transaction.
nullable: true
generation_number:
type: integer
format: int32
description: Generation number of the transaction.
nullable: true
SendAgentMessageStreamingRequest:
type: object
properties:
conversation_identifier:
description: Unique identifier for the conversation (used to track context)
type: string
messages:
description: messages to be sent to the agent
type: array
items:
type: string
required:
- conversation_identifier
- messages
ErrorResponse:
type: object
properties:
error:
type: object
nullable: true
ContextPayloadV2Input:
type: object
properties:
type:
type: string
enum:
- data_source
- DATA_SOURCE
- AUTO_MODE
description: Type of the context.
nullable: true
data_source_context:
$ref: '#/components/schemas/DataSourceContextInput'
description: Data source context.
nullable: true
ImportMemoryResponse:
type: object
required:
- status
properties:
status:
type: string
enum:
- SUCCESS
- VALIDATION_FAILED
- FAILED
description: Terminal status of the import.
summary:
type: array
items:
$ref: '#/components/schemas/ImportSummary'
description: 'Per (memory type, target source) result entries. Null when the
import failed before any record processing occurred.'
nullable: true
validation_failures:
type: array
items:
$ref: '#/components/schemas/ImportFailure'
description: 'Per-item validation failure entries. Null when the import failed
before item validation could run.'
nullable: true
diagnostics:
type: array
items:
$ref: '#/components/schemas/ImportDiagnostic'
description: 'Diagnostic message groups (errors, rollbacks, and non-fatal
warnings), each keyed by a `sub_status`. Null when the import
produced no diagnostics.'
nullable: true
operation_id:
type: string
description: 'Server-generated identifier for this import operation. Include it in
support tickets to help correlate server-side logs.'
nullable: true
description: 'Response from importMemory. On `SUCCESS`, `summary` is fully
populated. `diagnostics` carries any fatal errors, rollbacks, and
non-fatal warnings produced during the import.'
ConversationSettingsInput:
type: object
properties:
enable_contextual_change_analysis:
type: boolean
default: true
description: 'Enable contextual change analysis.
Default changed from `false` to `true` in 26.2.0.cl.
Ignored on versions >= 26.2.0.cl where it is always enabled.
Version: 10.4.0.cl or later'
nullable: true
enable_natural_language_answer_generation:
type: boolean
default: true
description: 'Enable natural language to answer generation.
Default changed from `false` to `true` in 26.2.0.cl.
Ignored on versions >= 26.2.0.cl where it is always enabled.
Version: 10.4.0.cl or later'
nullable: true
enable_reasoning:
type: boolean
default: true
description: 'Enable reasoning.
Default changed from `false` to `true` in 26.2.0.cl.
Ignored on versions >= 26.2.0.cl where it is always enabled.
Version: 10.4.0.cl or later'
nullable: true
enable_save_chat:
type: boolean
default: false
description: 'Enable save conversation. When `true`, the conversation is persisted
and can be retrieved later via conversation history.
Version: 26.5.0.cl or later'
nullable: true
ShareConversationRequest:
type: object
properties:
refresh_shared_content:
description: 'When `true`, always regenerates the shared view from the latest conversation
state, even if one already exists. When `false` (default), reuses the
existing shared view.'
default: false
type: boolean
nullable: true
grant:
description: Principals to grant read-only access to the conversation.
default: []
type: array
items:
$ref: '#/components/schemas/PrincipalRefInput'
revoke:
description: Principals to revoke access from the conversation.
default: []
type: array
items:
$ref: '#/components/schemas/PrincipalRefInput'
notify_on_share:
description: 'Version: 26.10.0.cl or later
When `true` (default), newly granted principals are notified of the share. When `false`, access is granted without sending a notification. Has no effect on principals passed in `revoke`. Does not re-notify a principal who already had access.'
default: true
type: boolean
nullable: true
required:
- grant
- revoke
SendMessageRequest:
type: object
properties:
metadata_identifier:
description: ID of the metadata object, such as a Worksheet or Model, to use as a data source for the conversation.
type: string
message:
description: A message string with the follow-up question to continue the conversation.
type: string
required:
- metadata_identifier
- message
ConversationShareStatusResponse:
type: object
required:
- conversation_id
- principals
properties:
conversation_id:
type: string
description: Unique identifier of the source conversation.
is_shared_content_outdated:
type: boolean
description: '`true` when the shared view was generated before the last edit to the
conversation and does not reflect the latest content. `null` when the
conversation has never been shared.'
nullable: true
principals:
type: array
items:
$ref: '#/components/schemas/ConversationPrincipalInfo'
description: 'List of principals that currently have access to this shared conversation.
Empty when no principals have been granted access.'
description: Response returned by getShareInfo.
ConversationMessage:
type: object
required:
- message_id
- timestamp_in_millis
properties:
message_id:
type: string
description: 'Stable identifier for the turn. For liveboard-started synthetic first turns,
this is the root node identifier.'
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
or connector resources attached to it. Null for liveboard-started synthetic
first turns.'
nullable: true
response_items:
type: array
items:
type: object
description: 'Agent-side output produced in response to this turn. Empty array for
in-progress turns where the agent has not yet produced output.'
nullable: true
description: 'One conversational exchange: an optional user prompt (message and attachments),
followed by the agent''s response items for that turn.'
SharedConversationResponse:
type: object
required:
- conversation_id
- shared_conversation_id
- data_sources
- messages
- code_execution_files
properties:
conversation_id:
type: string
description: Unique identifier of the source conversation (echoes the request parameter).
shared_conversation_id:
type: string
description: 'Identifier for the shared view. Use this as `conversation_identifier` in
follow-up `loadAnswer` calls to hydrate answer items in the messages.'
conversation_title:
type: string
description: Display title of the conversation.
nullable: true
data_sources:
type: array
items:
$ref: '#/components/schemas/DataSourceEntry'
description: Data sources used by the conversation, each with an identifier and display name.
messages:
type: array
items:
$ref: '#/components/schemas/ConversationMessage'
description: 'Ordered conversation messages, oldest to newest. Same structure as the
`messages` field returned by `getConversation`. Empty array when the
conversation has no messages; never null.'
code_execution_files:
type: array
items:
$ref: '#/components/schemas/CodeExecutionFileMetadata'
description: 'Sanitized metadata for files generated by the code-execution tool during
this conversation. Empty when there are no such files.'
description: 'Response returned by getSharedContent. Contains the full read-only view
of the shared conversation including messages and data source metadata.'
SendAgentConversationMessageStreamingRequest:
type: object
properties:
messages:
description: messages to be sent to the agent
type: array
items:
type: string
required:
- messages
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
UpdateConversationRequest:
type: object
properties:
title:
description: 'New display title for the conversation. Omit to leave the title
unchanged.'
type: string
UserPrompt:
type: object
properties:
message:
$ref: '#/components/schemas/UserMessage'
description: User query that started the turn. Null for liveboard-started synthetic first turns.
nullable: true
attachments:
type: array
items:
type: object
description: 'Files or connector resources attached to the user message. Empty array when
there are no attachments.'
nullable: true
description: 'User-authored prompt for a conversation turn: the user''s text message and any
files or connector resources attached to it.'
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.
nullable: true
MetadataContext:
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.
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.
nullable: true
conversation_identifier:
type: string
description: Unique identifier to denote current conversation.
nullable: true
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
MemorySources:
type: object
required:
- type
- identifiers
properties:
type:
type: string
enum:
- DATA_MODEL
description: Source object type for this group. Must be `DATA_MODEL`.
identifiers:
type: array
items:
type: string
description: 'Data-models to export memory for. Each entry may be a GUID or a
human-readable obj_id; obj_ids are resolved server-side.'
description: 'A single typed scope group identifying objects whose memory entries
should be exported. One group binds a single `type` to a set of
`identifiers`; pass one or more data-model identifiers in a group to
scope the memory export to multiple data-models in one call.'
DataSourceEntry:
type: object
required:
- id
- name
properties:
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.
AnswerDetails:
type: object
properties:
title:
type: string
description: Display title of the answer.
nullable: true
description:
type: string
description: Description of the answer.
nullable: true
session_identifier:
type: string
description: Unique identifier of the session.
nullable: true
generation_number:
type: integer
format: int32
description: Generation number of the answer.
nullable: true
tokens:
type: array
items:
type: string
description: Ordered list of TML token strings that make up the answer query.
nullable: true
visualization_type:
type: string
enum:
- Chart
- CHART
- Table
- TABLE
- Undefined
- UNDEFINED
description: Visualization type for the answer.
nullable: true
formulas:
type: array
items:
type: string
description: List of formulas used in the answer.
nullable: true
parameters:
type: array
items:
type: string
description: List of parameters used in the answer.
nullable: true
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
ExportMemoryRequest:
type: object
properties:
sources:
description: 'List of typed scope groups selecting which data-models to export
memory for. Supply `DATA_MODEL` group to scope the
export to specific data-models.'
type: array
items:
$ref: '#/components/schemas/MemorySources'
required:
- sources
ConversationPrincipalInfo:
type: object
required:
- id
- type
- display_name
- name
- permission
properties:
id:
type: string
description: Unique identifier of the user or group.
type:
type: string
enum:
- USER
- USER_GROUP
description: Whether the principal is an individual user or a group.
display_name:
type: string
description: Display name of the principal as shown in the UI.
name:
type: string
description: Internal name of the principal.
permission:
type: string
enum:
- READ_ONLY
- MODIFY
- NO_ACCESS
description: Access level granted to the principal. Always `READ_ONLY` for shared conversations.
description: A principal that has been granted access to a shared conversation.
ImportDiagnostic:
type: object
properties:
sub_status:
type: string
enum:
- UNKNOWN
- FAILURE
- WARNING
- ROLLED_BACK
description: 'Severity / disposition category these messages share (e.g.
`WARNING`, `FAILURE`, `ROLLED_BACK`).'
nullable: true
messages:
type: array
items:
type: string
description: 'Human-readable messages for this category (e.g. the details of a
`WARNING`, or the failure cause for a `FAILURE`).'
nullable: true
description: 'A group of importMemory diagnostic messages that share a severity /
disposition. This is the single, uniform channel for fatal errors,
rollbacks, and non-fatal observations.'
SendAgentMessageRequest:
type: object
properties:
messages:
description: messages to be sent to the agent
type: array
items:
type: string
required:
- messages
Conversation:
type: object
required:
- conversation_identifier
properties:
conversation_identifier:
type: string
description: Unique identifier of the conversation.
GetDataSourceSuggestionsRequest:
type: object
properties:
query:
description: User query used to suggest data sources. Must be a non-empty string.
type: string
required:
- query
AIContext:
type: object
properties:
instructions:
type: array
items:
type: string
description: User specific text instructions sent to AI system for processing the query.
nullable: true
content:
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.
nullable: true
eureka_SetNLInstructionsResponse:
type: object
required:
- success
properties:
success:
type: boolean
description: Success status of the operation.
ImportFailure:
type: object
properties:
line_number:
type: integer
format: int32
description: 'Best-effort line number of the offending item in the uploaded YAML. May be null when the line cannot be
determined.'
nullable: true
reason:
type: string
enum:
- UNKNOWN_FAILURE_REASON
- VALIDATION
- UNRESOLVED_SOURCE
- ACCESS_DENIED
- CHAR_LIMIT
- SCHEMA
description: 'Machine-readable category for the failure (e.g. `VALIDATION`,
`ACCESS_DENIED`, `CHAR_LIMIT`).'
nullable: true
field_name:
type: string
description: 'Dotted path to the offending field within the item (e.g.
`content.rule_definition`) for inline highlighting. Absent when the
failure is item-level rather than field-level.'
nullable: true
message:
type: string
description: Human-readable description of the failure.
nullable: true
description: 'One per-item import failure surfaced by importMemory. `line_number` is
the best-effort line number in the uploaded YAML; `field_name` is a
dotted path within the item (e.g. `content.rule_definition`) for inline
highlighting; absent when the failure is item-level rather than field-level.'
CodeExecutionFileMetadata:
type: object
required:
- file_id
- expired
properties:
file_id:
type: string
description: 'Unique identifier of the code-execution-generated file. Stable across
conversation turns.'
display_name:
type: string
description: Human-readable file name.
nullable: true
file_type:
type: string
description: 'File type hint. Either a MIME string (e.g. `text/csv`) or an extension
(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
storage identifiers (e.g. Azure blob ids) are deliberately not exposed.'
eureka_DataSourceSuggestionResponse:
type: object
properties:
data_sources:
type: array
items:
$ref: '#/components/schemas/DataSource'
description: List of data sources suggested.
nullable: true
SetNLInstructionsRequest:
type: object
properties:
data_source_identifier:
description: Unique ID or name of the data-model for which to set NL instructions.
type: string
nl_instructions_info:
description: List of NL instructions to set for the data-model.
type: array
items:
$ref: '#/components/schemas/NLInstructionsInfoInput'
required:
- data_source_identifier
- nl_instructions_info
CreateConversationRequest:
type: object
properties:
metadata_identifier:
description: ID of the metadata object, such as a Worksheet or Model, to use as a data source for the conversation.
type: string
tokens:
description: Token string to set the context for the conversation. For example,`[sales],[item type],[state]`.
type: string
required:
- metadata_identifier
ConversationMessageResponse:
type: object
properties:
messages:
type: array
items:
$ref: '#/components/schemas/ConversationMessage'
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
conversation. Empty array when the conversation has no code-execution files.'
nullable: true
description: 'Response body of getConversation. `messages` is ordered oldest to newest.
`code_execution_files` is a list of sanitized code-execution file metadata
entries, keyed in upstream by `file_id`.'
DataSource:
type: object
properties:
confidence:
type: number
format: float
description: Confidence score for the data source suggestion.
nullable: true
details:
$ref: '#/components/schemas/EntityHeader'
description: Details of the data source.
nullable: true
reasoning:
type: string
description: LLM reasoning for the data source.
nullable: true
NLInstructionsInfo:
type: object
required:
- instructions
- scope
properties:
instructions:
type: array
items:
type: string
description: User instructions for natural language processing.
scope:
type: string
enum:
- GLOBAL
description: Scope of the instruction.
eureka_LLMSuggestedQuery:
type: object
properties:
query:
type: string
description: NL query that can be run using spotter aka natural language search to get an AI generated answer.
nullable: true
worksheetId:
type: string
description: Unique identifier of the worksheet on which this query can be run on.
nullable: true
worksheetName:
type: string
description: Display name of the worksheet on which this query can be run on.
nullable: true
eureka_GetNLInstructionsResponse:
type: object
required:
- nl_instructions_info
properties:
nl_instructions_info:
type: array
items:
$ref: '#/components/schemas/NLInstructionsInfo'
description: List of NL instructions with their scopes.
SendAgentMessageResponse:
type: object
required:
- success
properties:
success:
type: boolean
description: Indicates whether the agent response was received and processed successfully.
message:
type: string
description: Optional message providing additional context about the operation outcome.
nullable: true
SetAgentInstructionsRequest:
type: object
properties:
instructions:
description: The admin instructions text to set for the agent.
type: string
required:
- instructions
ExportMemoryResponse:
type: object
properties:
content:
type: string
description: 'Serialized memory payload (YAML). This is the shape
importMemory consumes.'
nullable: true
description: 'Response from exportMemory. Contains the serialized payload
ready for local editing and re-submission to importMemory.'
PrincipalRefInput:
type: object
required:
- principal_identifier
- principal_type
properties:
principal_identifier:
type: string
description: Unique identifier of the user or group.
principal_type:
type: string
enum:
- USER
- USER_GROUP
description: Whether the principal is an individual user or a group.
description: 'Input reference to a principal (user or group) used when granting or revoking
access to a shared resource.'
GetNLInstructionsRequest:
type: object
properties:
data_source_identifier:
description: Unique ID or name of the data-model for which to retrieve NL instructions.
type: string
required:
- data_source_identifier
LoadAnswerResponse:
type: object
properties:
answer:
$ref: '#/components/schemas/AnswerDetails'
description: Answer details for the loaded message.
nullable: true
ImportTargetSource:
type: object
properties:
identifier:
type: string
description: Identifier (GUID) of the target object these counts apply to.
nullable: true
type:
type: string
enum:
- DATA_MODEL
description: Source object kind (`DATA_MODEL`).
nullable: true
description: 'Identifies the target object a group of import counts applies to.
`type` is the source kind (`DATA_MODEL`) and `identifier` is
the object''s GUID.'
QueryGetDecomposedQueryRequest:
type: object
properties:
answerIds:
description: List of answer unique identifiers (GUIDs) whose data will be used to guide the response.
type: array
items:
type: string
content:
description: User provided content like text data, csv data as a string message to provide context & potentially improve the quality of the response.
type: array
items:
type: string
conversationId:
description: Unique identifier to denote current conversation.
type: string
liveboardIds:
description: List of liveboard unique identifiers (GUIDs) whose data will be used to guide the response.
type: array
items:
type: string
maxDecomposedQueries:
description: Maximum number of decomposed queries that is allowed in the response, default = 5.
type: integer
format: int32
nlsRequest:
description: NLSRequest object containing user query & instructions.
allOf:
- $ref: '#/components/schemas/Input_eureka_NLSRequest'
worksheetIds:
description: List of worksheetIds to provide context for decomposing user query into analytical queries that can be run on them.
type: array
items:
type: string
AgentConversationList:
type: object
required:
- conversation_identifier
properties:
conversation_identifier:
type: string
description: Unique identifier of the conversation.
conversation_title:
type: string
description: Display title of the conversation.
nullable: true
created_at:
type: string
description: ISO 8601 timestamp when the conversation was created.
nullable: true
updated_at:
type: string
description: ISO 8601 timestamp when the conversation was last updated.
nullable: true
data_source_identifiers:
type: array
items:
type: string
description: Unique identifiers of the data sources associated with the conversation.
nullable: true
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.
ResponseMessage:
type: object
required:
- message_type
properties:
session_identifier:
type: string
description: Unique identifier of the generated response.
nullable: true
generation_number:
type: integer
format: int32
description: Generate number of the response.
nullable: true
message_type:
type: string
enum:
- TSAnswer
description: Type of the generated response.
visualization_type:
type: string
enum:
- Chart
- CHART
- Table
- TABLE
- Undefined
- UNDEFINED
description: Generated visualization type.
nullable: true
tokens:
type: string
description: Tokens for the response.
nullable: true
display_tokens:
type: string
description: User friendly tokens for the response.
nullable: true
UserMessage:
type: object
required:
- message_id
- content
properties:
message_id:
type: string
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.
Null when the turn is a synthetic liveboard-started first turn.'
ImportSummary:
type: object
properties:
memory_type:
type: string
enum:
- RULES
- RECIPES
- ALWAYS_APPLY_RULES
description: 'The kind of memory (`RULES`, `RECIPES`, or `ALWAYS_APPLY_RULES`)
these counts apply to.'
nullable: true
source:
$ref: '#/components/schemas/ImportTargetSource'
description: The target object these counts apply to.
nullable: true
existing_record_count:
type: integer
format: int32
description: 'Number of memory entries of this type that already existed on the
target object before the import.'
nullable: true
deleted_record_count:
type: integer
format: int32
description: 'Number of existing entries that will be (DRY_RUN) or were
(EXECUTE_IMPORT) deleted as part of the replacement.'
nullable: true
inserted_record_count:
type: integer
format: int32
description: 'Number of entries from the payload that will be (DRY_RUN) or were
(EXECUTE_IMPORT) inserted.'
nullable: true
failed_record_count:
type: integer
format: int32
description: Number of records of this type that failed validation or processing.
nullable: true
description: 'Per (memory type, target source) summary of what importMemory did — or
would do, in DRY_RUN. `deleted_record_count` and `inserted_record_count`
are previews in DRY_RUN and actuals in EXECUTE_IMPORT.'
SendAgentConversationMessageRequest:
type: object
properties:
messages:
description: messages to be sent to the agent
type: array
items:
type: string
required:
- messages
EntityHeader:
type: object
properties:
description:
type: string
description: Description of the data source.
nullable: true
data_source_name:
type: string
description: Display name of the data source.
nullable: true
data_source_identifier:
type: string
description: Unique identifier of the data source.
nullable: true
AgentInstructions:
type: object
required:
- instructions
properties:
id:
type: string
description: Unique identifier of the record.
nullable: true
instructions:
type: string
description: The admin instructions text for the agent.
created_at:
type: string
description: ISO timestamp when the instructions were created.
nullable: true
updated_at:
type: string
description: ISO timestamp when the instructions were last updated.
nullable: true
last_updated_by:
type: string
description: User ID of the admin who last updated the instructions.
nullable: true
description: Admin instructions configured for the AI agent.
DataSourceContextInput:
type: object
properties:
data_source_identifier:
type: string
description: 'Unique identifier of the data source.
Required when context type is DATA_SOURCE and `data_source_identifiers` is not provided.
At least one of `data_source_identifier` or `data_source_identifiers` must be supplied for DATA_SOURCE context;
omit only when context type is AUTO_MODE.
Version: 26.5.0.cl or later'
nullable: true
data_source_identifiers:
type: array
items:
type: string
description: 'Unique identifiers of data sources for multi-data-source context.
Required when context type is DATA_SOURCE and `data_source_identifier` is not provided.
Version: 26.5.0.cl or later'
nullable: true
guid:
type: string
description: 'Deprecated. Use `data_source_identifier` instead.
Previously required when neither `data_source_identifier` nor `data_source_identifiers` was provided for DATA_SOURCE context.
Version: 26.2.0.cl or later'
nullable: true
securitySchemes:
bearerAuth:
type: http
scheme: bearer
x-roles:
- name: 26.2.0.cl
id: 26.2.0.cl
tags:
- 26.2.0.cl
description: Roles for version 26.2.0.cl
- name: 10.4.0.cl
id: 10.4.0.cl
tags:
- 10.4.0.cl
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.8.0.cl
id: 26.8.0.cl
tags:
- 26.8.0.cl
description: Roles for version 26.8.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
tags:
- 10.15.0.cl
description: Roles for version 10.15.0.cl
- name: 10.13.0.cl
id: 10.13.0.cl
tags:
- 10.13.0.cl
description: Roles for version 10.13.0.cl
- name: 26.9.0.cl
id: 26.9.0.cl
tags:
- 26.9.0.cl
description: Roles for version 26.9.0.cl
- name: 10.7.0.cl
id: 10.7.0.cl
tags:
- 10.7.0.cl
description: Roles for version 10.7.0.cl
- name: 26.5.0.cl
id: 26.5.0.cl
tags:
- 26.5.0.cl
description: Roles for version 26.5.0.cl
- name: 9.0.0.cl
id: 9.0.0.cl
tags:
- 9.0.0.cl
description: Roles for version 9.0.0.cl
- name: 9.4.0.cl
id: 9.4.0.cl
tags:
- 9.4.0.cl
description: Roles for version 9.4.0.cl
- name: 9.12.0.cl
id: 9.12.0.cl
tags:
- 9.12.0.cl
description: Roles for version 9.12.0.cl
- name: 26.4.0.cl
id: 26.4.0.cl
tags:
- 26.4.0.cl
description: Roles for version 26.4.0.cl
- name: 10.12.0.cl
id: 10.12.0.cl
tags:
- 10.12.0.cl
description: Roles for version 10.12.0.cl
- name: 9.2.0.cl
id: 9.2.0.cl
tags:
- 9.2.0.cl
description: Roles for version 9.2.0.cl
- name: 9.9.0.cl
id: 9.9.0.cl
tags:
- 9.9.0.cl
description: Roles for version 9.9.0.cl
- name: 9.6.0.cl
id: 9.6.0.cl
tags:
- 9.6.0.cl
description: Roles for version 9.6.0.cl
- name: 10.10.0.cl
id: 10.10.0.cl
tags:
- 10.10.0.cl
description: Roles for version 10.10.0.cl
- name: 10.6.0.cl
id: 10.6.0.cl
tags:
- 10.6.0.cl
description: Roles for version 10.6.0.cl
- name: 10.3.0.cl
id: 10.3.0.cl
tags:
- 10.3.0.cl
description: Roles for version 10.3.0.cl
- name: 10.1.0.cl
id: 10.1.0.cl
tags:
- 10.1.0.cl
description: Roles for version 10.1.0.cl
- name: 10.9.0.cl
id: 10.9.0.cl
tags:
- 10.9.0.cl
description: Roles for version 10.9.0.cl
- name: 10.8.0.cl
id: 10.8.0.cl
tags:
- 10.8.0.cl
description: Roles for version 10.8.0.cl
- name: 9.5.0.cl
id: 9.5.0.cl
tags:
- 9.5.0.cl
description: Roles for version 9.5.0.cl
- name: 26.3.0.cl
id: 26.3.0.cl
tags:
- 26.3.0.cl
description: Roles for version 26.3.0.cl
- name: 10.14.0.cl
id: 10.14.0.cl
tags:
- 10.14.0.cl
description: Roles for version 10.14.0.cl
- name: 9.7.0.cl
id: 9.7.0.cl
tags:
- 9.7.0.cl
description: Roles for version 9.7.0.cl