---
title: "Bulk move documents"
method: POST
path: "/internal/api/clients/{client_id}/dms/documents/bulk-move"
tags: ["CLIENT", "Client Document Management", "DMS Documents"]
---

# Bulk move documents

`POST /internal/api/clients/{client_id}/dms/documents/bulk-move`

## Request

- Base URL: `https://api.signalshq.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.signalshq.io/internal/api/clients/{client_id}/dms/documents/bulk-move`
- Auth: OAuth 2
  - Password
  - Token URL: `/auth/login`

Move multiple documents to a different folder

## Path parameters

- `client_id` string, uuid, required: Client ID

## Request body

- BulkMoveRequest: Request schema for bulk move operations (folders and/or documents)
  - `folder_ids` string[], nullable: List of folder IDs to move
  - `document_ids` string[], nullable: List of document IDs to move
  - `target_folder_id` string, uuid, nullable, required: Target folder ID (null for root folder)
  - `reason` string, required: Reason for moving folders/documents
  - `auto_rename_on_conflict` boolean: Auto-rename folders/documents if name conflicts in target folder (e.g., folder(1), file(1).pdf). Default is True.

## Response `200`

Successful Response

- BulkOperationResponse: Response schema for bulk operations
  - `success_count` integer, required: Number of successful operations
  - `failure_count` integer, required: Number of failed operations
  - `total_count` integer, required: Total number of operations attempted
  - `errors` BulkOperationError[]: List of errors with detailed information about each failed operation
    - `entity_id` string, required: UUID of the entity (folder or document) that failed
    - `entity_type` string, required: Type of entity (folder or document)
    - `entity_name` string, nullable: Name of the entity that failed (if available)
    - `error` string, required: Error message describing why the operation failed
  - `details` BulkOperationDetails: Detailed breakdown of bulk operation results. Uses *_deleted for delete ops, *_moved for move ops.
    - `folders_deleted` integer, nullable: Number of folders successfully deleted (bulk-delete only)
    - `folders_failed` integer, nullable: Number of folders that failed (delete or move)
    - `documents_deleted` integer, nullable: Number of documents successfully deleted (bulk-delete only)
    - `documents_failed` integer, nullable: Number of documents that failed (delete or move)
    - `folders_moved` integer, nullable: Number of folders in the move request / successfully moved (bulk-move only)
    - `documents_moved` integer, nullable: Number of documents in the move request / successfully moved (bulk-move only)
  - `renamed_documents` object, nullable: Documents that were auto-renamed due to conflicts. Key: document_id (str), Value: RenamedDocumentInfo
  - `renamed_folders` object, nullable: Folders that were auto-renamed due to conflicts. Key: folder_id (str), Value: RenamedDocumentInfo
  - `warnings` string[]: Non-fatal warnings surfaced to the CPA. For move operations: populated when any moved item lands inside a shared folder, meaning the client immediately gains access to those items.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/signalshq/apis/signals-api.md) - [All operations](https://skmtc.dev/signalshq/apis/signals-api/llms.txt) - [OpenAPI document](https://skmtc.dev/signalshq/apis/signals-api/revisions/2c22af3b5576?raw)
