---
title: "Initiate a project file upload"
method: POST
path: "/v1/projects/{projectId}/files"
tags: ["projects"]
---

# Initiate a project file upload

`POST /v1/projects/{projectId}/files`

Validate a project file and create a presigned direct-upload URL. Mobile projects only accept photos and videos (.png, .jpg, .jpeg, .mp4, .mov); runs preload them into the device photo library.

## Path parameters

- `projectId` string, required

## Headers

- `Authorization` string, required

## Request body

- object
  - `filename` string, required
  - `fileSize` integer, required
  - `mediaType` string

## Response `200`

Presigned project-file upload details

- ProjectsInitiateAProjectFileUploadResponse200
  - `uploadUrl` string, uri, required
  - `storageKey` string, required
  - `mimeType` string, required
  - `filename` string, required
  - `fileSize` integer, required
  - `mediaType` string, required

## Other responses

- `400` — Bad Request - Invalid input parameters
- `401` — Unauthorized - Invalid or missing API key
- `404` — Not Found - Resource does not exist or is not accessible
- `429` — Too Many Requests - Usage limit exceeded
- `500` — Internal Server Error
- `504` — Gateway Timeout - Test execution exceeded time limit

## Changes

- **2026-08-22** `bf198f94879a` — 1 breaking, 2 warning
  - the `filename` request property's minLength was increased from `0` to `1`
  - the `fileSize` request property's exclusiveMinimum was set to `0.00`
  - the `fileSize` request property's max was set to `52428800.00`
- **2026-08-17** `e739fb23c8d0` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/tester/apis/testerarmy-api/changes/v1/projects/:projectId/files/post.md)

---

[API](https://skmtc.dev/tester/apis/testerarmy-api.md) · [All operations](https://skmtc.dev/tester/apis/testerarmy-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/tester/testerarmy-api/revisions/c0f981a708f9/schema)
