---
title: "Finish a file upload"
method: POST
path: "/api/tasks/{id}/files/{fileId}/complete"
---

# Finish a file upload

`POST /api/tasks/{id}/files/{fileId}/complete`

## Request

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

Verify and save the completed upload as one file for already authorized task participants. Retry completion if storage or upload cleanup fails. This does not submit work, complete the task, change access, or move money. Empty files are supported. Unfinished poster uploads remain hidden from workers; ready contents are immutable. The first successful completion queues an update for the other currently authorized participant; retries do not repeat it. 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

- `id` string, required
- `fileId` string, required

## Response `200`

File operation result.

- TaskFile
  - `id` string, required
  - `folder` 'poster' | 'worker', required
  - `public` boolean, required: A poster file anyone can download from the open task's page (publicFiles on the task).
  - `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.
  - `hireId` string, nullable, required
  - `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 file or task.
- `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)
