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

# Read widgets

> Retrieves the widget catalogue offered when adding a card: the built-in widgets plus the custom widgets of the caller's organization. Pick a widget by `_id` or `name` when creating or updating a dashboard; the card gets its own copy of it.



## OpenAPI

````yaml /openapi/public/openapi-analytics.json get /dynamic-dashboard-widgets
openapi: 3.0.0
info:
  title: MileApp API - Analytics
  version: 3.0.0
  description: MileApp API Documentation - RESTful API for field operations management.
servers:
  - url: https://apiweb.mile.app/api/v3
security:
  - bearerAuth: []
tags:
  - name: Dashboard
    description: >-
      Dashboard lets a user compose their own dashboard from any number of
      cards, start from a template, duplicate a dashboard, share it with roles,
      and save it back as an organization template. Each card owns its own
      widget row (a chart type plus a query spec), cloned from the widget
      catalogue (built-in widgets plus the organization's custom widgets), so
      renaming or editing a card never touches the catalogue or another
      dashboard. Dashboards are owned by their creator: roles they are shared
      with can view, duplicate and save as template, but only the owner can edit
      or delete. Every write reuses the dashboard permission family (view, add,
      edit and delete dashboard).


      The numbers behind each card come from one generic aggregation endpoint
      instead of one endpoint per chart: the client sends a batch of up to 12
      declarative query specs, the server injects the caller's organization, hub
      and soft-delete scope from the session, runs each spec read-only, and
      returns a flat columns and rows table per item. The catalog endpoints
      describe the data sources, fields and limits a client may use.
paths:
  /dynamic-dashboard-widgets:
    get:
      tags:
        - Dashboard
      summary: Read widgets
      description: >-
        Retrieves the widget catalogue offered when adding a card: the built-in
        widgets plus the custom widgets of the caller's organization. Pick a
        widget by `_id` or `name` when creating or updating a dashboard; the
        card gets its own copy of it.
      operationId: listDynamicDashboardWidgets
      parameters:
        - name: category
          in: query
          required: false
          description: >-
            Only widgets of this category. An unknown value is `400 dydsh-017`,
            never an empty list.
          schema:
            type: string
            enum:
              - overview
              - taskStatus
              - productivity
              - timeDuration
              - team
              - hub
              - trend
              - utility
              - custom
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                    example: true
                  code:
                    type: integer
                  message:
                    type: string
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        schemaVersion:
                          type: integer
                          example: 1
                        name:
                          type: string
                          maxLength: 200
                          description: Literal display name, never translated
                        description:
                          type: string
                        category:
                          type: string
                          enum:
                            - overview
                            - taskStatus
                            - productivity
                            - timeDuration
                            - team
                            - hub
                            - trend
                            - utility
                            - custom
                        viz:
                          type: string
                          description: >-
                            Visualization: kpi, bar, line, donut, table,
                            heatmap, text, banner
                        spec:
                          type: object
                          description: >-
                            Neutral analytics query spec executed by POST
                            /analytics/query. See Run analytics query for the
                            full grammar.
                          properties:
                            specVersion:
                              type: integer
                            dataSourceId:
                              type: string
                            timeField:
                              type: string
                            measures:
                              type: array
                              items:
                                type: object
                                additionalProperties: true
                            dimensions:
                              type: array
                              items:
                                type: object
                                additionalProperties: true
                            filters:
                              type: array
                              items:
                                type: object
                                additionalProperties: true
                        composite:
                          type: object
                          description: >-
                            Multi-query widget `{kind, queries: {key: spec}}`;
                            `null` for ordinary widgets
                          additionalProperties: true
                        content:
                          type: object
                          description: >-
                            `{body}` for text and banner widgets; `null`
                            otherwise
                          properties:
                            body:
                              type: string
                              maxLength: 2000
                        defaultLayout:
                          type: object
                          description: Card placement on the grid
                          properties:
                            w:
                              type: integer
                              minimum: 2
                              description: Width in grid columns, 2 to `grid.columns`
                            h:
                              type: integer
                              minimum: 3
                              maximum: 18
                              description: >-
                                Height in rows, 3-18; `null` = as tall as its
                                content
                            x:
                              type: integer
                              minimum: 0
                              maximum: 48
                              description: >-
                                Optional column offset (free placement accepted,
                                not required)
                            'y':
                              type: integer
                              minimum: 0
                              description: Optional row offset
                        isCustom:
                          type: boolean
                          description: >-
                            `true` on a custom widget of the caller's
                            organization; absent on built-in widgets
                        _id:
                          type: string
                        organizationId:
                          type: string
                          description: >-
                            `system` for a built-in widget; the caller's
                            organization id for a custom widget
                        createdBy:
                          type: string
                        updatedBy:
                          type: string
                        createdTime:
                          type: string
                          format: date-time
                        updatedTime:
                          type: string
                          format: date-time
              examples:
                response:
                  value:
                    status: true
                    code: 200
                    message: Success.
                    data:
                      - _id: 66e0b3f1c9a8d7e6f5a4b201
                        organizationId: system
                        schemaVersion: 1
                        name: Total Tasks
                        description: >-
                          Tasks whose start time falls in the selected range,
                          across every status.
                        category: overview
                        viz: kpi
                        spec:
                          specVersion: 1
                          dataSourceId: task
                          timeField: startTime
                          measures:
                            - id: m1
                              fn: count
                          dimensions: []
                          filters: []
                        composite: null
                        content: null
                        defaultLayout:
                          w: 3
                          h: null
                        createdBy: system
                        updatedBy: system
                        createdTime: '2026-09-30T03:00:00.000000Z'
                        updatedTime: '2026-09-30T03:00:00.000000Z'
                      - _id: 66e0b3f1c9a8d7e6f5a4b202
                        organizationId: system
                        schemaVersion: 1
                        name: Tasks by Status
                        description: Task count per status in the selected range.
                        category: taskStatus
                        viz: donut
                        spec:
                          specVersion: 1
                          dataSourceId: task
                          timeField: startTime
                          measures:
                            - id: m1
                              fn: count
                          dimensions:
                            - id: d1
                              kind: terms
                              field: status
                              limit: 3
                          filters: []
                        composite: null
                        content: null
                        defaultLayout:
                          w: 6
                          h: 6
                        createdBy: system
                        updatedBy: system
                        createdTime: '2026-09-30T03:00:00.000000Z'
                        updatedTime: '2026-09-30T03:00:00.000000Z'
                      - _id: 66e0b3f1c9a8d7e6f5a4b210
                        organizationId: system
                        schemaVersion: 1
                        name: Text / Note
                        description: >-
                          A free-text widget for notes, instructions, or context
                          next to the numbers.
                        category: utility
                        viz: text
                        spec: null
                        content:
                          body: ''
                        defaultLayout:
                          w: 6
                          h: null
                        createdBy: system
                        updatedBy: system
                        createdTime: '2026-09-30T03:00:00.000000Z'
                        updatedTime: '2026-09-30T03:00:00.000000Z'
                      - _id: 66fcd2a1e4b0a7d3c1f20c01
                        organizationId: 6650c2a1f3b9e4001c7d2a10
                        schemaVersion: 1
                        name: Done tasks per hub
                        description: Completed tasks per hub in the selected range.
                        category: custom
                        viz: bar
                        spec:
                          specVersion: 1
                          dataSourceId: task
                          timeField: doneTime
                          measures:
                            - id: m1
                              fn: count
                          dimensions:
                            - id: d1
                              kind: terms
                              field: hubName
                              limit: 10
                          filters:
                            - id: f1
                              field: status
                              operator: eq
                              value: DONE
                        composite: null
                        content: null
                        defaultLayout:
                          w: 6
                          h: 6
                        isCustom: true
                        createdBy: planner@example.com
                        updatedBy: planner@example.com
                        createdTime: '2026-10-02T03:00:00.000000Z'
                        updatedTime: '2026-10-02T03:00:00.000000Z'
        '400':
          description: Bad Request - `category` is not one of the allowed values
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                    example: false
                  message:
                    type: string
                    description: Human-readable reason
                  failedCode:
                    type: string
                    description: Structured error code, see Status Codes
              examples:
                response:
                  value:
                    status: false
                    message: >-
                      The selected `category` is invalid. Please select from the
                      available options.
                    failedCode: dydsh-017
        '401':
          description: Unauthorized - missing, invalid or expired access token
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                    example: false
                  message:
                    type: string
                    description: Human-readable reason
                  failedCode:
                    type: string
                    description: Structured error code, see Status Codes
              examples:
                response:
                  value:
                    status: false
                    message: Unauthenticated.
                    failedCode: auth-034
        '403':
          description: Forbidden - the caller's role lacks `view/dashboard`
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                    example: false
                  message:
                    type: string
                    description: Human-readable reason
                  failedCode:
                    type: string
                    description: Structured error code, see Status Codes
              examples:
                response:
                  value:
                    status: false
                    message: >-
                      Access denied. You do not have permission for view
                      dashboard. Please contact your admin to request access.
                    failedCode: sys-035
        '500':
          description: Server Error - unexpected exception, logged server-side
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                    example: false
                  message:
                    type: string
                    description: Human-readable reason
                  failedCode:
                    type: string
                    description: Structured error code, see Status Codes
                  code:
                    type: integer
                    description: >-
                      HTTP status repeated in the body (repository failures
                      only)
                  data:
                    type: array
                    items:
                      type: object
                      additionalProperties: true
                    description: Empty on most failures
              examples:
                response:
                  value:
                    status: false
                    code: 500
                    message: something_wrong
                    failedCode: dydsh-045
      security:
        - bearerAuth: []
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Use a valid Bearer token to authenticate.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.