ThoughtSpot Style Customization API

The Style Customization API from ThoughtSpot — 7 operation(s) for style customization.

Documentation

Specifications

Other Resources

OpenAPI Specification

thoughtspot-style-customization-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: ThoughtSpot Public REST 10.1.0.cl Style Customization API
  version: '2.0'
servers:
- url: '{base-url}'
  variables:
    base-url:
      default: https://localhost:443
security:
- bearerAuth: []
tags:
- name: Style Customization
paths:
  /api/rest/2.0/customization/styles/fonts/delete:
    post:
      operationId: deleteStyleFonts
      description: "\n <span class=\"since-beta-tag\">Version: 26.7.0.cl or later</span>\n\nDeletes one or more custom fonts from the cluster-level or org-level font library. If a deleted font is assigned to visualization areas, those assignments automatically fallback to the cluster/system default font. The response lists all affected areas where the font was explicitly set. Note: dry_run defaults to true. To actually delete fonts, you must explicitly pass dry_run: false.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege.\n\n#### Usage guidelines\n\n- Provide one or more font UUIDs or names in `font_identifiers`.\n- Set `scope` to `CLUSTER` to delete from the cluster-level library. Set `scope` to `ORG` (default) to delete from the authenticated user's org library.\n- Use `dry_run: true` to preview which visualization areas would be affected without actually deleting the font. The response lists affected assignments; no changes are applied.\n- Deletions cannot be undone. Re-upload the font file using `uploadStyleFont` if needed.\n\n\n\n\n#### Endpoint URL\n"
      tags:
      - Style Customization
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeleteStyleFontsRequest'
        required: true
      parameters: []
      responses:
        '200':
          description: Font deleted successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StyleFontDeleteData'
              examples:
                example_1:
                  summary: Font deleted with affected assignments
                  value:
                    affected_assignments:
                    - org:
                        id: 1234567890
                        name: Sales
                      visualization_areas:
                      - CHART_X_AXIS_LABELS
                      - CHART_Y_AXIS_LABELS
                example_2:
                  summary: Font deleted with no affected assignments
                  value:
                    affected_assignments: []
        '400':
          description: Invalid request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                invalid_request:
                  summary: Invalid request
                  value:
                    error:
                      message:
                        code: 10002
                        incident_id_guid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                        trace_id_guid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                        debug: Field 'font_identifiers' must contain at least one identifier.
        '401':
          description: Unauthorized access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                unauthorized_access:
                  summary: Unauthorized access
                  value:
                    error:
                      message:
                        code: 10097
                        incident_id_guid: b2c3d4e5-f678-9012-bcde-f23456789012
                        trace_id_guid: b2c3d4e5-f678-9012-bcde-f23456789012
                        debug: Authentication required to delete custom fonts from the font library.
        '403':
          description: Forbidden access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                forbidden_access:
                  summary: Forbidden access
                  value:
                    error:
                      message:
                        code: 10023
                        incident_id_guid: c3d4e5f6-7890-1234-cdef-345678901234
                        trace_id_guid: c3d4e5f6-7890-1234-cdef-345678901234
                        debug: Only Tenant admin can delete cluster-level fonts.
        '500':
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                unexpected_error:
                  summary: Unexpected error
                  value:
                    error:
                      message:
                        code: 10038
                        incident_id_guid: d4e5f678-9012-3456-defa-456789012345
                        trace_id_guid: d4e5f678-9012-3456-defa-456789012345
                        debug: Unexpected server error while deleting fonts from the font library.
  /api/rest/2.0/customization/styles/logos/export:
    post:
      operationId: exportStyleLogos
      description: "\n <span class=\"since-beta-tag\">Version: 26.7.0.cl or later</span>\n\nDownloads the active logos (default and wide slots) at the requested scope as a single ZIP archive containing both logo image files. If no custom logo has been uploaded at the ORG scope, the archive contains the resolved logo falling through from the cluster. If no cluster logo has been uploaded, no file is returned.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege.\n\n#### Usage guidelines\n\n- Set `scope` to `CLUSTER` to download cluster-level logos.\n- Set `scope` to `ORG` (default) to download logos for the authenticated user's org.\n- The response is a ZIP archive (`application/zip`). Save the response body directly to a `.zip` file.\n- The archive always contains two files — one for the DEFAULT slot and one for the WIDE slot — even if no custom logo is set at the requested scope.\n\n\n\n\n#### Endpoint URL\n"
      tags:
      - Style Customization
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExportStyleLogosRequest'
        required: true
      parameters:
      - name: Accept
        in: header
        schema:
          type: string
          enum:
          - application/zip
          default: application/zip
      responses:
        '200':
          description: Logo ZIP archive retrieved successfully.
          content:
            application/zip: {}
        '400':
          description: Invalid request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                unauthorized_access:
                  summary: Unauthorized access
                  value:
                    error:
                      message:
                        code: 10097
                        incident_id_guid: b2c3d4e5-f678-9012-bcde-f23456789012
                        trace_id_guid: b2c3d4e5-f678-9012-bcde-f23456789012
                        debug: Authentication required to export style logos.
        '403':
          description: Forbidden access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                forbidden_access:
                  summary: Forbidden access
                  value:
                    error:
                      message:
                        code: 10023
                        incident_id_guid: c3d4e5f6-7890-1234-cdef-345678901234
                        trace_id_guid: c3d4e5f6-7890-1234-cdef-345678901234
                        debug: Cluster-level logos can only be exported from PRIMARY org.
        '500':
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                unexpected_error:
                  summary: Unexpected error
                  value:
                    error:
                      message:
                        code: 10038
                        incident_id_guid: d4e5f678-9012-3456-defa-456789012345
                        trace_id_guid: d4e5f678-9012-3456-defa-456789012345
                        debug: Unexpected server error while exporting style logos.
  /api/rest/2.0/customization/styles/search:
    post:
      operationId: searchStyleCustomizations
      description: "\n <span class=\"since-beta-tag\">Version: 26.7.0.cl or later</span>\n\nRetrieves style preferences at cluster level or for the authenticated user's org. Cluster-level preferences serve as defaults for all orgs. Org-level preferences override cluster defaults.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege.\n\n#### Usage guidelines\n\n- Set `scope` to `CLUSTER` to retrieve cluster-level style defaults.\n- Set `scope` to `ORG` (default) to retrieve preferences for the authenticated user's org.\n- Each field in the response includes an `is_overridden` flag indicating whether the value was explicitly set at the requested scope or inherited from a parent scope (cluster or system default).\n\n\n\n\n#### Endpoint URL\n"
      tags:
      - Style Customization
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchStyleCustomizationsRequest'
        required: true
      parameters: []
      responses:
        '200':
          description: Style preferences retrieved successfully.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StylePreference'
              examples:
                example_1:
                  value:
                  - scope: CLUSTER
                    navigation_panel:
                      theme: DARK
                      is_overridden: false
                    chart_color_palette:
                      colors:
                      - primary: '#2359B6'
                        secondary:
                        - '#1A4690'
                        - '#0E2E66'
                        - '#07194A'
                        - '#030D30'
                      - primary: '#E8552D'
                        secondary:
                        - '#C4421A'
                        - '#9E2F0D'
                        - '#7A2005'
                        - '#581302'
                      - primary: '#F5A623'
                        secondary:
                        - '#D08B0E'
                        - '#A86E05'
                        - '#825202'
                        - '#5E3900'
                      - primary: '#7ED321'
                        secondary:
                        - '#62A815'
                        - '#488009'
                        - '#305A03'
                        - '#1C3800'
                      - primary: '#9B59B6'
                        secondary:
                        - '#7D3F9A'
                        - '#612C7E'
                        - '#481C62'
                        - '#320F48'
                      - primary: '#1ABC9C'
                        secondary:
                        - '#0E9E81'
                        - '#077F67'
                        - '#03624E'
                        - '#014838'
                      - primary: '#E74C3C'
                        secondary:
                        - '#C0392B'
                        - '#9A2518'
                        - '#761409'
                        - '#540703'
                      - primary: '#3498DB'
                        secondary:
                        - '#1A7DC0'
                        - '#0E60A0'
                        - '#074580'
                        - '#032C60'
                      disable_color_rotation: false
                      is_overridden: false
                    embedded_footer_text:
                      value: ''
                      is_overridden: false
                    logo:
                      default_logo:
                        id: a1b2c3d4-0001-0001-0001-000000000001
                        is_overridden: false
                      wide_logo:
                        id: a1b2c3d4-0002-0002-0002-000000000002
                        is_overridden: false
                    visualization_fonts:
                      chart_visualization_fonts:
                      - visualization_area: CHART_X_AXIS_LABELS
                        font_id: null
                        font_name: null
                        is_overridden: false
                      table_visualization_fonts:
                      - visualization_area: TABLE_VALUE_CELLS
                        font_id: null
                        font_name: null
                        is_overridden: false
                  - scope: ORG
                    org:
                      id: 1234567890
                      name: Sales
                    navigation_panel:
                      theme: CUSTOM
                      base_color: '#2359B6'
                      is_overridden: true
                    chart_color_palette:
                      colors:
                      - primary: '#2359B6'
                        secondary:
                        - '#1A4690'
                        - '#0E2E66'
                        - '#07194A'
                        - '#030D30'
                      - primary: '#E8552D'
                        secondary:
                        - '#C4421A'
                        - '#9E2F0D'
                        - '#7A2005'
                        - '#581302'
                      - primary: '#F5A623'
                        secondary:
                        - '#D08B0E'
                        - '#A86E05'
                        - '#825202'
                        - '#5E3900'
                      - primary: '#7ED321'
                        secondary:
                        - '#62A815'
                        - '#488009'
                        - '#305A03'
                        - '#1C3800'
                      - primary: '#9B59B6'
                        secondary:
                        - '#7D3F9A'
                        - '#612C7E'
                        - '#481C62'
                        - '#320F48'
                      - primary: '#1ABC9C'
                        secondary:
                        - '#0E9E81'
                        - '#077F67'
                        - '#03624E'
                        - '#014838'
                      - primary: '#E74C3C'
                        secondary:
                        - '#C0392B'
                        - '#9A2518'
                        - '#761409'
                        - '#540703'
                      - primary: '#3498DB'
                        secondary:
                        - '#1A7DC0'
                        - '#0E60A0'
                        - '#074580'
                        - '#032C60'
                      disable_color_rotation: false
                      is_overridden: false
                    embedded_footer_text:
                      value: Powered by Sales Analytics
                      is_overridden: true
                    logo:
                      default_logo:
                        id: b2c3d4e5-0001-0001-0001-000000000011
                        is_overridden: true
                      wide_logo:
                        id: b2c3d4e5-0002-0002-0002-000000000022
                        is_overridden: true
                    visualization_fonts:
                      chart_visualization_fonts:
                      - visualization_area: CHART_X_AXIS_LABELS
                        font_id: c3d4e5f6-1111-1111-1111-111111111111
                        font_name: Acme Sans
                        is_overridden: true
                      table_visualization_fonts:
                      - visualization_area: TABLE_VALUE_CELLS
                        font_id: null
                        font_name: Optimo-Plain, Helvetica Neue, Helvetica, Arial, sans-serif
                        is_overridden: false
        '400':
          description: Invalid request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                invalid_request:
                  summary: Invalid request
                  value:
                    error:
                      message:
                        code: 10002
                        incident_id_guid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                        trace_id_guid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                        debug: Field 'org_identifiers' is only allowed when scope is ORG.
        '401':
          description: Unauthorized access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                unauthorized_access:
                  summary: Unauthorized access
                  value:
                    error:
                      message:
                        code: 10097
                        incident_id_guid: b2c3d4e5-f678-9012-bcde-f23456789012
                        trace_id_guid: b2c3d4e5-f678-9012-bcde-f23456789012
                        debug: Authentication required to retrieve style preferences for the cluster or org.
        '403':
          description: Forbidden access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                forbidden_access:
                  summary: Forbidden access
                  value:
                    error:
                      message:
                        code: 10023
                        incident_id_guid: c3d4e5f6-7890-1234-cdef-345678901234
                        trace_id_guid: c3d4e5f6-7890-1234-cdef-345678901234
                        debug: Cluster config can only be accessed from PRIMARY org.
        '500':
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                unexpected_error:
                  summary: Unexpected error
                  value:
                    error:
                      message:
                        code: 10038
                        incident_id_guid: d4e5f678-9012-3456-defa-456789012345
                        trace_id_guid: d4e5f678-9012-3456-defa-456789012345
                        debug: Unexpected server error while retrieving style customization preferences.
  /api/rest/2.0/customization/styles/fonts/search:
    post:
      operationId: searchStyleFonts
      description: "\n <span class=\"since-beta-tag\">Version: 26.7.0.cl or later</span>\n\nReturns custom fonts from the cluster-level or org-level font library. Omitting all filter fields returns all fonts in the target scope.\n\nWhen `include_font_assignments` is `true`, the response includes only the visualization areas explicitly assigned to each font. For cluster-scoped fonts, `org` is returned as `null`.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**) privilege.\n\n#### Usage guidelines\n\n- Set `scope` to `CLUSTER` to search the cluster-level library. Set `scope` to `ORG` (default) to search the authenticated user's org library.\n- Use `font_identifier` to look up a specific font by UUID or name.\n- Use `name_pattern` for partial, case-insensitive name matching.\n- Set `include_font_assignments` to `true` to include visualization areas this font is currently assigned to. Defaults to `false`.\n\n\n\n\n#### Endpoint URL\n"
      tags:
      - Style Customization
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchStyleFontsRequest'
        required: true
      parameters: []
      responses:
        '200':
          description: Custom fonts retrieved successfully.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StyleFontRecord'
              examples:
                example_1:
                  value:
                  - id: c3d4e5f6-1111-1111-1111-111111111111
                    scope: ORG
                    org:
                      id: 1234567890
                      name: Sales
                    name: Acme Sans
                    weight: NORMAL
                    style: NORMAL
                    color: '#333333'
                    creation_time_in_millis: 1714000000000
                    assignments:
                    - org:
                        id: 1234567890
                        name: Sales
                      visualization_areas:
                      - CHART_X_AXIS_LABELS
                      - CHART_Y_AXIS_LABELS
                  - id: d4e5f6a7-2222-2222-2222-222222222222
                    scope: CLUSTER
                    name: Corporate Bold
                    weight: BOLD
                    style: NORMAL
                    color: '#000000'
                    creation_time_in_millis: 1713500000000
                    assignments: []
        '400':
          description: Invalid request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                invalid_request:
                  summary: Invalid request
                  value:
                    error:
                      message:
                        code: 10002
                        incident_id_guid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                        trace_id_guid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                        debug: Only one of 'font_identifier' or 'name_pattern' may be provided.
        '401':
          description: Unauthorized access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                unauthorized_access:
                  summary: Unauthorized access
                  value:
                    error:
                      message:
                        code: 10097
                        incident_id_guid: b2c3d4e5-f678-9012-bcde-f23456789012
                        trace_id_guid: b2c3d4e5-f678-9012-bcde-f23456789012
                        debug: Authentication required to search the cluster-level or org-level font library.
        '403':
          description: Forbidden access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                forbidden_access:
                  summary: Forbidden access
                  value:
                    error:
                      message:
                        code: 10023
                        incident_id_guid: c3d4e5f6-7890-1234-cdef-345678901234
                        trace_id_guid: c3d4e5f6-7890-1234-cdef-345678901234
                        debug: Cluster config can only be accessed from PRIMARY org.
        '500':
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                unexpected_error:
                  summary: Unexpected error
                  value:
                    error:
                      message:
                        code: 10038
                        incident_id_guid: d4e5f678-9012-3456-defa-456789012345
                        trace_id_guid: d4e5f678-9012-3456-defa-456789012345
                        debug: Unexpected server error while searching the font library.
  /api/rest/2.0/customization/styles/update:
    post:
      operationId: updateStyleCustomization
      description: "\n <span class=\"since-beta-tag\">Version: 26.7.0.cl or later</span>\n\nUpdates style preferences at cluster level or for the authenticated user's org, including navigation panel color, chart color palette, embedded footer text, logo, and font assignments per visualization area. Cluster-level preferences serve as defaults for all orgs. Org-level preferences override cluster defaults. Resetting an Org-level preference falls back to Cluster-level preference, which on reset falls back to system defaults.\n\nRequires `ADMINISTRATION` (**Can administer ThoughtSpot**) or `DEVELOPER` (**Has developer privilege**)  privilege.\n\n#### Usage guidelines\n\nTwo operations are supported via the `operation` field:\n\n- **REPLACE** (default): Applies the fields provided in the request. Omitted fields remain unchanged.\n- **RESET**: Reverts specific fields to defaults. Specify which fields to reset using `reset_options.style` (for style fields) and `reset_options.visualization_areas` (for font assignments). Fields not listed in `reset_options` are not affected.\n\n#### Logo upload\n\nLogo files are uploaded as binary fields using `multipart/form-data`:\n\n- `default_logo`: Square app icon and favicon. Recommended size: 140×140 px. Accepted formats: PNG, JPG.\n- `wide_logo`: Horizontal top nav bar logo. Recommended size: 230×45 px. Accepted formats: PNG, JPG.\n\nTo reset a logo to the default, use `operation: RESET` with `reset_options.style` set to `DEFAULT_LOGO` or `WIDE_LOGO`.\n\n#### Navigation panel color\n\nSet `navigation_panel.theme` to one of:\n\n- `DARK`: Default dark theme.\n- `TWO_TONE`: Dual-tone panel style.\n- `CUSTOM`: User-defined color. Provide `navigation_panel.base_color` as a 6-digit hex string (e.g. `#2359B6`).\n\n#### Chart color palette\n\nProvide exactly 8 color entries in `chart_color_palette.colors`. Each entry requires a `primary` hex color. If `secondary` shades are omitted, the server auto-generates 4 shades from the primary color.\n\n#### Font assignments\n\nSpecify `visualization_fonts.chart_visualization_fonts`, `visualization_fonts.table_visualization_fonts`, and `visualization_fonts.advanced_chart_visualization_fonts` to assign custom fonts to specific visualization areas. Only provide the areas you want to update; omitted areas remain unchanged.\n\n\n\n\n#### Endpoint URL\n"
      tags:
      - Style Customization
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                scope:
                  description: 'Scope at which to apply the preferences. CLUSTER sets cluster-level

                    defaults for all orgs. ORG applies to the authenticated user''s org.'
                  default: ORG
                  type: string
                  enum:
                  - CLUSTER
                  - ORG
                operation:
                  description: 'Operation to perform. REPLACE (default) applies the provided fields and

                    leaves omitted fields unchanged. RESET reverts fields listed in

                    reset_options to defaults.'
                  default: REPLACE
                  type: string
                  enum:
                  - REPLACE
                  - RESET
                reset_options:
                  description: 'Fields to reset when operation is RESET. Specify style fields and

                    visualization areas to revert to defaults.'
                  allOf:
                  - $ref: '#/components/schemas/StyleResetOptionsInput'
                navigation_panel:
                  description: 'Navigation panel color. Provide theme and, when theme is CUSTOM, also

                    provide base_color.'
                  allOf:
                  - $ref: '#/components/schemas/NavigationPanelInput'
                chart_color_palette:
                  description: 'Chart color palette. When provided with operation REPLACE, exactly 8

                    color entries must be specified in colors.'
                  allOf:
                  - $ref: '#/components/schemas/StyleColorPaletteInput'
                embedded_footer_text:
                  description: 'Custom footer text for the embedded application. An empty

                    string clears the footer.'
                  type: string
                visualization_fonts:
                  description: 'Font assignments per visualization area. Provide only the areas to

                    update; omitted areas remain unchanged.'
                  allOf:
                  - $ref: '#/components/schemas/VisualizationFontsInput'
                default_logo:
                  description: 'Binary image for the DEFAULT logo slot (square app icon and favicon;

                    recommended 140x140 px). Accepted formats: PNG, JPG.'
                  type: string
                  format: binary
                wide_logo:
                  description: 'Binary image for the WIDE logo slot (horizontal top nav bar logo;

                    recommended 230x45 px). Accepted formats: PNG, JPG.'
                  type: string
                  format: binary
              required:
              - scope
            encoding:
              reset_options:
                contentType: application/json
              navigation_panel:
                contentType: application/json
              chart_color_palette:
                contentType: application/json
              visualization_fonts:
                contentType: application/json
        required: true
      parameters: []
      responses:
        '204':
          description: Style preferences updated successfully.
        '400':
          description: Invalid request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                invalid_request:
                  summary: Invalid request
                  value:
                    error:
                      message:
                        code: 10002
                        incident_id_guid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                        trace_id_guid: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                        debug: chart_color_palette must specify exactly 8 color entries when operation is REPLACE.
        '401':
          description: Unauthorized access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                unauthorized_access:
                  summary: Unauthorized access
                  value:
                    error:
                      message:
                        code: 10097
                        incident_id_guid: b2c3d4e5-f678-9012-bcde-f23456789012
                        trace_id_guid: b2c3d4e5-f678-9012-bcde-f23456789012
                        debug: Authentication required to update style customization preferences.
        '403':
          description: Forbidden access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                forbidden_access:
                  summary: Forbidden access
                  value:
                    error:
                      message:
                        code: 10023
                        incident_id_guid: c3d4e5f6-7890-1234-cdef-345678901234
                        trace_id_guid: c3d4e5f6-7890-1234-cdef-345678901234
                        debug: Cluster-level style customization can only be updated from PRIMARY org.
        '500':
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                unex

# --- truncated at 32 KB (68 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/thoughtspot/refs/heads/main/openapi/thoughtspot-style-customization-api-openapi.yml