---
title: "Update a track"
method: PUT
path: "/v1/video-projects/{projectId}/tracks/{trackId}"
tags: ["Video Projects"]
---

# Update a track

`PUT /v1/video-projects/{projectId}/tracks/{trackId}`

## Request

- Base URL: `https://api.neume.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.neume.io/v1/video-projects/{projectId}/tracks/{trackId}`
- Auth: none declared

## Path parameters

- `projectId` string, required
- `trackId` string, required

## Request body

- UpdateTrackDto
  - `name` string: Track display name
  - `order` number: Track order
  - `muted` boolean: Whether track is muted
  - `volume` number: Track volume 0.0-1.0

## Response `200`

- TrackDto
  - `trackId` string, required: Track ID
  - `type` 'VIDEO' | 'AUDIO', required: Track type
  - `name` string: Track display name
  - `order` number, required: Track order/z-index
  - `muted` boolean, required: Whether track is muted
  - `volume` number, required: Track volume 0.0-1.0
  - `clips` ClipDto[], required: Clips on this track
    - `clipId` string, required: Clip ID
    - `trackId` string, required: Track ID
    - `type` 'VIDEO' | 'AUDIO' | 'TEXT' | 'IMAGE' | 'CAPTION', required: Clip type
    - `startTime` number, required: Start time in seconds
    - `duration` number, required: Duration in seconds
    - `zIndex` number, required: Layer order for overlapping clips (higher = on top)
    - `posX` number: X position on canvas
    - `posY` number: Y position on canvas
    - `width` number: Width on canvas
    - `height` number: Height on canvas
    - `rotation` number: Rotation in degrees
    - `opacity` number: Opacity 0.0-1.0
    - `scaleX` number: Scale X
    - `scaleY` number: Scale Y
    - `transition` object: Transition to next clip
    - `captionWords` object: Word-level captions JSON
    - `captionStyle` string: Caption style preset name
    - `prompt` string: Scene description prompt
    - `imageUrl` string: Source image URL
    - `imageStatus` 'PENDING' | 'STARTING' | 'QUEUED' | 'PROCESSING' | 'COMPLETED' | 'FAILED': Image generation status
    - `videoUrl` string: Generated video URL
    - `videoStatus` 'PENDING' | 'STARTING' | 'QUEUED' | 'PROCESSING' | 'COMPLETED' | 'FAILED': Video generation status
    - `videoProgress` number: Video generation progress 0-100
    - `videoDuration` number: Duration of generated video in seconds
    - `videoPrompt` string: Prompt used for video generation
    - `videoGenType` 'NORMAL' | 'LIPSYNC' | 'MOTION_CONTROL': Video generation type
    - `motionVideoPath` string: S3 path for motion reference video (MOTION_CONTROL only)
    - `audioSync` boolean, required: Whether to sync with audio during generation
    - `text` string: Text content (text clips)
    - `textStyle` string: Text style: title | subtitle | caption
    - `textPosition` string: Text position: top | center | bottom
    - `fontColor` string: Font color hex
    - `backgroundColor` string: Background color hex
    - `fontFamily` string: Font family
    - `fontSize` number: Font size in px
    - `fontWeight` number: Font weight (300-700)
    - `textAlign` string: Text alignment: left | center | right
    - `letterSpacing` number: Letter spacing in em
    - `lineHeight` number: Line height multiplier
    - `strokeColor` string: Stroke color hex
    - `strokeWidth` number: Stroke width in px
    - `enterAnimation` object: Enter animation config
    - `exitAnimation` object: Exit animation config
    - `songId` string: Song ID for audio clips
    - `songTitle` string: Song title
    - `audioUrl` string: Direct audio file URL (uploaded audio assets)
    - `trimStart` number: Trim start in seconds
    - `trimEnd` number: Trim end in seconds
    - `createdAt` string, date-time, required: Creation date

---

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