# Complete a document upload

> The complete_document_upload MCP tool: complete a document upload.

`complete_document_upload` · writes

[REST: `POST /v1/documents/{documentId}/complete`](https://api.bymundi.com/docs/reference/documents.completeUpload.md)

## What the model reads

Completes an upload started with start_document_upload, once its bytes were PUT: the document appears in the trip's Documents tab, internal (`visibility: staff`) unless you release it to the travelers with `visibility: traveler`, optionally into a folder (`folderId`). The recorded size and type are what actually arrived. undo_change deletes it again while nobody has changed it.

Permissions: documents:write.
Undo: the result names a change id; undo_change reverts it.

## Input

| Field | Type | Required | Description |
|---|---|---|---|
| `documentId` | uuid | yes |  |
| `visibility` | "staff" \| "traveler" |  | `staff` (the default) keeps it internal; `traveler` releases it to the trip's travelers. default "staff" |
| `folderId` | uuid \| null |  | File it in this folder of the trip; null or absent = loose. |

## Input schema (JSON)

```json
{
  "type": "object",
  "properties": {
    "documentId": {
      "type": "string",
      "format": "uuid"
    },
    "visibility": {
      "type": "string",
      "enum": [
        "staff",
        "traveler"
      ],
      "default": "staff",
      "description": "`staff` (the default) keeps it internal; `traveler` releases it to the trip's travelers."
    },
    "folderId": {
      "anyOf": [
        {
          "type": "string",
          "format": "uuid"
        },
        {
          "type": "null"
        }
      ],
      "description": "File it in this folder of the trip; null or absent = loose."
    }
  },
  "required": [
    "documentId"
  ],
  "additionalProperties": false
}
```
