---
title: "Create a direct-upload project"
method: POST
path: "/api/v1/projects"
tags: ["Sources"]
---

# Create a direct-upload project

`POST /api/v1/projects`

## Request

- Base URL: `https://prismclip.com`
- URL: `https://prismclip.com/api/v1/projects`
- Auth: HTTP bearer

Create an owned project for a local media file and return bounded multipart upload instructions. Upload every part with the returned upload ID, retain each ETag, then complete the session.

## Request body

- object
  - `filename` string, required: Original local media filename
  - `mime_type` string, required: Video, audio, or application/octet-stream MIME type
  - `byte_length` integer, required: Exact source size in bytes
  - `duration_ms` integer: Known source duration in milliseconds
  - `width` integer: Known source width in pixels
  - `height` integer: Known source height in pixels

## Response `201`

The uploading project and its bounded multipart instructions.

- object
  - `project` object, required
    - `id` string, uuid, required
    - `filename` string, required
    - `mimeType` string, required
    - `byteLength` integer, required
    - `durationMs` integer, nullable, required
    - `width` integer, nullable, required
    - `height` integer, nullable, required
    - `status` string, required
    - `claim` string, required
    - `targetSeconds` integer, required
    - `activeMomentSetId` string, uuid, nullable, required
    - `activeRenderVariantId` string, uuid, nullable, required
    - `error` string, nullable, required
    - `createdAt` string, required: ISO 8601 timestamp
    - `updatedAt` string, required: ISO 8601 timestamp
  - `upload` object, required
    - `uploadId` string, required: Opaque multipart upload session ID returned when the project was created
    - `partBytes` integer, required
    - `partCount` integer, required
    - `partUrlTemplate` string, required
    - `completeUrl` string, required
    - `cancelUrl` string, required

## Other responses

- `400`: The filename, MIME type, dimensions, duration, or byte length is invalid.
- `401`: The API key is missing or invalid.
- `403`: The API key lacks projects:write.
- `413`: The source exceeds the direct-upload size limit.
- `429`: The API-key rate limit was exceeded.
- `503`: Project or object storage is unavailable.

---

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