POST /v2/courses/{course_id}/resume
Resume a course
If a course ended up with gaps — say the upstream LLM hiccupped mid-job and chapter 3 of 5 never rendered — this endpoint kicks off a background task that fills in only the missing chapters.
Idempotent: calling it on a complete course just returns status: "completed".
Request
Headers
| Header | Required | Notes |
|---|---|---|
X-API-Key | yes | |
X-External-User-Id | yes (or X-User-Id) | Must own the course |
Content-Type | yes | application/json (body may be empty {}) |
Path parameters
course_id string (UUID) required The course to repair. |
Body
The body is currently ignored. Pass {}.
Returns
{
"course_id": "8fa640c0-22e6-436b-becd-bf2cfc86741a",
"status": "resuming",
"missing_chapters": [3],
"total_chapters": 5,
"message": "Resuming generation of 1 chapter."
}
If nothing’s missing:
{
"course_id": "8fa640c0-22e6-436b-becd-bf2cfc86741a",
"status": "completed",
"missing_chapters": [],
"total_chapters": 5,
"message": "Course is already complete."
}
Watch GET /v2/courses/{course_id}/progress — or subscribe to course.completed — to know when the resumed chapters land. Resume runs in the background; no mode=stream here.
Errors
- 404 — No course with that ID.
- 409 — Course is already actively generating; wait for the current job to finish.