# Trigger Agent Webhook
Source: https://docs.textql.com/api-reference/agents/webhooks/trigger-agent-webhook
POST /v1/agents/webhook/trigger
Trigger an agent run with a JSON webhook payload
Use this endpoint to start an agent run from an external system. The webhook payload is added as context for the agent run.
Webhook payloads are limited to 16KB after JSON serialization. Requests with larger payloads are rejected before the agent run is queued.
You can find an agent's webhook trigger ID from the agent edit page in TextQL.
# Create API Access Key
Source: https://docs.textql.com/api-reference/api-keys/api-keys/create-api-access-key
POST /v1/api-keys/create
Create a new API access key for an external API provider
# Delete API Access Key
Source: https://docs.textql.com/api-reference/api-keys/api-keys/delete-api-access-key
POST /v1/api-keys/delete
Delete an API access key by ID
# List API Access Keys
Source: https://docs.textql.com/api-reference/api-keys/api-keys/list-api-access-keys
POST /v1/api-keys
List all API access keys for your organization
# List API Providers
Source: https://docs.textql.com/api-reference/api-keys/api-keys/list-api-providers
POST /v1/api-providers
List all supported API providers and their configuration templates
# Update API Access Key
Source: https://docs.textql.com/api-reference/api-keys/api-keys/update-api-access-key
POST /v1/api-keys/update
Update an existing API access key
# Cancel Chat
Source: https://docs.textql.com/api-reference/chat/chat/cancel-a-running-chat
POST /v1/chat/cancel
Cancel a running chat query
**v2 available:** See [POST /v2/chats//cancel](/api-reference/v2/chat/cancel-stream) for the REST-native version of this endpoint.
# Create Chat
Source: https://docs.textql.com/api-reference/chat/chat/create
POST /v1/chat
Create a new chat
**v2 available:** See [POST /v2/chats](/api-reference/v2/chat/create-chat) for the REST-native version of this endpoint.
# Get Chat
Source: https://docs.textql.com/api-reference/chat/chat/get-chat-details
POST /v1/chat/get
Retrieve details of a specific chat by ID
**v2 available:** See [GET /v2/chats/](/api-reference/v2/chat/get-chat) for the REST-native version of this endpoint.
# List Chats
Source: https://docs.textql.com/api-reference/chat/chat/list-chats
POST /v1/chat/list
List chats with optional filtering and pagination
**v2 available:** See [GET /v2/chats](/api-reference/v2/chat/list-chats) for the REST-native version of this endpoint.
# Stream Chat
Source: https://docs.textql.com/api-reference/chat/chat/stream
Stream chat responses in real-time using Connect-RPC
**v2 available:** See [POST /v2/chats/stream](/api-reference/v2/chat/stream-chat) for the REST-native version using standard SSE, which works with any HTTP client.
This endpoint requires a Connect-RPC client and cannot be tested with a simple HTTP request.
In TypeScript, the [SDK streaming client](/api-reference/sdk/streaming/overview) wraps it —
`streaming.chats.streamChat(...)` / `streaming.chats.watchChat(...)` — with no Connect setup required.
## Overview
The Stream Chat endpoint allows you to receive chat responses in real-time as they are generated. This is a server-streaming Connect-RPC endpoint that works over standard HTTP/1.1 or HTTP/2.
**Endpoint:** `POST /v1/stream`
## Stream Flow
Create a Connect-RPC transport with your API base URL and authentication token. Connect-RPC works over standard HTTP, so any HTTP client can be used with the Connect protocol.
Send a `StreamRequest` with your question, optional `chat_id` (for continuation), and `tools` configuration. If no `chat_id` is provided, a new chat session is created.
First `StreamResponse` contains metadata with:
* `chat_id`: Use this for subsequent messages in the same conversation
* `model`: The LLM model being used
* `is_continuation`: Whether this continues an existing chat
* `status`: Initially `QUERY_STATUS_IN_PROGRESS`
Receive multiple `StreamResponse` messages as content is generated:
* `meta_data`: ChatId, model
* `text`: Incremental text deltas (append these to build the full response)
* `preview`: Results and visualizations (charts, tables)
## Request Body
```json theme={null}
{
"question": "Your question here",
"chat_id": "optional-chat-id",
"tools": {
"connector_ids": [1, 2],
"web_search_enabled": true,
"sql_enabled": true,
"ontology_enabled": false,
"google_drive_enabled": false,
"powerbi_enabled": false
}
}
```
## Response
The endpoint streams `StreamResponse` messages containing:
* **metadata**: Chat metadata including ID, model, status, and token usage
* **cell**: Executable cells (SQL, Python, etc.)
* **text**: Text content deltas
* **preview**: Preview cells with results
### StreamMetadata
| Field | Type | Description |
| - | - | - |
| `id` | string | Message ID |
| `created_at` | timestamp | Creation timestamp |
| `model` | string | LLM model used |
| `chat_id` | string | Chat session ID |
| `metadata` | map | Additional metadata |
| `is_continuation` | boolean | Whether this continues an existing chat |
| `usage` | ChatUsage | Token usage statistics |
| `status` | ChatStatus | Current status (IN\_PROGRESS, COMPLETED, FAILED) |
| `error` | string | Error message if failed |
### ChatTools
| Field | Type | Description |
| - | - | - |
| `connector_ids` | int32\[] | Database connector IDs to use |
| `web_search_enabled` | boolean | Enable web search |
| `sql_enabled` | boolean | Enable SQL execution |
| `ontology_enabled` | boolean | Enable ontology queries. Legacy Ontology only: on Ontology 3.0 TQL queries are always enabled unless the org forbids the tool |
| `google_drive_enabled` | boolean | Enable Google Drive access |
| `powerbi_enabled` | boolean | Enable Power BI access |
## Notes
* This endpoint uses Connect-RPC server streaming over standard HTTP/1.1 or HTTP/2
* Connect-RPC is fully HTTP-compatible - no special gRPC infrastructure needed
* Responses are streamed incrementally as the AI generates content
* The stream will remain open until the query completes, fails, or is cancelled
* Use the [Cancel Stream](/api-reference/chat/chat/cancel-a-running-chat) endpoint to stop an in-progress query
# List Connectors
Source: https://docs.textql.com/api-reference/connectors/connectors/list-all-connectors
POST /v1/connectors
Retrieve all connectors for your organization
**v2 available:** See [GET /v2/connectors](/api-reference/v2/connectors/list-connectors) for the REST-native version of this endpoint.
# Introduction
Source: https://docs.textql.com/api-reference/introduction
Welcome to the TextQL Platform API
**v2 API is now available.** The v2 API uses standard REST conventions (proper HTTP methods, path parameters, plain JSON) instead of Connect-RPC. See the [v2 API Introduction](/api-reference/v2/introduction) to get started. The examples on this page use v1.
## Overview
The TextQL Platform API provides programmatic access to TextQL's core functionality, enabling you to:
* **Execute Chats**: Send and Stream chat queries
* **Manage Playbooks**: Create, update, deploy, and delete automated playbooks
* **Trigger Agents**: Start agent runs from external systems using webhooks
* **List Connectors**: Access your configured data sources
* **Manage API Keys**: Create, update, and delete outbound API access keys for external providers
The following tools are unavailable via the API:
* **Context Editor** - Organization context editing
* **Ontology Editor** - Ontology editing
* **Streamlit** - Streamlit execution
(They are still available via [app.textql.com](https://app.textql.com))
## Where to get API Key
You can get your API key at **Settings → Developers → API Keys**. Click **+ Create API Key** to generate one. You must be an admin to create API keys.
## Base URL
All API requests should be made to:
```
https://app.textql.com/v1
```
## Authentication
All API requests require authentication using a Bearer token:
```bash theme={null}
curl -X POST "https://app.textql.com/v1/chat" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"question": "What is the color of the sky?"}'
```
# Execute Code
Source: https://docs.textql.com/api-reference/platform/sandbox/execute
POST /v1/sandbox/execute
Execute Python code in a running sandbox
**v2 available:** See [POST /v2/sandcastles//execute](/api-reference/v2/sandbox/execute-code) for the REST-native version of this endpoint.
# Load Connector Data
Source: https://docs.textql.com/api-reference/platform/sandbox/load-connector-data
POST /v1/sandbox/query
Execute a SQL query against a connector and load the results into the sandbox as a pandas DataFrame
**v2 available:** See [POST /v2/sandcastles//query](/api-reference/v2/sandbox/load-connector-data) for the REST-native version of this endpoint.
# Start Sandbox
Source: https://docs.textql.com/api-reference/platform/sandbox/start
POST /v1/sandbox/start
Start a new Python sandbox environment
**v2 available:** See [POST /v2/sandcastles](/api-reference/v2/sandbox/start-sandbox) for the REST-native version of this endpoint.
# Get Sandbox Status
Source: https://docs.textql.com/api-reference/platform/sandbox/status
POST /v1/sandbox/status
Get the current status of a sandbox, including loaded dataframes and memory usage
**v2 available:** See [GET /v2/sandcastles/](/api-reference/v2/sandbox/get-sandbox-status) for the REST-native version of this endpoint.
# Stop Sandbox
Source: https://docs.textql.com/api-reference/platform/sandbox/stop
POST /v1/sandbox/stop
Stop and destroy a running sandbox
**v2 available:** See [DELETE /v2/sandcastles/](/api-reference/v2/sandbox/stop-sandbox) for the REST-native version of this endpoint.
# Upload File
Source: https://docs.textql.com/api-reference/platform/sandbox/upload
POST /v1/sandbox/upload
Upload a file into the sandbox filesystem
**v2 available:** See [POST /v2/sandcastles//files](/api-reference/v2/sandbox/upload-file) for the REST-native version of this endpoint.
# Create Playbook
Source: https://docs.textql.com/api-reference/playbooks/playbooks/create-a-new-playbook
POST /v1/playbooks/create
Create a new playbook
**v2 available:** See [POST /v2/playbooks](/api-reference/v2/playbooks/create-playbook) for the REST-native version of this endpoint.
# Delete Playbook
Source: https://docs.textql.com/api-reference/playbooks/playbooks/delete-a-playbook
POST /v1/playbooks/delete
Delete a playbook by playbookId
**v2 available:** See [DELETE /v2/playbooks/](/api-reference/v2/playbooks/delete-playbook) for the REST-native version of this endpoint.
# Deploy Playbook
Source: https://docs.textql.com/api-reference/playbooks/playbooks/deploy-a-playbook
POST /v1/playbooks/deploy
Deploy a playbook by playbookId
**v2 available:** See [POST /v2/playbooks//deploy](/api-reference/v2/playbooks/deploy-playbook) for the REST-native version of this endpoint.
# Get Playbook
Source: https://docs.textql.com/api-reference/playbooks/playbooks/get-a-playbook-by-id
POST /v1/playbooks/get
Get a playbook by playbookId
**v2 available:** See [GET /v2/playbooks/](/api-reference/v2/playbooks/get-playbook) for the REST-native version of this endpoint.
# List Playbooks
Source: https://docs.textql.com/api-reference/playbooks/playbooks/list-playbooks
POST /v1/playbooks/list
Get all playbooks
**v2 available:** See [GET /v2/playbooks](/api-reference/v2/playbooks/list-playbooks) for the REST-native version of this endpoint.
# Run Playbook
Source: https://docs.textql.com/api-reference/playbooks/playbooks/run-a-playbook
POST /v1/playbooks/run
Execute a playbook and return the generated report
**v2 available:** See [POST /v2/playbooks//run](/api-reference/v2/playbooks/run-playbook) for the REST-native version of this endpoint.
# Update Playbook
Source: https://docs.textql.com/api-reference/playbooks/playbooks/update-a-playbook
POST /v1/playbooks/update
Update a playbook
**v2 available:** See [PATCH /v2/playbooks/](/api-reference/v2/playbooks/update-playbook) for the REST-native version of this endpoint.
# Create Agent
Source: https://docs.textql.com/api-reference/sdk/agentservice/createagent
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.agent.AgentService/CreateAgent
# Delete Agent
Source: https://docs.textql.com/api-reference/sdk/agentservice/deleteagent
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.agent.AgentService/DeleteAgent
# Duplicate Agent
Source: https://docs.textql.com/api-reference/sdk/agentservice/duplicateagent
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.agent.AgentService/DuplicateAgent
# Get Agent
Source: https://docs.textql.com/api-reference/sdk/agentservice/getagent
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.agent.AgentService/GetAgent
# Get Agent DB Schema
Source: https://docs.textql.com/api-reference/sdk/agentservice/getagentdbschema
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.agent.AgentService/GetAgentDBSchema
Read-only table/column list for the agent's private DuckDB memory (agent_db).
# Get Agent DB Table Preview
Source: https://docs.textql.com/api-reference/sdk/agentservice/getagentdbtablepreview
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.agent.AgentService/GetAgentDBTablePreview
A bounded row preview of one agent_db table (SELECT ... LIMIT n).
# Get Agent Run
Source: https://docs.textql.com/api-reference/sdk/agentservice/getagentrun
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.agent.AgentService/GetAgentRun
# List Agent Runs
Source: https://docs.textql.com/api-reference/sdk/agentservice/listagentruns
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.agent.AgentService/ListAgentRuns
# List Agents
Source: https://docs.textql.com/api-reference/sdk/agentservice/listagents
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.agent.AgentService/ListAgents
# Reset Agent Avatar
Source: https://docs.textql.com/api-reference/sdk/agentservice/resetagentavatar
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.agent.AgentService/ResetAgentAvatar
# Trigger Agent
Source: https://docs.textql.com/api-reference/sdk/agentservice/triggeragent
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.agent.AgentService/TriggerAgent
# Update Agent
Source: https://docs.textql.com/api-reference/sdk/agentservice/updateagent
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.agent.AgentService/UpdateAgent
# Upload Agent Avatar
Source: https://docs.textql.com/api-reference/sdk/agentservice/uploadagentavatar
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.agent.AgentService/UploadAgentAvatar
# Exchange Api O Auth Client Credentials
Source: https://docs.textql.com/api-reference/sdk/apioauthservice/exchangeapioauthclientcredentials
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.api_oauth.ApiOAuthService/ExchangeApiOAuthClientCredentials
# Exchange Api O Auth Code
Source: https://docs.textql.com/api-reference/sdk/apioauthservice/exchangeapioauthcode
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.api_oauth.ApiOAuthService/ExchangeApiOAuthCode
# Exchange Api O Auth Jwt Bearer
Source: https://docs.textql.com/api-reference/sdk/apioauthservice/exchangeapioauthjwtbearer
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.api_oauth.ApiOAuthService/ExchangeApiOAuthJwtBearer
# Get Api O Auth Config
Source: https://docs.textql.com/api-reference/sdk/apioauthservice/getapioauthconfig
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.api_oauth.ApiOAuthService/GetApiOAuthConfig
# Get Api O Auth Status
Source: https://docs.textql.com/api-reference/sdk/apioauthservice/getapioauthstatus
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.api_oauth.ApiOAuthService/GetApiOAuthStatus
# Get Api O Auth URL
Source: https://docs.textql.com/api-reference/sdk/apioauthservice/getapioauthurl
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.api_oauth.ApiOAuthService/GetApiOAuthURL
# Initiate Device Authorization
Source: https://docs.textql.com/api-reference/sdk/apioauthservice/initiatedeviceauthorization
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.api_oauth.ApiOAuthService/InitiateDeviceAuthorization
# Poll Device Code Token
Source: https://docs.textql.com/api-reference/sdk/apioauthservice/polldevicecodetoken
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.api_oauth.ApiOAuthService/PollDeviceCodeToken
# Revoke Api O Auth Token
Source: https://docs.textql.com/api-reference/sdk/apioauthservice/revokeapioauthtoken
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.api_oauth.ApiOAuthService/RevokeApiOAuthToken
# Upsert Api O Auth Config
Source: https://docs.textql.com/api-reference/sdk/apioauthservice/upsertapioauthconfig
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.api_oauth.ApiOAuthService/UpsertApiOAuthConfig
Shared OAuth app configuration. Requires connector write permission.
# App Heartbeat
Source: https://docs.textql.com/api-reference/sdk/appservice/appheartbeat
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/AppHeartbeat
Keeps the viewed app's compute worker alive; first view spawns and pre-warms it (dashboard viewer-TTL parity).
# Create App
Source: https://docs.textql.com/api-reference/sdk/appservice/createapp
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/CreateApp
# Delete App
Source: https://docs.textql.com/api-reference/sdk/appservice/deleteapp
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/DeleteApp
# Duplicate App
Source: https://docs.textql.com/api-reference/sdk/appservice/duplicateapp
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/DuplicateApp
Duplicates an app the caller can view into a new app they own,
named "Copy of ". Copies code/files/data sources/compute functions/
schedule; never carries over the source's data snapshot.
# Get App
Source: https://docs.textql.com/api-reference/sdk/appservice/getapp
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/GetApp
# Get App DB Schema
Source: https://docs.textql.com/api-reference/sdk/appservice/getappdbschema
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/GetAppDBSchema
Read-only table/column list for the app's private DuckDB (app_db).
# Get App DB Table Preview
Source: https://docs.textql.com/api-reference/sdk/appservice/getappdbtablepreview
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/GetAppDBTablePreview
A bounded row preview of one app_db table (SELECT ... LIMIT n).
# Get App Member State
Source: https://docs.textql.com/api-reference/sdk/appservice/getappmemberstate
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/GetAppMemberState
Per-member app state: one JSON blob per (app, member) so apps remember
settings/progress. Member always resolved server-side from auth context;
per-member persistence, so viewers with read access can save their own state.
# Get App Version
Source: https://docs.textql.com/api-reference/sdk/appservice/getappversion
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/GetAppVersion
# Get App View Stats
Source: https://docs.textql.com/api-reference/sdk/appservice/getappviewstats
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/GetAppViewStats
View analytics: reads the engagement views recorded on app page load.
# Get Members With Apps
Source: https://docs.textql.com/api-reference/sdk/appservice/getmemberswithapps
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/GetMembersWithApps
# Invoke App Compute Function
Source: https://docs.textql.com/api-reference/sdk/appservice/invokeappcomputefunction
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/InvokeAppComputeFunction
Executes a declared compute function on a pooled sandbox worker; gated, org-scoped, rate-limited.
# List App Activity Since
Source: https://docs.textql.com/api-reference/sdk/appservice/listappactivitysince
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/ListAppActivitySince
Cross-member live activity: rows from every member of the app after a seq,
each carrying member_id + display_name (resolved server-side; never email).
# List Apps
Source: https://docs.textql.com/api-reference/sdk/appservice/listapps
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/ListApps
# List App Uploads
Source: https://docs.textql.com/api-reference/sdk/appservice/listappuploads
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/ListAppUploads
Lists the invoking viewer's uploads for this app. May recover legacy Library pointers on first use.
# List App Versions
Source: https://docs.textql.com/api-reference/sdk/appservice/listappversions
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/ListAppVersions
Version history: git-backed, one version per save (plus legacy publish-era snapshots); authors can list and restore.
# List My App Member Activity
Source: https://docs.textql.com/api-reference/sdk/appservice/listmyappmemberactivity
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/ListMyAppMemberActivity
# Move App To Folder
Source: https://docs.textql.com/api-reference/sdk/appservice/moveapptofolder
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/MoveAppToFolder
Moves an app into a library folder (or to root when folder_id is empty).
# Presence Heartbeat
Source: https://docs.textql.com/api-reference/sdk/appservice/presenceheartbeat
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/PresenceHeartbeat
Presence heartbeat: sets a short-TTL Valkey key for the member and nudges
the app's stream. Presence never touches Postgres and never exposes emails.
# Record App Member Activity
Source: https://docs.textql.com/api-reference/sdk/appservice/recordappmemberactivity
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/RecordAppMemberActivity
Append-only per-member activity log. Listing is own rows only; no
cross-member reads in this release.
# Refresh App
Source: https://docs.textql.com/api-reference/sdk/appservice/refreshapp
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/RefreshApp
Re-fetches data sources, rebuilds the document with a fresh snapshot, re-uploads.
# Remove App Upload
Source: https://docs.textql.com/api-reference/sdk/appservice/removeappupload
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/RemoveAppUpload
Removes only this viewer's app association, never the dataset itself.
# Restore App Version
Source: https://docs.textql.com/api-reference/sdk/appservice/restoreappversion
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/RestoreAppVersion
# Set App Member State
Source: https://docs.textql.com/api-reference/sdk/appservice/setappmemberstate
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/SetAppMemberState
# Set Favorite
Source: https://docs.textql.com/api-reference/sdk/appservice/setfavorite
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/SetFavorite
Favorite/unfavorite a library item (app or dashboard) for the calling member.
Per-member, per-org; favorited=false hard-deletes the row. Covers both primitives
since the merged library page pins apps and dashboards through one client.
# Update App
Source: https://docs.textql.com/api-reference/sdk/appservice/updateapp
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/UpdateApp
# Verify App Render
Source: https://docs.textql.com/api-reference/sdk/appservice/verifyapprender
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.app.AppService/VerifyAppRender
Renders the live artifact in the production sandbox and returns browser diagnostics.
This is synchronous so callers can verify an app before sharing its URL.
# Configure Otlp Export
Source: https://docs.textql.com/api-reference/sdk/auditlogservice/configureotlpexport
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.audit_log.AuditLogService/ConfigureOtlpExport
# Configure S3 Export
Source: https://docs.textql.com/api-reference/sdk/auditlogservice/configures3export
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.audit_log.AuditLogService/ConfigureS3Export
# Delete Otlp Export Config
Source: https://docs.textql.com/api-reference/sdk/auditlogservice/deleteotlpexportconfig
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.audit_log.AuditLogService/DeleteOtlpExportConfig
# Delete S3 Export Config
Source: https://docs.textql.com/api-reference/sdk/auditlogservice/deletes3exportconfig
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.audit_log.AuditLogService/DeleteS3ExportConfig
# Get Otlp Export Config
Source: https://docs.textql.com/api-reference/sdk/auditlogservice/getotlpexportconfig
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.audit_log.AuditLogService/GetOtlpExportConfig
# Get S3 Export Config
Source: https://docs.textql.com/api-reference/sdk/auditlogservice/gets3exportconfig
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.audit_log.AuditLogService/GetS3ExportConfig
# List Audit Logs
Source: https://docs.textql.com/api-reference/sdk/auditlogservice/listauditlogs
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.audit_log.AuditLogService/ListAuditLogs
# Test Otlp Export Connection
Source: https://docs.textql.com/api-reference/sdk/auditlogservice/testotlpexportconnection
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.audit_log.AuditLogService/TestOtlpExportConnection
# Test S3 Export Connection
Source: https://docs.textql.com/api-reference/sdk/auditlogservice/tests3exportconnection
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.audit_log.AuditLogService/TestS3ExportConnection
# Trigger Otlp Export
Source: https://docs.textql.com/api-reference/sdk/auditlogservice/triggerotlpexport
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.audit_log.AuditLogService/TriggerOtlpExport
# Trigger S3 Export
Source: https://docs.textql.com/api-reference/sdk/auditlogservice/triggers3export
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.audit_log.AuditLogService/TriggerS3Export
# Python SDK release log
Source: https://docs.textql.com/api-reference/sdk/changelog
Release history for the TextQL Python SDK
Install the latest release from [PyPI](https://pypi.org/project/textql-sdk/):
```bash theme={null}
pip install textql-sdk
```
[View `textql-sdk` v1.1.30 on PyPI](https://pypi.org/project/textql-sdk/1.1.30).
```bash theme={null}
pip install textql-sdk==1.1.30
```
Generated with [Speakeasy CLI 1.798.0 (generator 2.938.0)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.29 on PyPI](https://pypi.org/project/textql-sdk/1.1.29).
```bash theme={null}
pip install textql-sdk==1.1.29
```
Generated with [Speakeasy CLI 1.796.4 (generator 2.935.1)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.28 on PyPI](https://pypi.org/project/textql-sdk/1.1.28).
```bash theme={null}
pip install textql-sdk==1.1.28
```
Generated with [Speakeasy CLI 1.796.4 (generator 2.935.1)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.27 on PyPI](https://pypi.org/project/textql-sdk/1.1.27).
```bash theme={null}
pip install textql-sdk==1.1.27
```
Generated with [Speakeasy CLI 1.796.4 (generator 2.935.1)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.26 on PyPI](https://pypi.org/project/textql-sdk/1.1.26).
```bash theme={null}
pip install textql-sdk==1.1.26
```
Generated with [Speakeasy CLI 1.796.4 (generator 2.935.1)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.25 on PyPI](https://pypi.org/project/textql-sdk/1.1.25).
```bash theme={null}
pip install textql-sdk==1.1.25
```
Generated with [Speakeasy CLI 1.796.4 (generator 2.935.1)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.24 on PyPI](https://pypi.org/project/textql-sdk/1.1.24).
```bash theme={null}
pip install textql-sdk==1.1.24
```
Generated with [Speakeasy CLI 1.796.4 (generator 2.935.1)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.23 on PyPI](https://pypi.org/project/textql-sdk/1.1.23).
```bash theme={null}
pip install textql-sdk==1.1.23
```
Generated with [Speakeasy CLI 1.796.4 (generator 2.935.1)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.22 on PyPI](https://pypi.org/project/textql-sdk/1.1.22).
```bash theme={null}
pip install textql-sdk==1.1.22
```
Generated with [Speakeasy CLI 1.796.4 (generator 2.935.1)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.21 on PyPI](https://pypi.org/project/textql-sdk/1.1.21).
```bash theme={null}
pip install textql-sdk==1.1.21
```
Generated with [Speakeasy CLI 1.796.4 (generator 2.935.1)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.20 on PyPI](https://pypi.org/project/textql-sdk/1.1.20).
```bash theme={null}
pip install textql-sdk==1.1.20
```
Generated with [Speakeasy CLI 1.796.4 (generator 2.935.1)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.19 on PyPI](https://pypi.org/project/textql-sdk/1.1.19).
```bash theme={null}
pip install textql-sdk==1.1.19
```
Generated with [Speakeasy CLI 1.796.4 (generator 2.935.1)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.18 on PyPI](https://pypi.org/project/textql-sdk/1.1.18).
```bash theme={null}
pip install textql-sdk==1.1.18
```
Generated with [Speakeasy CLI 1.796.4 (generator 2.935.1)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.17 on PyPI](https://pypi.org/project/textql-sdk/1.1.17).
```bash theme={null}
pip install textql-sdk==1.1.17
```
Generated with [Speakeasy CLI 1.796.3 (generator 2.934.1)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.16 on PyPI](https://pypi.org/project/textql-sdk/1.1.16).
```bash theme={null}
pip install textql-sdk==1.1.16
```
Generated with [Speakeasy CLI 1.796.2 (generator 2.933.0)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.15 on PyPI](https://pypi.org/project/textql-sdk/1.1.15).
```bash theme={null}
pip install textql-sdk==1.1.15
```
Generated with [Speakeasy CLI 1.796.2 (generator 2.933.0)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.14 on PyPI](https://pypi.org/project/textql-sdk/1.1.14).
```bash theme={null}
pip install textql-sdk==1.1.14
```
Generated with [Speakeasy CLI 1.796.2 (generator 2.933.0)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.13 on PyPI](https://pypi.org/project/textql-sdk/1.1.13).
```bash theme={null}
pip install textql-sdk==1.1.13
```
Generated with [Speakeasy CLI 1.796.2 (generator 2.933.0)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.12 on PyPI](https://pypi.org/project/textql-sdk/1.1.12).
```bash theme={null}
pip install textql-sdk==1.1.12
```
Generated with [Speakeasy CLI 1.796.2 (generator 2.933.0)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.11 on PyPI](https://pypi.org/project/textql-sdk/1.1.11).
```bash theme={null}
pip install textql-sdk==1.1.11
```
Generated with [Speakeasy CLI 1.796.2 (generator 2.933.0)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.10 on PyPI](https://pypi.org/project/textql-sdk/1.1.10).
```bash theme={null}
pip install textql-sdk==1.1.10
```
Generated with [Speakeasy CLI 1.796.0 (generator 2.932.15)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.9 on PyPI](https://pypi.org/project/textql-sdk/1.1.9).
```bash theme={null}
pip install textql-sdk==1.1.9
```
Generated with [Speakeasy CLI 1.796.0 (generator 2.932.15)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.8 on PyPI](https://pypi.org/project/textql-sdk/1.1.8).
```bash theme={null}
pip install textql-sdk==1.1.8
```
Generated with [Speakeasy CLI 1.795.3 (generator 2.932.9)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.7 on PyPI](https://pypi.org/project/textql-sdk/1.1.7).
```bash theme={null}
pip install textql-sdk==1.1.7
```
Generated with [Speakeasy CLI 1.795.3 (generator 2.932.9)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.6 on PyPI](https://pypi.org/project/textql-sdk/1.1.6).
```bash theme={null}
pip install textql-sdk==1.1.6
```
Generated with [Speakeasy CLI 1.795.3 (generator 2.932.9)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.5 on PyPI](https://pypi.org/project/textql-sdk/1.1.5).
```bash theme={null}
pip install textql-sdk==1.1.5
```
Generated with [Speakeasy CLI 1.795.3 (generator 2.932.9)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.4 on PyPI](https://pypi.org/project/textql-sdk/1.1.4).
```bash theme={null}
pip install textql-sdk==1.1.4
```
Generated with [Speakeasy CLI 1.795.3 (generator 2.932.9)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.3 on PyPI](https://pypi.org/project/textql-sdk/1.1.3).
```bash theme={null}
pip install textql-sdk==1.1.3
```
Generated with [Speakeasy CLI 1.795.0 (generator 2.931.0)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.2 on PyPI](https://pypi.org/project/textql-sdk/1.1.2).
```bash theme={null}
pip install textql-sdk==1.1.2
```
Generated with [Speakeasy CLI 1.795.0 (generator 2.931.0)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.1 on PyPI](https://pypi.org/project/textql-sdk/1.1.1).
```bash theme={null}
pip install textql-sdk==1.1.1
```
Generated with [Speakeasy CLI 1.795.0 (generator 2.931.0)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.1.0 on PyPI](https://pypi.org/project/textql-sdk/1.1.0).
```bash theme={null}
pip install textql-sdk==1.1.0
```
Generated with [Speakeasy CLI 1.795.0 (generator 2.931.0)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.0.22 on PyPI](https://pypi.org/project/textql-sdk/1.0.22).
```bash theme={null}
pip install textql-sdk==1.0.22
```
Generated with [Speakeasy CLI 1.793.2 (generator 2.928.0)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.0.21 on PyPI](https://pypi.org/project/textql-sdk/1.0.21).
```bash theme={null}
pip install textql-sdk==1.0.21
```
Generated with [Speakeasy CLI 1.793.1 (generator 2.928.0)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.0.20 on PyPI](https://pypi.org/project/textql-sdk/1.0.20).
```bash theme={null}
pip install textql-sdk==1.0.20
```
Generated with [Speakeasy CLI 1.793.1 (generator 2.928.0)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.0.19 on PyPI](https://pypi.org/project/textql-sdk/1.0.19).
```bash theme={null}
pip install textql-sdk==1.0.19
```
Generated with [Speakeasy CLI 1.793.1 (generator 2.928.0)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.0.18 on PyPI](https://pypi.org/project/textql-sdk/1.0.18).
```bash theme={null}
pip install textql-sdk==1.0.18
```
Generated with [Speakeasy CLI 1.792.0 (generator 2.927.0)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.0.17 on PyPI](https://pypi.org/project/textql-sdk/1.0.17).
```bash theme={null}
pip install textql-sdk==1.0.17
```
Generated with [Speakeasy CLI 1.791.4 (generator 2.926.8)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.0.16 on PyPI](https://pypi.org/project/textql-sdk/1.0.16).
```bash theme={null}
pip install textql-sdk==1.0.16
```
Generated with [Speakeasy CLI 1.791.4 (generator 2.926.8)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.0.15 on PyPI](https://pypi.org/project/textql-sdk/1.0.15).
```bash theme={null}
pip install textql-sdk==1.0.15
```
Generated with [Speakeasy CLI 1.791.4 (generator 2.926.8)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.0.14 on PyPI](https://pypi.org/project/textql-sdk/1.0.14).
```bash theme={null}
pip install textql-sdk==1.0.14
```
Generated with [Speakeasy CLI 1.791.3 (generator 2.926.2)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.0.13 on PyPI](https://pypi.org/project/textql-sdk/1.0.13).
```bash theme={null}
pip install textql-sdk==1.0.13
```
Generated with [Speakeasy CLI 1.791.1 (generator 2.926.2)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.0.12 on PyPI](https://pypi.org/project/textql-sdk/1.0.12).
```bash theme={null}
pip install textql-sdk==1.0.12
```
Generated with [Speakeasy CLI 1.791.0 (generator 2.924.0)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.0.11 on PyPI](https://pypi.org/project/textql-sdk/1.0.11).
```bash theme={null}
pip install textql-sdk==1.0.11
```
Generated with [Speakeasy CLI 1.791.0 (generator 2.924.0)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.0.10 on PyPI](https://pypi.org/project/textql-sdk/1.0.10).
```bash theme={null}
pip install textql-sdk==1.0.10
```
[View `textql-sdk` v1.0.9 on PyPI](https://pypi.org/project/textql-sdk/1.0.9).
```bash theme={null}
pip install textql-sdk==1.0.9
```
Generated with [Speakeasy CLI 1.791.0 (generator 2.924.0)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.0.8 on PyPI](https://pypi.org/project/textql-sdk/1.0.8).
```bash theme={null}
pip install textql-sdk==1.0.8
```
Generated with [Speakeasy CLI 1.791.0 (generator 2.924.0)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.0.7 on PyPI](https://pypi.org/project/textql-sdk/1.0.7).
```bash theme={null}
pip install textql-sdk==1.0.7
```
Generated with [Speakeasy CLI 1.791.0 (generator 2.924.0)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.0.6 on PyPI](https://pypi.org/project/textql-sdk/1.0.6).
```bash theme={null}
pip install textql-sdk==1.0.6
```
Generated with [Speakeasy CLI 1.791.0 (generator 2.924.0)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.0.5 on PyPI](https://pypi.org/project/textql-sdk/1.0.5).
```bash theme={null}
pip install textql-sdk==1.0.5
```
Generated with [Speakeasy CLI 1.790.3 (generator 2.918.4)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.0.4 on PyPI](https://pypi.org/project/textql-sdk/1.0.4).
```bash theme={null}
pip install textql-sdk==1.0.4
```
Generated with [Speakeasy CLI 1.790.3 (generator 2.918.4)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.0.3 on PyPI](https://pypi.org/project/textql-sdk/1.0.3).
```bash theme={null}
pip install textql-sdk==1.0.3
```
Generated with [Speakeasy CLI 1.790.3 (generator 2.918.4)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.0.2 on PyPI](https://pypi.org/project/textql-sdk/1.0.2).
```bash theme={null}
pip install textql-sdk==1.0.2
```
Generated with [Speakeasy CLI 1.790.3 (generator 2.918.4)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.0.1 on PyPI](https://pypi.org/project/textql-sdk/1.0.1).
```bash theme={null}
pip install textql-sdk==1.0.1
```
Generated with [Speakeasy CLI 1.790.3 (generator 2.918.4)](https://github.com/speakeasy-api/speakeasy).
[View `textql-sdk` v1.0.0 on PyPI](https://pypi.org/project/textql-sdk/1.0.0).
```bash theme={null}
pip install textql-sdk==1.0.0
```
Generated with [Speakeasy CLI 1.790.2 (generator 2.918.3)](https://github.com/speakeasy-api/speakeasy).
# Approve Context Prompt Change
Source: https://docs.textql.com/api-reference/sdk/chatservice/approvecontextpromptchange
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/ApproveContextPromptChange
# Approve Ontology Change
Source: https://docs.textql.com/api-reference/sdk/chatservice/approveontologychange
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/ApproveOntologyChange
# Attach Agent To Chat
Source: https://docs.textql.com/api-reference/sdk/chatservice/attachagenttochat
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/AttachAgentToChat
# Attach App
Source: https://docs.textql.com/api-reference/sdk/chatservice/attachapp
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/AttachApp
# Attach Dashboard
Source: https://docs.textql.com/api-reference/sdk/chatservice/attachdashboard
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/AttachDashboard
# Attach Dataset
Source: https://docs.textql.com/api-reference/sdk/chatservice/attachdataset
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/AttachDataset
# Bookmark Chat
Source: https://docs.textql.com/api-reference/sdk/chatservice/bookmarkchat
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/BookmarkChat
Bookmark management
# Cancel Stream
Source: https://docs.textql.com/api-reference/sdk/chatservice/cancelstream
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/CancelStream
# Check Chat Permissions
Source: https://docs.textql.com/api-reference/sdk/chatservice/checkchatpermissions
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/CheckChatPermissions
# Check Health
Source: https://docs.textql.com/api-reference/sdk/chatservice/checkhealth
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/CheckHealth
# Check Streamlit Health
Source: https://docs.textql.com/api-reference/sdk/chatservice/checkstreamlithealth
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/CheckStreamlitHealth
# Create Chat
Source: https://docs.textql.com/api-reference/sdk/chatservice/createchat
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/CreateChat
# Delete Chat
Source: https://docs.textql.com/api-reference/sdk/chatservice/deletechat
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/DeleteChat
# Dismiss Questions
Source: https://docs.textql.com/api-reference/sdk/chatservice/dismissquestions
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/DismissQuestions
# Duplicate Chat
Source: https://docs.textql.com/api-reference/sdk/chatservice/duplicatechat
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/DuplicateChat
# Get API Chat Answer
Source: https://docs.textql.com/api-reference/sdk/chatservice/getapichatanswer
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/GetAPIChatAnswer
# Get Artifact
Source: https://docs.textql.com/api-reference/sdk/chatservice/getartifact
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/GetArtifact
Full artifact data (lazy load when selected)
# Get Auto Attached Files
Source: https://docs.textql.com/api-reference/sdk/chatservice/getautoattachedfiles
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/GetAutoAttachedFiles
# Get Chat
Source: https://docs.textql.com/api-reference/sdk/chatservice/getchat
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/GetChat
# Get Chat Artifacts Summary
Source: https://docs.textql.com/api-reference/sdk/chatservice/getchatartifactssummary
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/GetChatArtifactsSummary
Artifact summaries for drawer (lightweight, for listing)
# Get Chat Execution Timing
Source: https://docs.textql.com/api-reference/sdk/chatservice/getchatexecutiontiming
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/GetChatExecutionTiming
# Get Chat History
Source: https://docs.textql.com/api-reference/sdk/chatservice/getchathistory
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/GetChatHistory
# Get Chats
Source: https://docs.textql.com/api-reference/sdk/chatservice/getchats
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/GetChats
# Get Completion Parameters
Source: https://docs.textql.com/api-reference/sdk/chatservice/getcompletionparameters
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/GetCompletionParameters
# Get Completion Parameters Batch
Source: https://docs.textql.com/api-reference/sdk/chatservice/getcompletionparametersbatch
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/GetCompletionParametersBatch
# Get Llm Usage
Source: https://docs.textql.com/api-reference/sdk/chatservice/getllmusage
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/GetLlmUsage
# Get Members With Chats
Source: https://docs.textql.com/api-reference/sdk/chatservice/getmemberswithchats
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/GetMembersWithChats
List distinct chat creators the user can access
# Get Playbook Chats
Source: https://docs.textql.com/api-reference/sdk/chatservice/getplaybookchats
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/GetPlaybookChats
# Poll Chat Events
Source: https://docs.textql.com/api-reference/sdk/chatservice/pollchatevents
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/PollChatEvents
# Query One Shot
Source: https://docs.textql.com/api-reference/sdk/chatservice/queryoneshot
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/QueryOneShot
External API users
# Rate Chat Cell
Source: https://docs.textql.com/api-reference/sdk/chatservice/ratechatcell
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/RateChatCell
RateChatCell appends a row to cell_rating for every click; thumbs-down also upserts a user_thumbs_down thread_warning.
# Reject Context Prompt Change
Source: https://docs.textql.com/api-reference/sdk/chatservice/rejectcontextpromptchange
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/RejectContextPromptChange
# Reject Ontology Change
Source: https://docs.textql.com/api-reference/sdk/chatservice/rejectontologychange
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/RejectOntologyChange
# Run Chat
Source: https://docs.textql.com/api-reference/sdk/chatservice/runchat
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/RunChat
# Send Message
Source: https://docs.textql.com/api-reference/sdk/chatservice/sendmessage
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/SendMessage
# Submit Context Prompt Change
Source: https://docs.textql.com/api-reference/sdk/chatservice/submitcontextpromptchange
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/SubmitContextPromptChange
# Submit Questions
Source: https://docs.textql.com/api-reference/sdk/chatservice/submitquestions
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/SubmitQuestions
Resolve a halted questions cell. Submit hands the answers to the agent and
resumes it; Dismiss hands over only the answered count and does NOT resume
(the user's next message becomes the dismissal reason).
# Unbookmark Chat
Source: https://docs.textql.com/api-reference/sdk/chatservice/unbookmarkchat
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/UnbookmarkChat
# Update Chat
Source: https://docs.textql.com/api-reference/sdk/chatservice/updatechat
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.chat.ChatService/UpdateChat
# Create Connector
Source: https://docs.textql.com/api-reference/sdk/connectorservice/createconnector
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.connector.ConnectorService/CreateConnector
# Delete Connector
Source: https://docs.textql.com/api-reference/sdk/connectorservice/deleteconnector
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.connector.ConnectorService/DeleteConnector
# Duplicate Connector
Source: https://docs.textql.com/api-reference/sdk/connectorservice/duplicateconnector
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.connector.ConnectorService/DuplicateConnector
# Execute Query
Source: https://docs.textql.com/api-reference/sdk/connectorservice/executequery
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.connector.ConnectorService/ExecuteQuery
# Get Connector
Source: https://docs.textql.com/api-reference/sdk/connectorservice/getconnector
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.connector.ConnectorService/GetConnector
# Get Connector Cell Durations
Source: https://docs.textql.com/api-reference/sdk/connectorservice/getconnectorcelldurations
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.connector.ConnectorService/GetConnectorCellDurations
# Get Connector Chats
Source: https://docs.textql.com/api-reference/sdk/connectorservice/getconnectorchats
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.connector.ConnectorService/GetConnectorChats
# Get Connector Dashboards
Source: https://docs.textql.com/api-reference/sdk/connectorservice/getconnectordashboards
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.connector.ConnectorService/GetConnectorDashboards
# Get Connectors
Source: https://docs.textql.com/api-reference/sdk/connectorservice/getconnectors
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.connector.ConnectorService/GetConnectors
# Get Connector Stats
Source: https://docs.textql.com/api-reference/sdk/connectorservice/getconnectorstats
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.connector.ConnectorService/GetConnectorStats
# Get Connector Usage
Source: https://docs.textql.com/api-reference/sdk/connectorservice/getconnectorusage
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.connector.ConnectorService/GetConnectorUsage
# Get Example Queries
Source: https://docs.textql.com/api-reference/sdk/connectorservice/getexamplequeries
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.connector.ConnectorService/GetExampleQueries
# Get Table Preview
Source: https://docs.textql.com/api-reference/sdk/connectorservice/gettablepreview
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.connector.ConnectorService/GetTablePreview
# List Connector Tables
Source: https://docs.textql.com/api-reference/sdk/connectorservice/listconnectortables
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.connector.ConnectorService/ListConnectorTables
# List Query Templates
Source: https://docs.textql.com/api-reference/sdk/connectorservice/listquerytemplates
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.connector.ConnectorService/ListQueryTemplates
# Test Connector
Source: https://docs.textql.com/api-reference/sdk/connectorservice/testconnector
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.connector.ConnectorService/TestConnector
# Update Connector
Source: https://docs.textql.com/api-reference/sdk/connectorservice/updateconnector
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.connector.ConnectorService/UpdateConnector
# Check Dashboard Health
Source: https://docs.textql.com/api-reference/sdk/dashboardservice/checkdashboardhealth
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dashboard.DashboardService/CheckDashboardHealth
# Create Dashboard
Source: https://docs.textql.com/api-reference/sdk/dashboardservice/createdashboard
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dashboard.DashboardService/CreateDashboard
CRUD operations
# Create Dashboard Folder
Source: https://docs.textql.com/api-reference/sdk/dashboardservice/createdashboardfolder
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dashboard.DashboardService/CreateDashboardFolder
Folder management
# Delete Dashboard
Source: https://docs.textql.com/api-reference/sdk/dashboardservice/deletedashboard
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dashboard.DashboardService/DeleteDashboard
# Delete Dashboard Folder
Source: https://docs.textql.com/api-reference/sdk/dashboardservice/deletedashboardfolder
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dashboard.DashboardService/DeleteDashboardFolder
# Discard Dashboard Changes
Source: https://docs.textql.com/api-reference/sdk/dashboardservice/discarddashboardchanges
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dashboard.DashboardService/DiscardDashboardChanges
# Duplicate Dashboard
Source: https://docs.textql.com/api-reference/sdk/dashboardservice/duplicatedashboard
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dashboard.DashboardService/DuplicateDashboard
# Get Dashboard
Source: https://docs.textql.com/api-reference/sdk/dashboardservice/getdashboard
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dashboard.DashboardService/GetDashboard
# Get Dashboard Version
Source: https://docs.textql.com/api-reference/sdk/dashboardservice/getdashboardversion
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dashboard.DashboardService/GetDashboardVersion
# Get Dashboard View Stats
Source: https://docs.textql.com/api-reference/sdk/dashboardservice/getdashboardviewstats
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dashboard.DashboardService/GetDashboardViewStats
View analytics
# Get Members With Dashboards
Source: https://docs.textql.com/api-reference/sdk/dashboardservice/getmemberswithdashboards
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dashboard.DashboardService/GetMembersWithDashboards
Member management
# List Dashboard Folders
Source: https://docs.textql.com/api-reference/sdk/dashboardservice/listdashboardfolders
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dashboard.DashboardService/ListDashboardFolders
# List Dashboards
Source: https://docs.textql.com/api-reference/sdk/dashboardservice/listdashboards
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dashboard.DashboardService/ListDashboards
# List Dashboard Versions
Source: https://docs.textql.com/api-reference/sdk/dashboardservice/listdashboardversions
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dashboard.DashboardService/ListDashboardVersions
Version history
# Move Dashboard To Folder
Source: https://docs.textql.com/api-reference/sdk/dashboardservice/movedashboardtofolder
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dashboard.DashboardService/MoveDashboardToFolder
# Publish Dashboard
Source: https://docs.textql.com/api-reference/sdk/dashboardservice/publishdashboard
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dashboard.DashboardService/PublishDashboard
Publishing workflow
# Regenerate Screenshot
Source: https://docs.textql.com/api-reference/sdk/dashboardservice/regeneratescreenshot
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dashboard.DashboardService/RegenerateScreenshot
Screenshot management
# Restore Dashboard Version
Source: https://docs.textql.com/api-reference/sdk/dashboardservice/restoredashboardversion
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dashboard.DashboardService/RestoreDashboardVersion
# Run Scheduled Dashboard
Source: https://docs.textql.com/api-reference/sdk/dashboardservice/runscheduleddashboard
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dashboard.DashboardService/RunScheduledDashboard
# Spawn Dashboard
Source: https://docs.textql.com/api-reference/sdk/dashboardservice/spawndashboard
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dashboard.DashboardService/SpawnDashboard
Dashboard execution
# Update Dashboard
Source: https://docs.textql.com/api-reference/sdk/dashboardservice/updatedashboard
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dashboard.DashboardService/UpdateDashboard
# Update Dashboard Folder
Source: https://docs.textql.com/api-reference/sdk/dashboardservice/updatedashboardfolder
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dashboard.DashboardService/UpdateDashboardFolder
# Update Dashboard Schedule
Source: https://docs.textql.com/api-reference/sdk/dashboardservice/updatedashboardschedule
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dashboard.DashboardService/UpdateDashboardSchedule
Scheduling
# Create Folder
Source: https://docs.textql.com/api-reference/sdk/datasetservice/createfolder
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dataset.DatasetService/CreateFolder
# Create Power BI Dataset
Source: https://docs.textql.com/api-reference/sdk/datasetservice/createpowerbidataset
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dataset.DatasetService/CreatePowerBIDataset
# Create Tableau Dataset
Source: https://docs.textql.com/api-reference/sdk/datasetservice/createtableaudataset
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dataset.DatasetService/CreateTableauDataset
Create Tableau dataset from views/datasources
# Create Upload Presign Url
Source: https://docs.textql.com/api-reference/sdk/datasetservice/createuploadpresignurl
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dataset.DatasetService/CreateUploadPresignUrl
uploads
# Delete Dataset
Source: https://docs.textql.com/api-reference/sdk/datasetservice/deletedataset
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dataset.DatasetService/DeleteDataset
Delete a dataset (soft delete)
# Export Dataset
Source: https://docs.textql.com/api-reference/sdk/datasetservice/exportdataset
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dataset.DatasetService/ExportDataset
export dataset in "raw" format – original if dataset is uploaded, converted format otherwise (defaults to CSV)
# Get Dataset
Source: https://docs.textql.com/api-reference/sdk/datasetservice/getdataset
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dataset.DatasetService/GetDataset
GetDataset, GetDatasets only return metadata
# Get Datasets
Source: https://docs.textql.com/api-reference/sdk/datasetservice/getdatasets
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dataset.DatasetService/GetDatasets
# Get Datasets By Ids
Source: https://docs.textql.com/api-reference/sdk/datasetservice/getdatasetsbyids
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dataset.DatasetService/GetDatasetsByIds
# Get Dataset Stats
Source: https://docs.textql.com/api-reference/sdk/datasetservice/getdatasetstats
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dataset.DatasetService/GetDatasetStats
# Get Dataset Values
Source: https://docs.textql.com/api-reference/sdk/datasetservice/getdatasetvalues
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dataset.DatasetService/GetDatasetValues
# Get Folders
Source: https://docs.textql.com/api-reference/sdk/datasetservice/getfolders
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dataset.DatasetService/GetFolders
for AR: CreateFolderACL, UpdateFolderACL, DeleteFolderACL
# Process Upload Presign Url
Source: https://docs.textql.com/api-reference/sdk/datasetservice/processuploadpresignurl
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dataset.DatasetService/ProcessUploadPresignUrl
for AR: CreateDatasetACL, UpdateDatasetACL, DeleteDatasetACL
# Update Dataset
Source: https://docs.textql.com/api-reference/sdk/datasetservice/updatedataset
api-reference/speakeasy/textql-api-with-code-samples.yaml POST /textql.rpc.public.dataset.DatasetService/UpdateDataset
Update dataset metadata
# Embedding a Data App
Source: https://docs.textql.com/api-reference/sdk/embed
Render a TextQL Data App inside your own web app with @textql/sdk.
For a runnable version of everything below, see the
[embed-app example](https://github.com/TextQLLabs/textql-ts-sdk/tree/main/examples/embed-app).
Embedding is available in the **TypeScript SDK** (`@textql/sdk`). The React
component described here needs **v1.4.0+**; the server handler works from
v1.3.8. On-prem, `TEXTQL_SERVER_URL` is read from **v1.4.1+**.
```bash theme={null}
npm install @textql/sdk
```
Two environment variables on your server:
```bash theme={null}
TEXTQL_API_KEY=... # Settings → Developers → API Keys (admin only)
TEXTQL_APP_ID=... # from the app's URL in TextQL: /app/
```
## Quickstart
**Server** — one catch-all route. This is the only place your API key lives.
```ts theme={null}
// app/api/textql/[...path]/route.ts
import { createEmbedHandler } from "@textql/sdk/embed";
export const { GET, POST } = createEmbedHandler();
```
**Browser** — in React, one import and one tag:
```tsx theme={null}
import { TextqlApp } from "@textql/sdk/embed/react";
export default function Page() {
return ;
}
```
That is the whole integration. Both halves default to `/api/textql`, so nothing
needs configuring on the happy path.
## Your routes are the access control
The API key is org-wide, so it stays on your server and the browser talks only
to your routes — it is never told which app it renders and cannot ask for a
different one. But nothing in the handler knows **who the caller is**. Without
an `authorize` hook, the app is visible to anyone who can reach the route.
```ts theme={null}
export const { GET, POST } = createEmbedHandler({
authorize: async (request) => (await getSession(request)) !== null,
});
```
Return `false` or throw to reject.
## The React component
`@textql/sdk/embed/react` is a thin wrapper over the same custom element.
Prefer it to the raw tag: JSX has no type for a custom element, and React
cannot bind the events below because they are `CustomEvent`s.
```tsx theme={null}
setTitle(meta.name)}
onReady={(meta) => console.log("bridge up", meta)}
onError={(error) => console.error(error.message)}
/>
```
Where `createEmbedHandler` is mounted. Must match the handler's `basePath`.
The element has no intrinsic size, like an iframe. Give it a real height.
Applied to the host element.
Metadata arrived: `name`, `screenshotUrl`, and the app's compute `functions`.
Depends only on your server, so it fires even if the app's bridge never
connects — use it to title your own chrome.
The app's runtime completed its handshake.
The app reported a runtime error. Already logged to the console by the
element.
### Server-side rendering
`` carries the `"use client"` directive and loads the custom
element in an effect, so it server-renders to an inert tag and upgrades on the
client. That also code-splits the element out of your initial bundle.
Do **not** import `@textql/sdk/embed/element` directly in a Next.js app. It
defines a class extending `HTMLElement` at module scope, so importing it on a
server throws `HTMLElement is not defined` — including inside a `"use client"`
component, which Next.js still renders on the server.
`react` is an optional peer dependency (`^18 || ^19`). Nothing else in the SDK
needs it.
## Other frameworks
It is a custom element, so there is no framework binding to install.
```svelte theme={null}
```
Without a bundler, serve the element from your own origin. It is one
self-contained file — it imports nothing, so serving it is a copy:
```bash theme={null}
npm install @textql/sdk@^1.4.1
cp node_modules/@textql/sdk/esm/embed/element.js public/vendor/textql-element.js
```
```html theme={null}
```
Copying it keeps the version pinned in your lockfile, where your existing
review and scanning already look. A CDN saves the copy for a prototype:
```html theme={null}
```
Pin the version if you do. Don't ship the CDN form to a restricted network:
it puts a third-party host in your `script-src`, adds an outbound request on
every page load, and does not resolve air-gapped.
Express, Fastify, and bare `node:http` predate the Web `Request` object, so
wrap the handler:
```ts theme={null}
import { createEmbedHandler, toNodeHandler } from "@textql/sdk/embed";
const embed = toNodeHandler(createEmbedHandler());
app.use(async (req, res, next) => {
if (!(await embed(req, res))) next();
});
```
Outside React, the same three events are `CustomEvent`s on the element:
```ts theme={null}
element.addEventListener("app-meta", (event) => setTitle(event.detail.name));
```
`element.meta` holds the same value for a listener that attached late.
## Sizing
Data Apps lay out against the full viewport — the same region they get inside
TextQL — so a narrow content column breaks the app's own layout, not the
element. Full-bleed width and a real height are the safe defaults.
## Compute functions
Apps that compute call back through your server. The handler relays them to
`POST {basePath}/compute` and **refuses any function name the app does not
declare**, so the route cannot become a generic runner for anything your API
key can reach.
The declared names arrive as `functions` on `onMeta`. An app with none renders
exactly the same but never calls back, leaving the route unused.
TextQL rate-limits compute server-side and returns `resource_exhausted`. A
production host should retry that with backoff.
## Options
| Option | Default | |
| - | - | - |
| `appId` | `TEXTQL_APP_ID` | A function `(request) => string` picks per request — from a session, tenant header, or route param. |
| `client` | built from `TEXTQL_API_KEY` | Pass your own `Textql` instance. |
| `basePath` | `/api/textql` | Where the handler is mounted. Must match `apiBase`. |
| `authorize` | none | Return `false` or throw to reject. |
| `rehostDocument` | `true` | See below. |
The handler serves three routes under `basePath` and returns `null` for
anything else, so it composes with your own routing:
| Route | |
| - | - |
| `GET {basePath}/app` | the app's name, screenshot, and compute functions |
| `GET {basePath}/document` | the app's HTML, served from your origin |
| `POST {basePath}/compute` | runs one declared compute function |
On-prem: set `TEXTQL_SERVER_URL` to the plain host. The SDK appends
`/rpc/public` itself.
## Why the document is served from your origin
TextQL pins a published app to the one origin it was published for, twice over:
| Pin | Effect elsewhere |
| - | - |
| `frame-ancestors` CSP header | the browser refuses to frame the document at all |
| `ANA_RUNTIME_CONFIG.hostOrigin`, baked in at publish time | the only origin the app's runtime will message, so the bridge is inert |
So `GET {basePath}/document` fetches the app's HTML server-side and re-serves it
from your origin: your response carries no `frame-ancestors`, and `hostOrigin`
is rewritten to your origin. A `` keeps every subresource loading
from the CDN, which already serves them with `Access-Control-Allow-Origin: *`.
This is a workaround, with costs worth knowing:
* Every document load proxies through your server as `no-store`, so the entry
document is not CDN-cached. Subresources still are.
* The rewrite is pinned to a string emitted by TextQL's app shell. If that shape
changes, the handler returns a 502 telling you to upgrade rather than serving
a document whose bridge will never connect.
* The response carries `content-security-policy: sandbox allow-scripts`.
Untrusted third-party HTML is being served from *your* origin, and that header
is what keeps it out of your cookies and `localStorage`. If you reimplement
this route, keep it.
Set `rehostDocument: false` to point the iframe straight at the signed CDN URL
instead. That is the better path, and it works once your origin is allowed
platform-side.
## On-premise and restricted networks
Nothing in the integration needs a TextQL-operated origin at runtime, so long as
your instance also stores rendered apps somewhere you operate. Point the handler
at your instance and serve the element yourself, and every host the browser
reaches is one you run:
```bash theme={null}
TEXTQL_SERVER_URL=https://textql.internal.example.com
```
Every client reads `TEXTQL_SERVER_URL` from **v1.4.1+** — the embed handler,
`new Textql()`, and `createStreamingClient`. An explicit `serverURL` still
wins. On earlier versions the variable is ignored and the SDK silently
defaults to `app.textql.com`; pass the host at each construction site
instead — `createEmbedHandler({ client: new Textql({ serverURL }) })`.
| What the browser loads | From |
| - | - |
| the element script | your origin, once copied out of `node_modules` |
| `{basePath}/app`, `/document`, `/compute` | your origin — the handler's three routes |
| the app document's subresources | the asset origin your instance signs URLs for, via the injected `` |
| the poster screenshot, before the app loads | the same asset origin |
Check that last pair before assuming air-gapped. `rehostDocument` re-serves the
entry document from your origin, but the scripts and styles inside it still load
from wherever your instance stores rendered apps — your own object storage
on-prem, TextQL's CDN against cloud.
With the element self-hosted and `rehostDocument` on, the host page needs
`script-src 'self'` and `frame-src 'self'` — the iframe's `src` is your own
`{basePath}/document` — plus `style-src 'unsafe-inline'`, because the element
writes its shadow-DOM stylesheet as an inline `