> ## Documentation Index
> Fetch the complete documentation index at: https://developers.octaviatech.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Update Dashboard Config

> Update Dashboard Config.



## OpenAPI

````yaml PUT /reports/dashboardConfig
openapi: 3.1.0
info:
  title: Blog API
  version: 1.0.0
servers:
  - url: https://api.octaviatech.app/cms
    description: Production
security:
  - ApiKeyAuth: []
tags:
  - name: Tags
    description: Tag management endpoints
paths:
  /reports/dashboardConfig:
    put:
      tags:
        - Reports
      summary: Save the dashboard layout preference for the authenticated user
      description: >-
        Upserts the dashboard configuration for the tenant and user resolved
        from the request context and returns the normalized result. The whole
        body is optional — an empty body, a body with no `slots`, or an empty
        `slots` array all fall back to the built-in default configuration. The
        response is always the fully normalized config, so unknown widget types,
        spans and ranges are replaced by their defaults. The authenticated user
        id is stored as `updatedBy`.
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                version:
                  type: number
                  description: Config schema version. Default 1.
                  example: 1
                templateId:
                  type: string
                  description: Layout template identifier. Default "executive_focus".
                  example: executive_focus
                slots:
                  type: array
                  description: >-
                    Widget slots in display order. An empty array is treated as
                    absent and the default slot list is used instead.
                  items:
                    type: object
                    additionalProperties: false
                    properties:
                      id:
                        type: string
                        description: >-
                          Client-side slot identifier. Defaults to
                          `slot_<position>`.
                        example: hero
                      type:
                        type: string
                        description: >-
                          Widget rendered in the slot. Unknown values fall back
                          to `operationsOverview` for the first slot and
                          `contentTrend` for the rest.
                        enum:
                          - operationsOverview
                          - tenantCapacity
                          - contentTrend
                          - summaryOverview
                          - topArticles
                          - reportIntelligence
                          - contentSpotlight
                      enabled:
                        type: boolean
                        description: Whether the slot is rendered. Default true.
                        example: true
                      span:
                        type: string
                        description: >-
                          Slot width. Unknown values fall back to `full` for the
                          first slot and `half` for the rest.
                        enum:
                          - half
                          - full
                        example: full
                      settings:
                        type: object
                        additionalProperties: false
                        properties:
                          range:
                            type: string
                            description: >-
                              Time range shown by the widget. Unknown values
                              fall back to `2weeks`.
                            enum:
                              - 1week
                              - 2weeks
                              - 1month
                              - currentMonth
                            example: 2weeks
            examples:
              Custom Layout:
                value:
                  version: 1
                  templateId: executive_focus
                  slots:
                    - id: hero
                      type: operationsOverview
                      enabled: true
                      span: full
                      settings:
                        range: 1month
                    - id: slot_1
                      type: contentTrend
                      enabled: true
                      span: half
                      settings:
                        range: 1week
              Reset To Defaults:
                value: {}
      responses:
        '200':
          description: OK
          content:
            application/json:
              example:
                success: true
                statusCode: 200
                message: Dashboard config updated successfully
                data:
                  dashboardConfig:
                    version: 1
                    templateId: executive_focus
                    slots:
                      - id: hero
                        type: operationsOverview
                        enabled: true
                        span: full
                        settings:
                          range: 2weeks
        '400':
          description: >-
            Bad request (no user id resolved from `x-user-id` or the bearer
            token)
          content:
            application/json:
              example:
                success: false
                statusCode: 400
                message: Missing userId
                data: null
        '401':
          description: Unauthorized
        '500':
          description: Server error
          content:
            application/json:
              example:
                success: false
                statusCode: 500
                message: Failed to update dashboard config
                data: null
      security:
        - ApiKeyAuth: []
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key

````