---
title: "Start a durable Speech or Transcription job"
method: PUT
path: "/projects/{projectId}/creation-jobs/{id}"
tags: ["Console creations"]
---

# Start a durable Speech or Transcription job

`PUT /projects/{projectId}/creation-jobs/{id}`

## Request

- Base URL: `https://api.pyai.com`
- URL: `https://api.pyai.com/projects/{projectId}/creation-jobs/{id}`
- Auth: API key in cookie `pyai_session`

Console cookie authentication and a trusted console Origin are required. Choose a client UUID prefixed crj_. Speech accepts JSON metadata. Transcription accepts multipart metadata (a JSON string) plus media (up to 25 MiB). For product hear, traceReview=true also saves a deterministic personal data review in Trace under trup_{creation_id}. It uses the actual transcription, does not require a provider, and does not change future call settings. The recording and transcript remain in My work. Review completion is part of job completion, including worker recovery. No speech produces trace_no_speech, never a PASS. A 202 means the input is stored and the job will continue after the browser closes. Repeat the same ID and payload after a lost response; a changed payload returns 409. Uses workspace credits through the normal product meter. Do not automatically create another ID after an uncertain response.

## Path parameters

- `projectId` string, required
- `id` string, required

## Request body

- CreatorJobInput
  - `traceReview` boolean: For hear only: save a real deterministic personal data review to Trace after transcription. Uses workspace transcription credits. No future call settings change.
  - `product` 'speak' | 'hear', required
  - `name` string, required
  - `text` string: Speech script, up to 2,000 Unicode characters. Empty for transcription.
  - `voiceId` string: Required for Speech.
  - `voiceName` string
  - `format` 'mp3' | 'wav' | 'txt', required
  - `language` '' | 'en' | 'es' | 'fr' | 'de' | 'hi' | 'it' | 'pt' | 'nl' | 'zh' | 'yue' | 'ar' | 'id' | 'ko' | 'th' | 'vi' | 'ja' | 'tr' | 'ms' | 'sv' | 'da' | 'fi' | 'pl' | 'cs' | 'fil' | 'fa' | 'el' | 'hu' | 'mk' | 'ro': Spoken language for Transcription; empty detects it.
  - `sourceName` string

## Response `202`

Durably accepted, or the existing job for this request ID.

- CreatorJob
  - `id` string, required
  - `product` 'speak' | 'hear', required
  - `name` string, required
  - `status` 'queued' | 'running' | 'completed' | 'failed', required
  - `stage` 'queued' | 'connecting' | 'generating' | 'transcribing' | 'saving' | 'completed' | 'failed', required
  - `input` CreatorJobInput, required
    - `traceReview` boolean: For hear only: save a real deterministic personal data review to Trace after transcription. Uses workspace transcription credits. No future call settings change.
    - `product` 'speak' | 'hear', required
    - `name` string, required
    - `text` string: Speech script, up to 2,000 Unicode characters. Empty for transcription.
    - `voiceId` string: Required for Speech.
    - `voiceName` string
    - `format` 'mp3' | 'wav' | 'txt', required
    - `language` '' | 'en' | 'es' | 'fr' | 'de' | 'hi' | 'it' | 'pt' | 'nl' | 'zh' | 'yue' | 'ar' | 'id' | 'ko' | 'th' | 'vi' | 'ja' | 'tr' | 'ms' | 'sv' | 'da' | 'fi' | 'pl' | 'cs' | 'fil' | 'fa' | 'el' | 'hu' | 'mk' | 'ro': Spoken language for Transcription; empty detects it.
    - `sourceName` string
  - `error_code` string, nullable, required
  - `charge` 'not_started' | 'unconfirmed' | 'metered', required
  - `created_at` integer, required: Unix milliseconds.
  - `updated_at` integer, required: Unix milliseconds.
  - `creation_id` string, nullable, required

## Other responses

- `400`: Invalid input.
- `401`: Sign in to the console.
- `403`: Project membership or a creation role is required.
- `404`: Creation not found in this project.
- `409`: idempotency_conflict or no active live billing project.
- `413`: Recording exceeds 25 MiB.
- `503`: Background creation unavailable; retain the input.

## Changes

- **2026-10-20** `271a1539185b`: 2 info
  - added the new optional request property `traceReview`
  - added the optional property `input/traceReview` to the response with the `202` status

[Operation history](https://skmtc.dev/pyai/apis/pyai-api/changes/projects/:projectId/creation-jobs/:id/put.md)

---

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