curl -X POST \
--url 'https://{cluster}/api/rest/2.0/configurations/features/search' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {token}' \
--data-raw '{
"scope": "CLUSTER",
"category": "GENERAL_ACCESS"
}'
Feature Management
The Feature Management API lets Cluster and Org admins retrieve feature configurations, assign features to Orgs, and set feature values programmatically. These endpoints replicate the feature management capabilities available in the new Admin portal UI.
All endpoints are under /api/rest/2.0/configurations/features/ and are available from ThoughtSpot Cloud 26.10.0.cl.
Before you begin🔗
Required privileges🔗
All Feature Management API endpoints require the ADMINISTRATION or ORG_ADMINISTRATION privilege. The ORG_ADMINISTRATION privilege applies only to Org admins.
If Role-Based Access Control (RBAC) is enabled on your instance, these privileges are granted through roles.
Prerequisites🔗
-
Feature Management must be enabled on your ThoughtSpot instance. If it is not enabled, the API returns a
404error. -
To set a feature value at
ORGscope, the Org must be assigned to that feature. Otherwise, the API returns a403error. To assign Orgs to a feature, see Update feature assignments.
Feature scope🔗
Feature configurations exist at two levels:
- Cluster scope
-
The Cluster-level default, visible to Cluster admins. Returns
assigned_orgsandis_org_awarefor each feature. - Org scope
-
A per-Org value override, visible to Org admins. Returns
element_type,element_config, andelement_valuefor each feature.
Feature identifiers🔗
Each feature can be referenced by its:
-
feature_name: a human-readable name, such asindex_columns. -
feature_id: the underlying system identifier, such asfeature.search.columnIndexing.
Both forms are accepted in requests to any endpoint that takes a feature_identifier.
Feature categories🔗
Features are grouped into availability categories:
-
GENERAL_ACCESS: generally available features. This is the default. -
EARLY_ACCESS: features in early access.
Search features🔗
The POST /api/rest/2.0/configurations/features/search API endpoint returns the feature configurations available on the ThoughtSpot instance. Requires the ADMINISTRATION or ORG_ADMINISTRATION privilege. Org admins with the ORG_ADMINISTRATION privilege can call this endpoint only with scope set to ORG.
A successful request returns 200 OK and an array of feature groups. Each group contains a feature_group name and a features array. The fields returned for each feature depend on the scope of the request. For more information, see Feature scope.
Request parameters🔗
| Parameter | Type | Required | Description |
|---|---|---|---|
| string | Required |
|
| integer | Conditional | Numeric ID of the Org to scope the search to. Required when |
| string | Optional | Feature availability category: |
Example request: Cluster view🔗
API response: Cluster view🔗
[
{
"feature_group": "search",
"docs_url": null,
"features": [
{
"feature_id": "feature.search.columnIndexing",
"feature_name": "index_columns",
"assigned_orgs": [
{
"org_id": 0,
"org_name": "Primary"
}
],
"is_org_aware": true,
"feature_value": null,
"docs_url": null
}
]
}
]
Example request: Org view🔗
curl -X POST \
--url 'https://{cluster}/api/rest/2.0/configurations/features/search' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {token}' \
--data-raw '{
"scope": "ORG",
"org_identifier": 1,
"category": "GENERAL_ACCESS"
}'
API response: Org view🔗
[
{
"feature_group": "spotter",
"docs_url": null,
"features": [
{
"feature_id": "feature.spotter.liveboardAssist",
"feature_name": "spotter_on_liveboard",
"assigned_orgs": null,
"is_org_aware": null,
"feature_value": null,
"element_type": "toggle",
"element_config": null,
"element_value": "true",
"docs_url": null
}
]
},
{
"feature_group": "downloads",
"docs_url": null,
"features": [
{
"feature_id": "feature.export.fileInstructions",
"feature_name": "downloaded_file_instructions",
"assigned_orgs": null,
"is_org_aware": null,
"feature_value": null,
"element_type": "input",
"element_config": {
"type": "textarea"
},
"element_value": "Internal use only",
"docs_url": null
}
]
}
]
Update feature assignments🔗
The POST /api/rest/2.0/configurations/features/assignments/update API endpoint updates the Org assignments for a feature. Available to Cluster admins only. Org admins cannot call this endpoint. Requires the ADMINISTRATION privilege.
A successful request returns 200 OK and a FeatureAssignmentResponse object with feature_id, feature_name, and the updated assigned_orgs list.
Request parameters🔗
| Parameter | Type | Required | Description |
|---|---|---|---|
| string | Required | Feature name ( |
| array of integers | Required | Numeric IDs of the Orgs to assign. Send an empty array with |
| string | Optional | Type of assignment update: |
|
Caution
|
If you omit |
Example request: add Org assignments🔗
curl -X POST \
--url 'https://{cluster}/api/rest/2.0/configurations/features/assignments/update' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {token}' \
--data-raw '{
"feature_identifier": "index_columns",
"org_identifiers": [1, 2],
"operation": "ADD"
}'
API response: add Org assignments🔗
{
"feature_id": "feature.search.columnIndexing",
"feature_name": "index_columns",
"assigned_orgs": [
{ "org_id": 1, "org_name": "Acme" },
{ "org_id": 2, "org_name": "Beta" }
]
}
Example request: remove all Org assignments🔗
curl -X POST \
--url 'https://{cluster}/api/rest/2.0/configurations/features/assignments/update' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {token}' \
--data-raw '{
"feature_identifier": "index_columns",
"org_identifiers": [],
"operation": "REPLACE"
}'
Update feature value🔗
The POST /api/rest/2.0/configurations/features/values/update API endpoint sets the value of a feature at the Cluster or Org scope. Requires the ADMINISTRATION or ORG_ADMINISTRATION privilege. The ORG_ADMINISTRATION privilege applies only to Org admins.
A successful request returns 200 OK and a FeatureValueResponse object with feature_id, feature_name, and the updated feature_value.
|
Warning
|
Setting |
Request parameters🔗
| Parameter | Type | Required | Description |
|---|---|---|---|
| string | Required | Scope at which to set the value: |
| integer | Conditional | Numeric ID of the Org for which to set the value. Required when |
| string | Required | Feature name ( |
| string | Required | New value to assign to the feature, as a string. For toggle features, use |
| boolean | Conditional | Applicable only when |
Example request: set an Org-level override🔗
curl -X POST \
--url 'https://{cluster}/api/rest/2.0/configurations/features/values/update' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {token}' \
--data-raw '{
"scope": "ORG",
"org_identifier": 1,
"feature_identifier": "index_columns",
"feature_value": "true"
}'
Example request: set Cluster value and reset all Org overrides🔗
curl -X POST \
--url 'https://{cluster}/api/rest/2.0/configurations/features/values/update' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer {token}' \
--data-raw '{
"scope": "CLUSTER",
"feature_identifier": "index_columns",
"feature_value": "true",
"reset_org_overrides": true
}'
API response: set Cluster value and reset all Org overrides🔗
{
"feature_id": "feature.search.columnIndexing",
"feature_name": "index_columns",
"feature_value": "true"
}