> ## Documentation Index
> Fetch the complete documentation index at: https://docs.podcastor.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Create a podcast

> Compose the script, audio, workspace and render stages.

The API exposes individual operations. You decide when to review content, change hosts, generate audio or render video. Each stage uses the same project and billing flow as the Web app.

## 1. Select your source and template

Read [subscription benefits](/api-reference/account/subscription), [templates](/api-reference/templates/list-templates), [voices](/api-reference/voices/list-voices) and [avatars](/api-reference/avatars/list-avatars). Use returned IDs in subsequent requests.

[Create project](/api-reference/projects/create-project) accepts supported text, URL, document, script and audio origins. Its schema defines the source fields and `script_params`; choose the fields appropriate to your origin.

| Origin | Source            |
| ------ | ----------------- |
| `1`    | Web page URL      |
| `2`    | YouTube URL       |
| `3`    | Document file URL |
| `4`    | Long text         |
| `5`    | Original text     |
| `6`    | Uploaded script   |
| `7`    | Uploaded audio    |
| `8`    | Mixed sources     |

Preserve the full project ID returned by creation or listing. Poll [Get project](/api-reference/projects/get-project) with `query.project_id` until the script is ready. To change the source and regenerate, use [Regenerate script](/api-reference/projects/regenerate-script) with `prj_id`.

## 2. Review and save the script settings

[Get settings](/api-reference/projects/get-settings) returns saved settings. Use [Save project](/api-reference/projects/save-project) to save scenes, speakers, voices, avatars, layout and subtitle options before preparing audio. Keep the endpoint's exact scene structure and IDs.

<Note>The settings response can contain a shortened display ID. Retain the full project ID from creation or listing for future requests.</Note>

## 3. Prepare audio

```bash theme={null}
curl --fail-with-body "$PODCAST_API_ORIGIN/open/podcast/v1/audio/tasks" \
  -H "X-Api-Key: $PODCAST_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: episode-42-audio-v1" \
  -d '{"project_id":"PROJECT_ID"}'
```

Read `data.task_id`, then poll without an idempotency key:

```bash theme={null}
curl --fail-with-body "$PODCAST_API_ORIGIN/open/podcast/v1/audio/tasks/result" \
  -H "X-Api-Key: $PODCAST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"task_id":"TASK_ID"}'
```

Task status `3` means success and `4` means failure. This stage prepares the editable workspace as well as speech. For one changed scene, use [Redo speech](/api-reference/audio/redo-speech) and [Get speech task](/api-reference/audio/get-speech-task).

## 4. Edit the workspace

Read [Get workspace](/api-reference/rendering/get-workspace), edit its supported timeline/layout fields, then [Save workspace](/api-reference/rendering/save-workspace) and [Apply workspace](/api-reference/rendering/apply-workspace) when using a draft. Preserve existing media references so you can reuse prepared audio.

## 5. Check credits and render

Call [Render credit check](/api-reference/rendering/render-credit-check) with `project_id`. Review the returned estimate against the active subscription.

[Render](/api-reference/rendering/render) accepts a `tasks` array of prepared workspace render requests. It does not accept only a project ID. Build each task from the project's prepared workspace and the endpoint schema; don't send an empty timeline or an empty task list.

Poll [Get project](/api-reference/projects/get-project) for render state and the final video URL. Use [Retry project](/api-reference/rendering/retry-project) only after inspecting a failed project's state and existing retry rules.

## 6. Retrieve the outputs

The [output guide](/api-reference/guides/polling-and-outputs) covers video, audio and SRT subtitles. Every output stays attached to the same project and storage used by Web.
