---
title: "Upload Set"
method: POST
path: "/api/media/containers/{task_uid}/photos"
tags: ["upload"]
---

# Upload Set

`POST /api/media/containers/{task_uid}/photos`

## Request

- Base URL: `https://api.ncspeech.org` (the document declares no server; this is the origin it was published from)
- URL: `https://api.ncspeech.org/api/media/containers/{task_uid}/photos`
- Auth: HTTP bearer

Accept the set — exactly `required` files in `close` and in `far` — store it
and hand it to the `containers` worker.

All-or-nothing: every file is read and checked before anything is uploaded, so
a bad photo rejects the request with nothing stored and the client fixes it
and sends all eight again. On success the task is `Pending` (or straight away
`Error` when the GPS says this container was already sent); the verdict is
polled at `GET /api/tasks/{task_uid}/status`.

## Path parameters

- `task_uid` string, required

## Headers

- `Idempotency-Key` string, nullable
- `X-Test-UID` string, nullable

## Request body `multipart/form-data`

- BodyUploadSetApiMediaContainersTaskUidPhotosPost
  - `close` string[], required
  - `far` string[], required
  - `gps_coordinates` string, nullable
  - `gpsCoordinates` string, nullable

## Response `201`

Successful Response

- ContainersSubmitResponse
  - `message` string, required
  - `taskUid` string, required
  - `taskStatus` string, required
  - `submissionId` string, required
  - `items` ContainersItem[], required
    - `fileId` string, required
    - `group` string, required
    - `status` string, required
    - `mimeType` string, nullable
    - `errorMessage` string, nullable
    - `url` string, nullable
    - `urlExpiresAt` string, date-time, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/ncspeech/apis/advanced-data-collector-api.md) - [All operations](https://skmtc.dev/ncspeech/apis/advanced-data-collector-api/llms.txt) - [OpenAPI document](https://skmtc.dev/ncspeech/apis/advanced-data-collector-api/revisions/fec602f8df8c?raw)
