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

# Review Checkpoints

> Pause-for-human-approval points in the generation pipeline, how to disable them, how to use them

By default the generation pipeline pauses at up to several checkpoints for human approval. Each checkpoint lets you inspect the generated artifact, optionally edit or leave a revision note, and approve before the pipeline continues.

## The checkpoints

| Review point   | `point` value          | When it fires                            | What to review                                        |
| -------------- | ---------------------- | ---------------------------------------- | ----------------------------------------------------- |
| Sources        | `source_review`        | After ingestion, before scene extraction | Scraped page text, uploaded PDF content, image kits   |
| Outline        | `outline_review`       | After scene extraction                   | Module structure, scene descriptions, narration plans |
| Slides         | `slide_review`         | Per module, after slide generation       | Generated slide images                                |
| Audio          | `audio_review`         | Per module, after TTS synthesis          | Narration audio samples                               |
| Module video   | `module_video_review`  | Per module, after video assembly         | Assembled module video                                |
| Quiz           | `quiz_review`          | After quiz generation                    | Quiz questions and answer options                     |
| Preset sources | `preset_source_review` | After preset brand-source ingestion      | Scraped brand source text                             |
| Brand          | `brand_review`         | After brand synthesis                    | Derived color palette and brand artifacts             |

When a checkpoint is active, the course (or preset) status becomes `paused_for_review` and `current_review` indicates which artifact is pending.

The `auto_approve` flag on each point is `true` = gate skipped (pipeline continues automatically), `false` or absent = human approval required.

## Account-level vs per-course settings

Review settings have two scopes:

* **Account level** (`GET/PUT /api/v1/account/review-settings`): defaults applied to every new course on this account.
* **Per-course** (`GET /api/v1/courses/{course_id}/review-settings`): effective settings for one course, merging account defaults with any course-level overrides.

Read a specific course's effective settings:

```bash theme={null}
curl "https://api.myustadia.com/api/v1/courses/$COURSE_ID/review-settings" \
  -H "Authorization: Bearer sk_test_..."
```

## How to skip all checkpoints

For unattended, fully automated runs, set every checkpoint to auto-approve once. This is an account-level setting:

```bash theme={null}
curl -X POST "https://api.myustadia.com/api/v1/account/review-settings/all-auto" \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{"auto_approve": true}'
```

This applies to all future courses on the account. You can revert per-checkpoint with `PUT /api/v1/account/review-settings`.

## How to toggle one checkpoint

```bash theme={null}
curl -X PUT "https://api.myustadia.com/api/v1/account/review-settings" \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{"point": "outline_review", "auto_approve": false}'
```

Valid `point` values: `source_review`, `outline_review`, `slide_review`, `audio_review`, `quiz_review`, `module_video_review`, `preset_source_review`, `brand_review`.

## Reviewing the outline

When the course is paused for outline review, fetch the outline:

```bash theme={null}
curl "https://api.myustadia.com/api/v1/courses/$COURSE_ID/outline" \
  -H "Authorization: Bearer sk_test_..."
```

You have three ways to act:

### Approve as-is

```bash theme={null}
curl -X POST "https://api.myustadia.com/api/v1/courses/$COURSE_ID/outline/approve" \
  -H "Authorization: Bearer sk_test_..."
```

### Apply structured edits

Field-level patches applied immediately (no AI regeneration). Use dotted paths.

```json theme={null}
{
  "edits": [
    { "path": "modules.2.title", "value": "Closing techniques" },
    { "path": "modules.4", "op": "delete" }
  ]
}
```

Supported paths: `course_title`, `course_description`, `modules.<n>.title`, `modules.<n>.description`, `modules.<n>.scenes.<k>.description`, `modules.<n>.scenes.<k>.planned_narration_summary`.

### Leave freeform notes for AI regeneration

```json theme={null}
{
  "notes": [
    { "note": "Make the tone more direct and add a closing technique to module 3", "scope": "global" }
  ]
}
```

Notes trigger AI regeneration of the outline. The regenerated artifact returns to `paused_for_review` for a second look.

## Reviewing slides and audio

Each module's slides and audio go through the same approve/edit/note cycle. Use the per-module endpoints (`/slides/approve`, `/audio/approve`) or approve all artifacts for one module in one call (`/modules/{n}/approve`).

## Approving everything at once

When you have multiple pending artifacts across modules, approve them all in one transaction:

```bash theme={null}
curl -X POST "https://api.myustadia.com/api/v1/courses/$COURSE_ID/approve-remaining" \
  -H "Authorization: Bearer sk_test_..."
```

Optional body: `{"artifact_type": "slide"}` to limit to one artifact type.

## Regen caps

To prevent runaway costs, accounts have a per-course artifact regen cap. When exhausted, posting a note returns `429 regen_cap_reached`. The note is still recorded; only the regeneration job is withheld.

## Recommended setting per use case

| Use case                                    | Setting                                                                |
| ------------------------------------------- | ---------------------------------------------------------------------- |
| Quickstart, sandbox testing                 | `all-auto: true`                                                       |
| Internal courses with no client involvement | `all-auto: true`                                                       |
| Branded courses for paying clients          | `outline_review: false` (manual outline review only; slide/audio auto) |
| White-glove engagements                     | All checkpoints manual                                                 |
