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

# Move workspace items in bulk

Move up to 100 workspace items — workbooks, reports, and folders, mixed freely — into one destination folder in a single request.

Request body:

* `items` — the items to move, each `{ type, id }` with `type` one of `WORKBOOK`, `REPORT`, `FOLDER`. Repeated references to the same item are collapsed, so the response holds exactly one entry per distinct item requested.
* `folderId` — the destination folder id for the whole batch, or `null` to move the items to the workspace root. For a folder item this becomes its new parent.

**This endpoint is partially successful.** It returns `200` whenever the request itself is well formed, and reports each item's outcome separately:

* `moved` — the items that were moved, serialized exactly as `POST /workspace/move` returns them.
* `failed` — the items that were not moved, each with the `(type, id)` requested and an `error` carrying the `status` and `message` the single-item move would have returned for it (`403` when the caller lacks access, `404` when the item does not exist or belongs to another deployment, `400` for an invalid move such as a folder into its own descendant).

An empty `failed` array means the whole batch applied. Items are applied one at a time in the order given, each in its own transaction, so earlier moves are **not** rolled back when a later item fails — the response is the record of what was applied.

Access is checked per item with the same rules as the single-item move, so a batch mixing items the caller may and may not move applies the permitted ones and reports the rest.


## OpenAPI

````yaml /api-reference/api.yaml post /api/v1/deployments/{deploymentId}/workspace/bulk-move
openapi: 3.1.0
info:
  title: Cube Platform API
  version: 1.0.0
  description: >-
    Programmatically manage Cube: deployments and everything scoped to them

    (environments, folders, reports, workbooks, notifications, workspace, and
    agents),

    plus account-level users, groups, policies, embedding, and AI settings.
    Data-model

    authoring, dev mode, branches, and uploads live under /build/api/v1 — same
    host and

    token, routed to the build pods.
servers:
  - url: https://{tenant}.cubecloud.dev
    description: Your tenant host. Replace the whole host if you use a custom domain.
    variables:
      tenant:
        default: your-tenant
        description: Your Cube tenant subdomain
security:
  - bearerAuth: []
tags:
  - name: Deployments
  - name: Deployment Creation
  - name: Environments
  - name: Env Variables
  - name: Regions
  - name: Data Model
  - name: Data Model Uploads
  - name: GitHub
  - name: GitHub Connection
  - name: dbt Sync
  - name: Folders
  - name: Reports
  - name: Workbooks
  - name: Notifications
  - name: Workspace
  - name: Users Admin
  - name: User Attributes
  - name: User Attribute Values
  - name: Tenant Settings
  - name: OAuth Integrations
  - name: User OAuth Tokens
  - name: OIDC Token Configs
  - name: App Theme
  - name: Embed
  - name: Embed Tenants
  - name: Dashboard Embed Access
paths:
  /api/v1/deployments/{deploymentId}/workspace/bulk-move:
    post:
      tags:
        - Workspace
      summary: Move workspace items in bulk
      operationId: bulkMoveWorkspaceObjects
      parameters:
        - in: path
          name: deploymentId
          required: true
          schema:
            type: number
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkMoveWorkspaceObjectsInput'
        description: BulkMoveWorkspaceObjectsInput
        required: false
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkMoveWorkspaceObjectsResponse'
          description: ''
components:
  schemas:
    BulkMoveWorkspaceObjectsInput:
      properties:
        folderId:
          oneOf:
            - type: integer
            - type: 'null'
        items:
          items:
            $ref: '#/components/schemas/WorkspaceItemRefInput'
          maxItems: 100
          minItems: 1
          type: array
      required:
        - items
      type: object
    BulkMoveWorkspaceObjectsResponse:
      properties:
        failed:
          items:
            $ref: '#/components/schemas/WorkspaceBulkFailure'
          type: array
        moved:
          items:
            $ref: '#/components/schemas/Workbook'
          type: array
      required:
        - moved
        - failed
      type: object
    WorkspaceItemRefInput:
      properties:
        id:
          type: integer
        type:
          $ref: '#/components/schemas/WorkspaceItemRefInputType'
      required:
        - type
        - id
      type: object
    WorkspaceBulkFailure:
      properties:
        error:
          $ref: '#/components/schemas/BulkActionError'
        id:
          type: integer
        type:
          $ref: '#/components/schemas/WorkspaceBulkFailureType'
      required:
        - error
        - type
        - id
      type: object
    Workbook:
      properties:
        calculatedFields:
          type: object
        createdAt:
          oneOf:
            - format: date
              type: string
            - format: date-time
              type: string
        createdBy:
          type: integer
        dashboardDraft:
          oneOf:
            - $ref: '#/components/schemas/DashboardConfig'
            - type: 'null'
        dashboardPublished:
          oneOf:
            - $ref: '#/components/schemas/DashboardConfig'
            - type: 'null'
        deploymentId:
          type: integer
        folderId:
          oneOf:
            - type: number
            - type: 'null'
        folderPath:
          items:
            $ref: '#/components/schemas/WorkspaceFolderPathEntry'
          type: array
        id:
          type: integer
        isFavorite:
          oneOf:
            - type: boolean
            - type: 'null'
        meta:
          additionalProperties: true
          type: object
        name:
          type: string
        publishedDashboard:
          oneOf:
            - $ref: '#/components/schemas/Dashboard'
            - type: 'null'
        slug:
          oneOf:
            - type: string
            - type: 'null'
        type:
          $ref: '#/components/schemas/WorkbookDtoType'
        updatedAt:
          oneOf:
            - format: date
              type: string
            - format: date-time
              type: string
        user:
          oneOf:
            - $ref: '#/components/schemas/ResourceOwner'
            - type: 'null'
        userId:
          oneOf:
            - type: number
            - type: 'null'
      required:
        - name
        - meta
        - calculatedFields
        - id
        - deploymentId
        - createdAt
        - updatedAt
        - type
      type: object
    WorkspaceItemRefInputType:
      enum:
        - FOLDER
        - WORKBOOK
        - REPORT
      type: string
    BulkActionError:
      properties:
        message:
          type: string
        status:
          type: integer
      required:
        - status
        - message
      type: object
    WorkspaceBulkFailureType:
      enum:
        - FOLDER
        - WORKBOOK
        - REPORT
      type: string
    DashboardConfig:
      properties:
        app:
          oneOf:
            - $ref: '#/components/schemas/DashboardAppSource'
            - type: 'null'
        description:
          oneOf:
            - type: string
            - type: 'null'
        kind:
          oneOf:
            - $ref: '#/components/schemas/DashboardConfigKind'
            - type: 'null'
        layout:
          oneOf:
            - $ref: '#/components/schemas/DashboardLayout'
            - type: 'null'
        settings:
          oneOf:
            - additionalProperties: true
              type: object
            - type: 'null'
        theme:
          oneOf:
            - additionalProperties: true
              type: object
            - type: 'null'
        title:
          oneOf:
            - type: string
            - type: 'null'
        widgets:
          oneOf:
            - items:
                $ref: '#/components/schemas/DashboardWidget'
              type: array
            - type: 'null'
      type: object
    WorkspaceFolderPathEntry:
      properties:
        id:
          type: integer
        name:
          type: string
      required:
        - id
        - name
      type: object
    Dashboard:
      properties:
        allowEmbed:
          type: boolean
        config:
          $ref: '#/components/schemas/DashboardConfig'
        createdBy:
          oneOf:
            - type: integer
            - type: 'null'
        deploymentId:
          type: integer
        description:
          oneOf:
            - type: string
            - type: 'null'
        fromSharedWorkspace:
          oneOf:
            - type: boolean
            - type: 'null'
        id:
          type: integer
        publicId:
          type: string
        reportSnapshots:
          items:
            $ref: '#/components/schemas/ReportSnapshot'
          type: array
        restrictDataDownload:
          oneOf:
            - type: boolean
            - type: 'null'
        status:
          $ref: '#/components/schemas/DashboardDtoStatus'
        title:
          oneOf:
            - type: string
            - type: 'null'
        useBoardDashboards:
          oneOf:
            - type: boolean
            - type: 'null'
        versionId:
          type: integer
        versionNumber:
          type: integer
        workbookId:
          type: integer
      required:
        - id
        - publicId
        - deploymentId
        - workbookId
        - status
        - allowEmbed
        - config
        - versionNumber
        - versionId
        - reportSnapshots
      type: object
    WorkbookDtoType:
      enum:
        - FOLDER
        - WORKBOOK
        - REPORT
      type: string
    ResourceOwner:
      properties:
        email:
          type: string
        firstName:
          oneOf:
            - type: string
            - type: 'null'
        id:
          type: integer
        picture:
          oneOf:
            - type: string
            - type: 'null'
      required:
        - id
        - email
      type: object
    DashboardAppSource:
      properties:
        entry:
          oneOf:
            - maxLength: 255
              type: string
            - type: 'null'
        files:
          oneOf:
            - type: object
              additionalProperties:
                type: string
            - type: 'null'
        html:
          oneOf:
            - type: string
            - type: 'null'
        manifest:
          oneOf:
            - $ref: '#/components/schemas/DashboardAppManifest'
            - type: 'null'
      type: object
    DashboardConfigKind:
      enum:
        - CLASSIC
        - APP
      type: string
    DashboardLayout:
      properties:
        breakpoints:
          oneOf:
            - $ref: '#/components/schemas/DashboardBreakpoints'
            - type: 'null'
        cols:
          oneOf:
            - $ref: '#/components/schemas/DashboardBreakpointCols'
            - type: 'null'
        containerPadding:
          oneOf:
            - items:
                type: integer
              type: array
            - type: 'null'
        margin:
          oneOf:
            - items:
                type: integer
              type: array
            - type: 'null'
        rowHeight:
          oneOf:
            - type: integer
            - type: 'null'
      type: object
    DashboardWidget:
      properties:
        config:
          oneOf:
            - additionalProperties: true
              type: object
            - type: 'null'
        id:
          type: string
        position:
          $ref: '#/components/schemas/DashboardWidgetPosition'
        responsiveLayouts:
          oneOf:
            - $ref: '#/components/schemas/DashboardResponsiveLayouts'
            - type: 'null'
        style:
          oneOf:
            - additionalProperties: true
              type: object
            - type: 'null'
        type:
          $ref: '#/components/schemas/DashboardWidgetDtoType'
      required:
        - id
        - type
        - position
      type: object
    ReportSnapshot:
      properties:
        description:
          oneOf:
            - type: string
            - type: 'null'
        fillMissingRows:
          oneOf:
            - $ref: '#/components/schemas/FillMissingRows'
            - type: 'null'
        id:
          type: integer
        kind:
          oneOf:
            - $ref: '#/components/schemas/ReportSnapshotDtoKind'
            - type: 'null'
        meta:
          oneOf:
            - additionalProperties: true
              type: object
            - type: 'null'
        name:
          oneOf:
            - type: string
            - type: 'null'
        periodComparisons:
          oneOf:
            - items:
                $ref: '#/components/schemas/PeriodComparison'
              type: array
            - type: 'null'
        preferences:
          oneOf:
            - $ref: '#/components/schemas/ReportSnapshotPreferences'
            - type: 'null'
        reportId:
          type: integer
        spec:
          oneOf:
            - oneOf:
                - type: string
                - type: object
            - type: 'null'
        sqlQuery:
          oneOf:
            - type: string
            - type: 'null'
        title:
          oneOf:
            - type: string
            - type: 'null'
        versionNumber:
          type: integer
      required:
        - id
        - reportId
        - versionNumber
      type: object
    DashboardDtoStatus:
      enum:
        - draft
        - published
        - archived
      type: string
    DashboardAppManifest:
      properties:
        dependencies:
          oneOf:
            - type: object
              additionalProperties:
                type: string
            - type: 'null'
        version:
          oneOf:
            - type: integer
            - type: 'null'
      type: object
    DashboardBreakpoints:
      properties:
        lg:
          oneOf:
            - type: integer
            - type: 'null'
        md:
          oneOf:
            - type: integer
            - type: 'null'
        sm:
          oneOf:
            - type: integer
            - type: 'null'
        xs:
          oneOf:
            - type: integer
            - type: 'null'
        xxs:
          oneOf:
            - type: integer
            - type: 'null'
      title: DashboardBreakpointsDto
      type: object
    DashboardBreakpointCols:
      properties:
        lg:
          oneOf:
            - type: integer
            - type: 'null'
        md:
          oneOf:
            - type: integer
            - type: 'null'
        sm:
          oneOf:
            - type: integer
            - type: 'null'
        xs:
          oneOf:
            - type: integer
            - type: 'null'
        xxs:
          oneOf:
            - type: integer
            - type: 'null'
      title: DashboardBreakpointColsDto
      type: object
    DashboardWidgetPosition:
      properties:
        h:
          type: integer
        w:
          type: integer
        x:
          type: integer
        'y':
          type: integer
      required:
        - x
        - 'y'
        - w
        - h
      type: object
    DashboardResponsiveLayouts:
      properties:
        lg:
          oneOf:
            - $ref: '#/components/schemas/DashboardWidgetPosition'
            - type: 'null'
        md:
          oneOf:
            - $ref: '#/components/schemas/DashboardWidgetPosition'
            - type: 'null'
        sm:
          oneOf:
            - $ref: '#/components/schemas/DashboardWidgetPosition'
            - type: 'null'
        xs:
          oneOf:
            - $ref: '#/components/schemas/DashboardWidgetPosition'
            - type: 'null'
        xxs:
          oneOf:
            - $ref: '#/components/schemas/DashboardWidgetPosition'
            - type: 'null'
      type: object
    DashboardWidgetDtoType:
      enum:
        - CHART
        - TEXT
        - FILTER
        - AI
        - TABS_CONTAINER
        - TIME_GRAIN
      type: string
    FillMissingRows:
      properties:
        excludedDimensions:
          oneOf:
            - items:
                type: string
              type: array
            - type: 'null'
        member:
          type: string
      required:
        - member
      type: object
    ReportSnapshotDtoKind:
      enum:
        - vega
        - table
        - kpi
        - html
        - map
      type: string
    PeriodComparison:
      properties:
        measure:
          type: string
        offset:
          $ref: '#/components/schemas/PeriodComparisonOffset'
        outputs:
          oneOf:
            - items:
                type: string
              type: array
            - type: 'null'
        timeDimension:
          type: string
      required:
        - measure
        - timeDimension
        - offset
      type: object
    ReportSnapshotPreferences:
      properties:
        columnFormats:
          oneOf:
            - type: object
              additionalProperties:
                $ref: '#/components/schemas/ColumnFormatOverride'
            - type: 'null'
      type: object
    PeriodComparisonOffset:
      properties:
        amount:
          type: integer
        unit:
          type: string
      required:
        - amount
        - unit
      type: object
    ColumnFormatOverride:
      properties:
        decimalPlaces:
          oneOf:
            - type: integer
            - type: 'null'
        type:
          $ref: '#/components/schemas/ColumnFormatOverrideDtoType'
      required:
        - type
      type: object
    ColumnFormatOverrideDtoType:
      enum:
        - currency
        - percent
        - number
      type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Token authentication. Send `Authorization: Bearer <YOUR_TOKEN>`.'

````