---
title: "Complete a personal file upload"
method: POST
path: "/api/me/files/{fileId}/complete"
---

# Complete a personal file upload

`POST /api/me/files/{fileId}/complete`

## Request

- Base URL: `https://www.toma.com`
- URL: `https://www.toma.com/api/me/files/{fileId}/complete`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `better-auth.session_token`

Verify and save your completed upload as one private file. Empty files are supported. Retry completion if storage or upload cleanup fails. Ready contents are immutable; delete and upload again to replace. Programs, installers, disk images, shortcuts, and macro-enabled Office files are refused by name. Windows, macOS, and Linux programs, Office macros, password-protected zip files, zip files that contain programs, and PDFs with visible script or launch actions are also refused by content; completing such an upload removes it.

## Path parameters

- `fileId` string, required

## Response `200`

File operation result.

- PersonalFile
  - `id` string, required
  - `path` string, required
  - `caution` string, nullable, required: A warning to show the user before they download or open this kind of file (archives, scripts, older Office files, web pages); null when there is none.
  - `size` integer, required
  - `received` integer, required
  - `status` 'uploading' | 'ready' | 'deleting', required
  - `createdAt` string, date-time, required
  - `canWrite` boolean, required

## Other responses

- `401`: Sign in first.
- `403`: File access denied.
- `404`: No accessible personal file.
- `409`: File state, path, or quota conflict.
- `415`: The file is a program, installer, macro-enabled Office file, password-protected or program-carrying zip, or scripted PDF; the upload is removed.
- `503`: Storage or upload cleanup failed; retry completion.

---

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