---
title: "Create a new asset"
method: POST
path: "/v2/assets"
tags: ["Assets"]
---

# Create a new asset

`POST /v2/assets`

Registers a media URL as a reusable asset. Use the returned asset id in generation inputs (`input[].assetId`) or as a voice clone sample. To upload a local file, first request a presigned URL via `POST /v2/assets/upload`, PUT the file there, then register the returned `url` here.

## Request body

- CreateAssetDto
  - `name` string
  - `visibility` 'USER' | 'ORGANIZATION'
  - `projectId` string
  - `url` string, uri, required
  - `type` 'AUDIO' | 'VIDEO' | 'IMAGE', required
  - `inputType` 'UPLOAD' | 'URL' | 'RECORD' | 'TTS' | 'EXTRACT' | 'DUB' | 'DUB_SOURCE' | 'PLATFORM_IMPORT' | 'PLUGIN_PREMIERE_FILE' | 'PLUGIN_PREMIERE_TIMELINE_SELECTION' | 'PLUGIN_RESOLVE_FILE' | 'PLUGIN_RESOLVE_TIMELINE_SELECTION'
  - `thumbnailUrl` string, uri, nullable
  - `size` integer
  - `format` string
  - `durationSeconds` number
  - `width` integer
  - `height` integer

## Response `201`

Asset created successfully

- AssetDto
  - `id` string, required
  - `createdAt` string, date-time, required
  - `updatedAt` string, date-time, required
  - `deletedAt` string, date-time, nullable, required
  - `name` string, nullable, required
  - `url` string, nullable, required
  - `size` number, nullable, required
  - `format` string, nullable, required
  - `type` 'AUDIO' | 'VIDEO' | 'IMAGE', required
  - `inputType` 'UPLOAD' | 'URL' | 'RECORD' | 'TTS' | 'EXTRACT' | 'DUB' | 'DUB_SOURCE' | 'PLATFORM_IMPORT' | 'PLUGIN_PREMIERE_FILE' | 'PLUGIN_PREMIERE_TIMELINE_SELECTION' | 'PLUGIN_RESOLVE_FILE' | 'PLUGIN_RESOLVE_TIMELINE_SELECTION' | 'null', nullable, required
  - `durationSeconds` number, nullable, required
  - `thumbnailUrl` string, nullable, required
  - `visibility` 'USER' | 'ORGANIZATION', required
  - `userId` string, nullable, required
  - `apiKeyId` string, nullable, required
  - `organizationId` string, required
  - `width` number, nullable, required
  - `height` number, nullable, required
  - `proxyPath` string, nullable
  - `projectId` string, nullable

## Other responses

- `422` — The URL points at the upload bucket but no file was uploaded, the uploaded file exceeds the plan size limit, or an optional projectId was provided but does not reference a project in your organization

---

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