# File upload box

The *Upload Box* tool allows you to add a classification where users can upload a file while labeling a task.

Each upload box can contain one file per task. If you need to collect more than one file, add multiple upload boxes to the project, or ask users to upload one archive file containing all required files.

<figure><img src="https://3895963154-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTcOUG6rfWxqGM0N4db2P%2Fuploads%2FQpUbR2Z92A1M1PIBvQXs%2Fimage.png?alt=media&#x26;token=0d94a52c-f67f-4dec-be72-9b10ba4cac3a" alt=""><figcaption></figcaption></figure>

## How to add an Upload Box tool to a project

From your project's *Settings* tab, enter the *Category Schema* section. Click on *Add category*, then pick *Upload box*. An *Upload box* tool will appear in your ontology:

<figure><img src="https://3895963154-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTcOUG6rfWxqGM0N4db2P%2Fuploads%2FN2qhm3YMrXkH3Kr4PPDo%2Floreshot-20260311-123640%402x.png?alt=media&#x26;token=b525c11a-cd2a-46f8-96d5-432fc3556d0e" alt=""><figcaption></figcaption></figure>

## Upload Box Settings

<table><thead><tr><th width="159.57421875">Setting name</th><th>Description</th></tr></thead><tbody><tr><td><strong>Title</strong></td><td>The upload box's title. This text will appear immediately above the upload box itself.</td></tr><tr><td><strong>Required</strong></td><td>Whether or not the user is required to upload a file to this box before submitting the task.</td></tr><tr><td><strong>Data storage</strong></td><td>By clicking on <em>Pick folder</em>, you're able to select the <a href="../../../data/storages">storage integration</a> (e.g. AWS S3, GCP, Azure), bucket, and subfolder where uploaded files will be written.<br><br>Please note: Ango Hub <strong>must</strong> have <strong>write permissions</strong> to the bucket you are pointing to. See our page on <a href="../../../data/storages">storages</a> for more.</td></tr><tr><td><strong>Accepted Formats</strong></td><td>You may optionally list the file extensions you'd like to accept for this upload box. For example, <code>.jpg</code> and <code>.png</code>. If you leave this blank, any file extension will be accepted.<br><br>Enter extensions with the dot, such as <code>.pdf</code>, and use lowercase extensions.</td></tr><tr><td><strong>Filename</strong></td><td>If you fill in this field, the uploaded file will be saved with this filename. The filename is also shown to users in the upload box.<br><br>If you leave this blank, Ango Hub generates a filename from the upload box title, upload time, and original filename.</td></tr></tbody></table>

## Where uploaded files are stored

If you configure *Data storage*, uploaded files are written to the selected storage integration, bucket, and folder. Ango Hub also adds project and task-specific path segments so that files from different projects and tasks do not overwrite each other.

If you do not configure *Data storage*, uploaded files are stored in Ango Hub's default storage for upload-box files.

The final object path is built as follows:

```
<selected-folder>/<project-id>/upload-box/<task-id>/<filename>
```

If you do not select a storage folder, the path in Ango Hub's default storage is:

```
<project-id>/upload-box/<task-id>/<filename>
```

For example, if your selected folder is `uploads/evidence`, the project ID is `PROJECT_ID`, the task ID is `TASK_ID`, and the uploaded filename is `evidence.pdf`, the uploaded object will be written under:

```
uploads/evidence/PROJECT_ID/upload-box/TASK_ID/evidence.pdf
```

{% hint style="warning" %}
If you are using your own storage integration, Ango Hub needs write access to the selected bucket and folder. If Ango Hub cannot create the upload URL or write the file, the user will see a file upload failure.
{% endhint %}

## How a user can upload a file on the upload box

When the user is in the task, they will see the upload box as a classification.

They can drag and drop a file onto the upload box, or click on the box to open their OS's file picker.

If the upload box already has a file, uploading another file replaces the answer for that upload box.

Once a file has been uploaded, the user will see a link to the uploaded file and a delete button. Deleting the answer removes the file from the task's answer, but does not necessarily delete the object from the underlying storage bucket.

<figure><img src="https://3895963154-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTcOUG6rfWxqGM0N4db2P%2Fuploads%2FAxTCZ5lQHzQJiaVfDph5%2Floreshot-20260311-124816%402x.png?alt=media&#x26;token=bb0a5c09-2c47-4a30-8dd9-1aec0a12bc8b" alt=""><figcaption></figcaption></figure>

## Export format

Upload box answers are exported in the task's `classifications` list, like other classification answers.

In the export, the classification's `tool` is `upload-box`, and the `answer` is a signed URL to the uploaded file.

```json
{
  "objectId": "b0f7f4c7f7e14d2a8b3fcb42",
  "schemaId": "58af1b9c7f334a939afbbf89",
  "tool": "upload-box",
  "title": "Upload supporting file",
  "answer": "https://example-bucket.s3.amazonaws.com/project-id/upload-box/task-id/evidence.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256...",
  "classifications": []
}
```

Because the exported `answer` is a signed URL generated at export time, it may expire. If you need long-term access to uploaded files, use your storage provider's object path or bucket tooling as the durable source of truth.

See [Classifications in the Ango Export Format](https://docs.imerit.net/data/importing-and-exporting-annotations/exporting-annotations/ango-export-format/asset/task/classifications) for the full classification export structure.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.imerit.net/labeling/labeling-tools/data/file-upload-box.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
