Skip to main content
The API is organized around two creation paths. Both end at the same place: a generated multi-module video course delivered via signed asset URLs. Create a preset once per client company. Reuse it for every course you build for that company.
1.  POST   /api/v1/presets                          Create preset
2.  POST   /api/v1/presets/{id}/brand-assets        Upload logo + brand colors
3.  POST   /api/v1/presets/{id}/brand/generate      AI derives color palette (async)
4.  GET    /api/v1/presets/{id}/setup-status        Poll until brand = ready
5.  POST   /api/v1/presets/{id}/brand/approve
6.  POST   /api/v1/presets/{id}/slide-style/generate  (async, poll setup-status)
7.  POST   /api/v1/presets/{id}/slide-style/approve
8.  POST   /api/v1/presets/{id}/voice-style/generate  (async, poll setup-status)
9.  POST   /api/v1/presets/{id}/voice-style/approve
10. POST   /api/v1/presets/{id}/questions/start
11. GET    /api/v1/presets/{id}/questions/next        loop: get question
12. POST   /api/v1/presets/{id}/questions/answers     loop: answer
13. POST   /api/v1/presets/{id}/questions/validate
14. POST   /api/v1/presets/{id}/questions/approve     preset is now ready

15. POST   /api/v1/presets/{id}/courses               Create course under the preset
16. GET    /api/v1/courses/{id}/brief/next            loop: get brief question
17. POST   /api/v1/courses/{id}/brief/answers         loop: answer
18. POST   /api/v1/courses/{id}/brief/validate
19. POST   /api/v1/courses/{id}/launch                (Idempotency-Key required)
20. GET    /api/v1/courses/{id}/status                poll until ready
21. GET    /api/v1/courses/{id}/modules/{n}/video     fetch deliverables
Steps 1 to 14 are the one-time preset setup. Steps 15 to 21 are the per-course flow. Once a preset exists, every new course for that company is six API calls (15 to 20) plus delivery fetches.

Option B: No-preset flow (quick start)

For one-off courses or low-volume use, skip the preset entirely. The brand is auto-derived from the source material.
1.  POST   /api/v1/courses/no-preset                  Create course (brand auto-derived)
2.  GET    /api/v1/courses/{id}/brief/next            loop
3.  POST   /api/v1/courses/{id}/brief/answers         loop
4.  POST   /api/v1/courses/{id}/brief/validate
5.  POST   /api/v1/courses/{id}/launch                (Idempotency-Key required)
6.  GET    /api/v1/courses/{id}/status                poll
7.  GET    /api/v1/courses/{id}/modules/{n}/video     fetch deliverables
Use this for the quickstart.

When to use which

Use caseRecommended path
One-off course for a single clientNo-preset
Internal proof-of-conceptNo-preset
Multiple courses for the same companyPreset
White-label LMS that serves many clientsPreset, one per client
ARESS-style scale (many companies, recurring courses)Preset, with full setup automation
You can mix and match: nothing prevents creating no-preset courses on an account that also has presets.

Brief vs preset questions

Two questionnaires exist in the API, do not confuse them:
  • Preset questions (Option A only) capture the company’s sales profile: industry, target buyer persona, pricing model, sales motion. Asked once per preset.
  • Brief questions (both options) capture this course’s intent: target audience, learning objectives, tone. Asked once per course.
Both use the same next + answers loop pattern.

Review checkpoints

By default the pipeline pauses for human approval at up to three checkpoints during generation. See Review Checkpoints for the full model.

Async setup operations

Several preset setup steps (brand synthesis, slide style sampling, voice style sampling) are queued. They return 202 Accepted immediately. Poll GET /api/v1/presets/{id}/setup-status until each artifact reaches ready status before proceeding.
{
  "brand":       {"status": "ready"},
  "slide_style": {"status": "running"},
  "voice_style": {"status": "queued"}
}
Possible statuses: queued, running, ready, failed.