From dcc5d2eeff126e4b73c0b5cb21fa4f1531904a32 Mon Sep 17 00:00:00 2001 From: Umesh Koshyari Date: Mon, 1 Jun 2026 18:42:37 +0530 Subject: [PATCH 1/2] Testing Public API --- api-spec/openapiSpecv3-2_0.json | 362 ++++++++++++++++++++++++++++++-- 1 file changed, 348 insertions(+), 14 deletions(-) diff --git a/api-spec/openapiSpecv3-2_0.json b/api-spec/openapiSpecv3-2_0.json index 69f1bb3c..57302bca 100644 --- a/api-spec/openapiSpecv3-2_0.json +++ b/api-spec/openapiSpecv3-2_0.json @@ -6802,6 +6802,304 @@ } } }, + "/api/rest/2.0/localizations/manual-translation/delete": { + "post": { + "operationId": "deleteManualTranslations", + "description": "\nDelete manual translations.
Version: 26.7.0.cl or later\n\nVersion: 26.7.0.cl or later\n\nDeletes all manual translations for the org.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**), `ORG_ADMINISTRATION` (**Can administer Org**), or `APPLICATION_ADMINISTRATION` (**Can administer application**) privilege.\n\n#### Usage guidelines\n\n- This deletes **all** translation entries for the targeted org. The operation cannot be undone.\n- Set `scope` to `CLUSTER` to delete translations uploaded in the All-Org context.\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Manual Translation", + "26.7.0.cl" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeleteManualTranslationsRequest" + } + } + }, + "required": true + }, + "parameters": [], + "responses": { + "204": { + "description": "Translations deleted successfully." + }, + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Unexpected error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/rest/2.0/localizations/manual-translation/export": { + "post": { + "operationId": "exportManualTranslations", + "description": "\nExport manual translations as a CSV file.
Version: 26.7.0.cl or later\n\nVersion: 26.7.0.cl or later\n\nDownloads all manual translations for the org as a CSV file.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**), `ORG_ADMINISTRATION` (**Can administer Org**), or `APPLICATION_ADMINISTRATION` (**Can administer application**) privilege.\n\n#### Usage guidelines\n\n- The response is a CSV file with columns: `content`, `locale`, `translated-content`.\n- Set `scope` to `CLUSTER` to export translations from the All-Org context.\n- Returns a `404` error if no translations exist for the targeted org or cluster scope.\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Manual Translation", + "26.7.0.cl" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ExportManualTranslationsRequest" + } + } + }, + "required": true + }, + "parameters": [], + "responses": { + "200": { + "description": "CSV file downloaded successfully.", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + }, + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No translations file found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Unexpected error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/rest/2.0/localizations/manual-translation/locales/{locale}/export": { + "post": { + "operationId": "getManualTranslationBundle", + "description": "\nGet translations bundle for a locale.
Version: 26.7.0.cl or later\n\nVersion: 26.7.0.cl or later\n\nRetrieves all translations for a specific locale as a JSON map.\n\nAvailable to all authenticated users. No additional privileges are required.\n\n#### Usage guidelines\n\n- The `locale` parameter must be a lowercase, hyphenated locale code matching the pattern `^[a-z]{2,}(-[a-z0-9]{2,})?$` (for example, `fr-fr`, `de-de`, `ja-jp`).\n- Returns a JSON object with a `translations` map where each key is the original string and each value is the translated string.\n- If the org has no translations for the requested locale, the endpoint falls back to cluster-level translations.\n- Returns an empty `translations` map (not an error) if no entries exist at either level.\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Manual Translation", + "26.7.0.cl" + ], + "parameters": [ + { + "in": "path", + "name": "locale", + "required": true, + "schema": { + "type": "string" + }, + "description": "Locale code for which to retrieve translations. Must be lowercase\nand hyphenated, for example `fr-fr`, `de-de`, `ja-jp`." + } + ], + "responses": { + "200": { + "description": "Translation bundle retrieved successfully.", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + }, + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "No translations found for the requested locale.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Unexpected error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/api/rest/2.0/localizations/manual-translation/import": { + "post": { + "operationId": "importManualTranslations", + "description": "\nImport manual translations from a CSV file.
Version: 26.7.0.cl or later\n\nVersion: 26.7.0.cl or later\n\nUploads a CSV file containing manual translations and upserts them into the database.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**), `ORG_ADMINISTRATION` (**Can administer Org**), or `APPLICATION_ADMINISTRATION` (**Can administer application**) privilege.\n\n#### Usage guidelines\n\n- The CSV file must have exactly three columns in this order: `content`, `locale`, `translated-content`.\n- Maximum file size: **30 MB**. Maximum rows: **10,000**.\n- Only `.csv` files are accepted.\n- Locale codes must be lowercase and hyphenated (for example, `fr-fr`, `de-de`, `ja-jp`).\n- The import performs an **upsert**: existing entries matched by `(org_id, locale, content)` are updated; new entries are inserted. Entries not in the upload are left untouched.\n- Set `scope` to `CLUSTER` to upload translations to the All-Org context. Cluster-level translations act as defaults for orgs that have no translations for a locale.\n\n\n\n\n#### Endpoint URL\n", + "tags": [ + "Manual Translation", + "26.7.0.cl" + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImportManualTranslationsRequest" + } + } + }, + "required": true + }, + "parameters": [], + "responses": { + "204": { + "description": "Translations uploaded and stored successfully." + }, + "400": { + "description": "Invalid request.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden access.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "Unexpected error.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, "/api/rest/2.0/metadata/worksheets/convert": { "post": { "operationId": "convertWorksheetToModel", @@ -22613,8 +22911,7 @@ "USER", "USER_GROUP", "ROLE", - "FEEDBACK", - "COLLECTION" + "FEEDBACK" ], "description": " Type of metadata.\n \n\nRequired if the name of the object is set as the identifier. This attribute is optional when the object GUID is specified as the identifier.", "nullable": true @@ -27776,6 +28073,55 @@ "log_type" ] }, + "DeleteManualTranslationsRequest": { + "type": "object", + "properties": { + "scope": { + "description": "Org scope for the delete. `ORG` (default) targets the calling\nuser's current org. `CLUSTER` targets the All-Org context.", + "default": "ORG", + "type": "string", + "enum": [ + "ORG", + "CLUSTER" + ] + } + } + }, + "ExportManualTranslationsRequest": { + "type": "object", + "properties": { + "scope": { + "description": "Org scope for the export. `ORG` (default) targets the calling\nuser's current org. `CLUSTER` targets the All-Org context.", + "default": "ORG", + "type": "string", + "enum": [ + "ORG", + "CLUSTER" + ] + } + } + }, + "ImportManualTranslationsRequest": { + "type": "object", + "properties": { + "translations_file": { + "description": "CSV file containing translations. The file must have three columns:\n`content`, `locale`, `translated-content`. Max file size: 30 MB.\nMax rows: 10,000.", + "type": "string" + }, + "scope": { + "description": "Org scope for the import. `ORG` (default) targets the calling\nuser's current org. `CLUSTER` targets the All-Org context.", + "default": "ORG", + "type": "string", + "enum": [ + "ORG", + "CLUSTER" + ] + } + }, + "required": [ + "translations_file" + ] + }, "ConvertWorksheetToModelRequest": { "type": "object", "properties": { @@ -28100,12 +28446,6 @@ "default": false, "type": "boolean", "nullable": true - }, - "enable_personalized_view_upsert": { - "description": "
Version: 26.8.0.cl or later
\n\nBoolean flag to enable update/insert of personalized views in liveboard.", - "default": false, - "type": "boolean", - "nullable": true } }, "required": [ @@ -28156,12 +28496,6 @@ "default": false, "type": "boolean", "nullable": true - }, - "enable_personalized_view_upsert": { - "description": "
Version: 26.8.0.cl or later
\n\nBoolean flag to enable update/insert of personalized views in liveboard.", - "default": false, - "type": "boolean", - "nullable": true } }, "required": [ From e2a0ec505273cb61b2437b4fe8ef2bf7baf64f32 Mon Sep 17 00:00:00 2001 From: Umesh Koshyari Date: Mon, 1 Jun 2026 20:59:48 +0530 Subject: [PATCH 2/2] Testing --- api-spec/openapiSpecv3-2_0.json | 72 +++++++++++++++------------------ 1 file changed, 33 insertions(+), 39 deletions(-) diff --git a/api-spec/openapiSpecv3-2_0.json b/api-spec/openapiSpecv3-2_0.json index 57302bca..e0164886 100644 --- a/api-spec/openapiSpecv3-2_0.json +++ b/api-spec/openapiSpecv3-2_0.json @@ -6805,7 +6805,7 @@ "/api/rest/2.0/localizations/manual-translation/delete": { "post": { "operationId": "deleteManualTranslations", - "description": "\nDelete manual translations.
Version: 26.7.0.cl or later\n\nVersion: 26.7.0.cl or later\n\nDeletes all manual translations for the org.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**), `ORG_ADMINISTRATION` (**Can administer Org**), or `APPLICATION_ADMINISTRATION` (**Can administer application**) privilege.\n\n#### Usage guidelines\n\n- This deletes **all** translation entries for the targeted org. The operation cannot be undone.\n- Set `scope` to `CLUSTER` to delete translations uploaded in the All-Org context.\n\n\n\n\n#### Endpoint URL\n", + "description": "\nDelete manual translations.
Version: 26.7.0.cl or later\n\nDeletes all manual translations for the org.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**), `ORG_ADMINISTRATION` (**Can administer Org**), or `APPLICATION_ADMINISTRATION` (**Can administer application**) privilege.\n\n#### Usage guidelines\n\n- This deletes **all** translation entries for the targeted org. The operation cannot be undone.\n- Defaults to `ORG` scope if not specified.\n- Set `scope` to `CLUSTER` to delete translations uploaded in the All-Org context.\n\n\n\n\n#### Endpoint URL\n", "tags": [ "Manual Translation", "26.7.0.cl" @@ -6823,10 +6823,10 @@ "parameters": [], "responses": { "204": { - "description": "Translations deleted successfully." + "description": "Successfully deleted manual translations." }, "400": { - "description": "Invalid request.", + "description": "Operation failed", "content": { "application/json": { "schema": { @@ -6856,7 +6856,7 @@ } }, "500": { - "description": "Unexpected error.", + "description": "Operation failed", "content": { "application/json": { "schema": { @@ -6871,7 +6871,7 @@ "/api/rest/2.0/localizations/manual-translation/export": { "post": { "operationId": "exportManualTranslations", - "description": "\nExport manual translations as a CSV file.
Version: 26.7.0.cl or later\n\nVersion: 26.7.0.cl or later\n\nDownloads all manual translations for the org as a CSV file.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**), `ORG_ADMINISTRATION` (**Can administer Org**), or `APPLICATION_ADMINISTRATION` (**Can administer application**) privilege.\n\n#### Usage guidelines\n\n- The response is a CSV file with columns: `content`, `locale`, `translated-content`.\n- Set `scope` to `CLUSTER` to export translations from the All-Org context.\n- Returns a `404` error if no translations exist for the targeted org or cluster scope.\n\n\n\n\n#### Endpoint URL\n", + "description": "\nExport manual translations as a CSV file.
Version: 26.7.0.cl or later\n\nDownloads all manual translations for the org as a CSV file.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**), `ORG_ADMINISTRATION` (**Can administer Org**), or `APPLICATION_ADMINISTRATION` (**Can administer application**) privilege.\n\n#### Usage guidelines\n\n- The response is a CSV file with columns: `content`, `locale`, `translated-content`.\n- Defaults to `ORG` scope if not specified.\n- Set `scope` to `CLUSTER` to export translations from the All-Org context.\n- Returns a `404` error if no translations exist for the targeted org or cluster scope.\n\n\n\n\n#### Endpoint URL\n", "tags": [ "Manual Translation", "26.7.0.cl" @@ -6891,11 +6891,7 @@ "200": { "description": "CSV file downloaded successfully.", "content": { - "application/json": { - "schema": { - "type": "object" - } - } + "application/octet-stream": {} } }, "400": { @@ -6954,7 +6950,7 @@ "/api/rest/2.0/localizations/manual-translation/locales/{locale}/export": { "post": { "operationId": "getManualTranslationBundle", - "description": "\nGet translations bundle for a locale.
Version: 26.7.0.cl or later\n\nVersion: 26.7.0.cl or later\n\nRetrieves all translations for a specific locale as a JSON map.\n\nAvailable to all authenticated users. No additional privileges are required.\n\n#### Usage guidelines\n\n- The `locale` parameter must be a lowercase, hyphenated locale code matching the pattern `^[a-z]{2,}(-[a-z0-9]{2,})?$` (for example, `fr-fr`, `de-de`, `ja-jp`).\n- Returns a JSON object with a `translations` map where each key is the original string and each value is the translated string.\n- If the org has no translations for the requested locale, the endpoint falls back to cluster-level translations.\n- Returns an empty `translations` map (not an error) if no entries exist at either level.\n\n\n\n\n#### Endpoint URL\n", + "description": "\nGet translations bundle for a locale.
Version: 26.7.0.cl or later\n\nRetrieves all translations for a specific locale as a JSON map.\n\nAvailable to all authenticated users. No additional privileges are required.\n\n#### Usage guidelines\n\n- `locale` parameter must be a hyphenated locale code (for example, `fr-fr`, `de-de`, `JA-JP`).\n- Returns a JSON object with a `translations` map where each key is the original string and each value is the translated string.\n- If the org has no translations for the requested locale, the endpoint falls back to cluster-level translations.\n- Returns an empty `translations` map (not an error) if no entries exist at either level.\n\n\n\n\n#### Endpoint URL\n", "tags": [ "Manual Translation", "26.7.0.cl" @@ -6967,7 +6963,7 @@ "schema": { "type": "string" }, - "description": "Locale code for which to retrieve translations. Must be lowercase\nand hyphenated, for example `fr-fr`, `de-de`, `ja-jp`." + "description": "Locale code for which to retrieve translations. For example, `fr-fr`, `de-de`, `JA-JP`." } ], "responses": { @@ -7037,16 +7033,35 @@ "/api/rest/2.0/localizations/manual-translation/import": { "post": { "operationId": "importManualTranslations", - "description": "\nImport manual translations from a CSV file.
Version: 26.7.0.cl or later\n\nVersion: 26.7.0.cl or later\n\nUploads a CSV file containing manual translations and upserts them into the database.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**), `ORG_ADMINISTRATION` (**Can administer Org**), or `APPLICATION_ADMINISTRATION` (**Can administer application**) privilege.\n\n#### Usage guidelines\n\n- The CSV file must have exactly three columns in this order: `content`, `locale`, `translated-content`.\n- Maximum file size: **30 MB**. Maximum rows: **10,000**.\n- Only `.csv` files are accepted.\n- Locale codes must be lowercase and hyphenated (for example, `fr-fr`, `de-de`, `ja-jp`).\n- The import performs an **upsert**: existing entries matched by `(org_id, locale, content)` are updated; new entries are inserted. Entries not in the upload are left untouched.\n- Set `scope` to `CLUSTER` to upload translations to the All-Org context. Cluster-level translations act as defaults for orgs that have no translations for a locale.\n\n\n\n\n#### Endpoint URL\n", + "description": "\nImport manual translations from a CSV file.
Version: 26.7.0.cl or later\n\nUploads a CSV file containing manual translations and upserts them into the database.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**), `ORG_ADMINISTRATION` (**Can administer Org**), or `APPLICATION_ADMINISTRATION` (**Can administer application**) privilege.\n\n#### Usage guidelines\n\n- The CSV file must have exactly three columns in this order: `content`, `locale`, `translated-content`.\n- Maximum file size: **30 MB**. Maximum rows: **10,000**.\n- Only `.csv` files are accepted.\n- The import performs an **upsert**: existing entries matched by `(org_id, locale, content)` are updated; new entries are inserted. Entries not in the upload are left untouched.\n- Set `scope` to `CLUSTER` to upload translations to the All-Org context. Cluster-level translations act as defaults for orgs that have no translations for a locale.\n\n\n\n\n#### Endpoint URL\n", "tags": [ "Manual Translation", "26.7.0.cl" ], "requestBody": { "content": { - "application/json": { + "multipart/form-data": { "schema": { - "$ref": "#/components/schemas/ImportManualTranslationsRequest" + "type": "object", + "properties": { + "translations_file": { + "description": "CSV file containing translations. The file must have three columns:\n`content`, `locale`, `translated-content`. Max file size: 30 MB.\nMax rows: 10,000.", + "type": "string", + "format": "binary" + }, + "scope": { + "description": "Org scope for the import. `ORG` (default) targets the calling\nuser's current org. `CLUSTER` targets the All-Org context.", + "default": "ORG", + "type": "string", + "enum": [ + "ORG", + "CLUSTER" + ] + } + }, + "required": [ + "translations_file" + ] } } }, @@ -7055,10 +7070,10 @@ "parameters": [], "responses": { "204": { - "description": "Translations uploaded and stored successfully." + "description": "Successfully imported manual translations." }, "400": { - "description": "Invalid request.", + "description": "Operation failed", "content": { "application/json": { "schema": { @@ -7088,7 +7103,7 @@ } }, "500": { - "description": "Unexpected error.", + "description": "Operation failed", "content": { "application/json": { "schema": { @@ -28101,27 +28116,6 @@ } } }, - "ImportManualTranslationsRequest": { - "type": "object", - "properties": { - "translations_file": { - "description": "CSV file containing translations. The file must have three columns:\n`content`, `locale`, `translated-content`. Max file size: 30 MB.\nMax rows: 10,000.", - "type": "string" - }, - "scope": { - "description": "Org scope for the import. `ORG` (default) targets the calling\nuser's current org. `CLUSTER` targets the All-Org context.", - "default": "ORG", - "type": "string", - "enum": [ - "ORG", - "CLUSTER" - ] - } - }, - "required": [ - "translations_file" - ] - }, "ConvertWorksheetToModelRequest": { "type": "object", "properties": {