Skip to main content
A project is the work-in-progress resource for one karaoke track. It owns the source media, synced lyrics, separated stems, render settings, and exports.

Endpoints

MethodPathPurpose
POST/uploadsAllocate a signed upload URL for source media.
GET/projectsList projects owned by the account.
POST/projectsCreate a project from an uploaded input file.
POST/projects/quoteQuote the credits required to create a project.
GET/projects/{projectId}Fetch a project with stems, lyrics, exports, and settings.
PATCH/projects/{projectId}Patch project metadata such as title or artists.
DELETE/projects/{projectId}Delete a project and its associated artifacts.
GET/projects/{projectId}/tasksList task history for a project.
Full request and response schemas are in API reference.

Upload a source file

curl -X POST https://api.youka.io/api/v1/uploads \
  -H "Authorization: Bearer yk_..." \
  -H "Content-Type: application/json" \
  -d '{
    "filename": "song.mp3",
    "contentType": "audio/mpeg",
    "contentLength": 4521344
  }'
The response includes inputFileId and uploadUrl. Upload the bytes to uploadUrl, then use inputFileId in project creation or quote requests.

Quote a project

curl -X POST https://api.youka.io/api/v1/projects/quote \
  -H "Authorization: Bearer yk_..." \
  -H "Content-Type: application/json" \
  -d '{
    "inputFileId": "file_abc123",
    "lyricsSource": { "type": "transcribe", "language": "en" },
    "splitModel": "mdx23c"
  }'
If you already know the duration, pass durationSeconds instead of inputFileId to quote without uploading.

Create a project

curl -X POST https://api.youka.io/api/v1/projects \
  -H "Authorization: Bearer yk_..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: create-song-123" \
  -d '{
    "title": "My Song",
    "inputFileId": "file_abc123",
    "lyricsSource": { "type": "transcribe", "language": "en" },
    "splitModel": "mdx23c"
  }'
Project creation is async. The response includes projectId, taskId, projectUrl, and taskUrl. Poll tasks or fetch the project until the latest task reaches a terminal state.

Inspect and update

curl https://api.youka.io/api/v1/projects/prj_abc123 \
  -H "Authorization: Bearer yk_..."
curl -X PATCH https://api.youka.io/api/v1/projects/prj_abc123 \
  -H "Authorization: Bearer yk_..." \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Updated title",
    "artists": ["Artist name"]
  }'
PATCH requires at least one of title or artists.

List and delete

curl https://api.youka.io/api/v1/projects \
  -H "Authorization: Bearer yk_..."
curl -X DELETE https://api.youka.io/api/v1/projects/prj_abc123 \
  -H "Authorization: Bearer yk_..." \
  -H "Idempotency-Key: delete-prj_abc123"
Project deletion is permanent. Use an idempotency key so retries are safe.

Project tasks

curl https://api.youka.io/api/v1/projects/prj_abc123/tasks \
  -H "Authorization: Bearer yk_..."
This returns the project task history, including project creation, lyric sync, stem separation, and export tasks.

What’s next