# Move document

Move a document between shared and personal storage or into a different folder. Documents awaiting signatures and system-managed resources cannot be moved.

POST https://api.brigg.app/v1/operations/documents.MoveDocument

## Access & visibility

Allow `documents.MoveDocument` on your API key.

**Workspace access by default.** Private member data requires [approved member delegation](https://developer.brigg.app/authentication#member-delegation) through `Brigg-Act-As`; the key supplies permissions while private ownership and project boundaries remain enforced.

[Set up authentication](https://developer.brigg.app/authentication) · [Choose permissions](https://developer.brigg.app/permissions)

## Request fields

Send a JSON object with the following fields. Required fields must be included; omit optional fields you do not need.
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `file_id` | string | Yes | Use a file_id returned by this listing or by CompleteUpload. It is not an upload ID, storage path or filename. [documents.ListDocuments](https://developer.brigg.app/reference/documents/ListDocuments). At least 1 character. |
| `scope` | string | No | Destination collection: org shares with the workspace; user restores personal ownership. Omit to keep the current collection and change only its folder. The resources collection cannot be either end of a move. Allowed: `"org"`, `"user"`. |
| `path` | string | No | Destination folder path. Omitted or empty means the destination collection's root, not the current folder. At most 1024 characters. |

## Moving can change who may read

Keep file_id as the stable identity. Moving to org shares reading access with the workspace; moving to user returns the document to its recorded creator when that person is still active, otherwise to the acting member. It does not necessarily make the acting member the owner.

The caller needs authority to administer the document. Supplying only path keeps its current collection; omit path only when you intend to move it to the root. Documents in resources cannot be moved, and a signing lock can prevent a scope change. Read [List documents](https://developer.brigg.app/reference/documents/ListDocuments) afterwards using the resulting collection and path.

## Response

Returns **200 OK** with a JSON body.
| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `file_id` | string | Yes | Stable file ID returned by documents.CompleteUpload, documents.ListDocuments or a document creation operation. Use the same ID for downloads, attachments and supported file-based workflows. Do not use a filename or storage path. |
| `scope` | string | Yes | The resulting collection after the move. |
| `path` | string | Yes | The resulting folder path; an empty string means the collection root. |
| `published` | boolean | Yes | Whether moving this generated content into shared workspace scope also published it. This does not mean anonymous web access. |

## Errors & retries

Set `BRIGG_REQUEST_ID` once for each logical action. The samples send it as `Idempotency-Key`. Reuse the same value and body on retries, including after a timeout; a missing response does not prove the action failed.

For rate limits, follow the server’s retry guidance and back off. See [HTTP errors](https://developer.brigg.app/http#errors) and [safe retries and limits](https://developer.brigg.app/reliability).

| HTTP status | Code | What to do |
| --- | --- | --- |
| 400 | `invalid_json` | Send a JSON object with Content-Type: application/json. |
| 400 | `invalid_input` | Check the request fields and types. Supply a stable Idempotency-Key containing 1–200 characters. |
| 401 | `invalid_key` | The workspace API key is missing, invalid or revoked. |
| 403 | `forbidden` | Check the key’s operation and resource grants. If Brigg-Act-As is supplied, the key must be authorized to delegate to that member. |
| 404 | `not_found` | The requested operation or resource is not available to this credential. |
| 429 | `rate_limited` | Wait for Retry-After before retrying. Reuse the original Idempotency-Key. |
| 409 | `signing_locked` | A signing request protects this document from this change. Inspect its signing state in Brigg; completed signed records must not be destroyed. |

## Next steps

- [List documents](https://developer.brigg.app/reference/documents/ListDocuments)
- [Rename document](https://developer.brigg.app/reference/documents/RenameDocument)

[Download OpenAPI](https://developer.brigg.app/openapi.json) · [Versioning & retirement](https://developer.brigg.app/versioning)

## Examples

### Move within its current collection

This keeps visibility unchanged and moves the document into Projects/Agreements.
#### cURL


```sh
curl 'https://api.brigg.app/v1/operations/documents.MoveDocument' \
  -H "Authorization: Bearer $BRIGG_API_KEY" \
  -H 'Content-Type: application/json' \
  -H "Idempotency-Key: $BRIGG_REQUEST_ID" \
  --data-raw '{
  "file_id": "f_agreement",
  "path": "Projects/Agreements"
}'
```

#### TypeScript


```typescript
const requestId = process.env.BRIGG_REQUEST_ID;
if (!requestId) throw new Error("Set BRIGG_REQUEST_ID once per action and reuse it on retries.");

const response = await fetch("https://api.brigg.app/v1/operations/documents.MoveDocument", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.BRIGG_API_KEY}`,
    "Content-Type": "application/json",
    "Idempotency-Key": requestId, // Create once per action; reuse on retries.
  },
  body: JSON.stringify({
    "file_id": "f_agreement",
    "path": "Projects/Agreements"
  }),
});
const result = await response.json();
if (!response.ok) throw new Error(`${response.status}: ${result.error} — ${result.message}`);
console.log(result);
```

#### Python


```python
import json
import os
from urllib.request import Request, urlopen
from urllib.error import HTTPError

request_id = os.environ["BRIGG_REQUEST_ID"]  # Reuse for retries of this action.
payload = {
  "file_id": "f_agreement",
  "path": "Projects/Agreements"
}
request = Request(
    "https://api.brigg.app/v1/operations/documents.MoveDocument",
    data=json.dumps(payload).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {os.environ['BRIGG_API_KEY']}",
        "Content-Type": "application/json",
        "Idempotency-Key": request_id,  # Create once per action; reuse on retries.
    },
    method="POST",
)
try:
    with urlopen(request) as response:
        print(json.load(response))
except HTTPError as error:
    print(error.code, json.load(error))
    raise
```

#### Response example


```json
{
  "file_id": "f_agreement",
  "scope": "org",
  "path": "Projects/Agreements",
  "published": false
}
```

## JSON schemas


```json-schema-request
{
  "type": "object",
  "properties": {
    "file_id": {
      "type": "string",
      "minLength": 1,
      "description": "Use a file_id returned by this listing or by CompleteUpload. It is not an upload ID, storage path or filename. [documents.ListDocuments](https://developer.brigg.app/reference/documents/ListDocuments)."
    },
    "scope": {
      "type": "string",
      "enum": [
        "org",
        "user"
      ],
      "description": "Destination collection: org shares with the workspace; user restores personal ownership. Omit to keep the current collection and change only its folder. The resources collection cannot be either end of a move."
    },
    "path": {
      "type": "string",
      "maxLength": 1024,
      "description": "Destination folder path. Omitted or empty means the destination collection's root, not the current folder."
    }
  },
  "required": [
    "file_id"
  ],
  "additionalProperties": false,
  "examples": [
    {
      "file_id": "f_agreement",
      "path": "Projects/Agreements"
    }
  ]
}
```


```json-schema-response
{
  "type": "object",
  "properties": {
    "file_id": {
      "type": "string",
      "description": "Stable file ID returned by documents.CompleteUpload, documents.ListDocuments or a document creation operation. Use the same ID for downloads, attachments and supported file-based workflows. Do not use a filename or storage path."
    },
    "scope": {
      "type": "string",
      "description": "The resulting collection after the move."
    },
    "path": {
      "type": "string",
      "description": "The resulting folder path; an empty string means the collection root."
    },
    "published": {
      "type": "boolean",
      "description": "Whether moving this generated content into shared workspace scope also published it. This does not mean anonymous web access."
    }
  },
  "required": [
    "file_id",
    "scope",
    "path",
    "published"
  ],
  "additionalProperties": false,
  "examples": [
    {
      "file_id": "f_agreement",
      "scope": "org",
      "path": "Projects/Agreements",
      "published": false
    }
  ]
}
```

