CourseSmith Developer

POST a topic.
GET a finished lecture.

One API turns topics, documents, and whole repos into rendered, narrated course videos. REST endpoints, async jobs with SSE, signed webhooks, and a Python SDK — no studio required.

Your first call
curl "https://api.coursesmith.ai/v1/me" \
  -H "Authorization: Bearer cs_live_..."

Explore the platform

Every area of the API, grouped the way you'll use it.

Quickstart — topic to video in 4 calls

Create a key at Settings → API Keys, then run these in order — the URLs below already point at this deployment's API.

1

Create a lesson

post/v1/lessons/standalone

A standalone lesson is the unit everything hangs off — no course required.

bash
curl -X POST "https://api.coursesmith.ai/v1/lessons/standalone" \
  -H "Authorization: Bearer cs_live_..." \
  -H "Content-Type: application/json" \
  -d '{"title": "Binary Search Trees", "subject_domain": "programming"}'
# → { "course_id": "...", "topic_id": "...", "subtopic_id": "<lesson_id>" }
2

Kick off the end-to-end pipeline

post/v1/lessons/{lesson_id}/videos

One call runs script generation → per-scene TTS → timeline build → final MP4, unattended. Add "video_orientation": "portrait" to generate for a NATIVE 9:16 video (1080x1920, every scene authored tall — not a crop); GET /v1/options lists the orientations and sizes.

bash
curl -X POST "https://api.coursesmith.ai/v1/lessons/<lesson_id>/videos" \
  -H "Authorization: Bearer cs_live_..." \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: bst-video-001" \
  -d '{"generate": {"lecture_style": "short", "video_orientation": "portrait"}, "resolution": "1080p"}'
# video_orientation: landscape (default, 1920x1080) | portrait (native 9:16, 1080x1920)
# → 202 { "job_id": "pipe_...", "status": "queued" }
3

Poll the job (or stream it)

get/v1/jobs/{job_id}

Status is always queued | processing | succeeded | failed | cancelled. SSE stream available too.

bash
curl "https://api.coursesmith.ai/v1/jobs/pipe_..." \
  -H "Authorization: Bearer cs_live_..."
# → { "status": "succeeded", "video_id": "<video_id>", "video_url": "https://..." }
4

Download the MP4

get/v1/videos/{video_id}/download

A 302 redirect straight to the rendered file — pipe it wherever you need it.

bash
curl -L "https://api.coursesmith.ai/v1/videos/<video_id>/download" \
  -H "Authorization: Bearer cs_live_..." \
  -o lecture.mp4

How the platform works

Six concepts cover every integration — read them left to right.

Authentication

Bearer keys, Studio plan, isolation

Create a key at Settings → API Keys (shown once, stored hashed, max 5 active). Send it on every request:

header
Authorization: Bearer cs_live_...

The developer API is part of the Pro, Studio and Enterprise plans — creating a key needs one of them. An account that moves to a plan without the API gets 402 tier_upgrade_required. Every request acts as the key's owner; one user can never see another's data.

SDKs & raw spec

Runnable examples + the single-file Python SDK live in our public GitHub repo: create a video, edit scenes, ground a course in a URL or repo, verify webhook signatures, export quizzes. For TypeScript, generate types from the OpenAPI document with openapi-typescript.

Connect an AI agent (MCP)

The CourseSmith MCP server gives Claude, Cursor, VS Code Copilot, and Windsurf 17 tools over this API — create lessons, edit storyboard scenes, and render videos by just asking. One command in Claude Code: claude mcp add coursesmith …

MCP setup guide