Content Generation CLI

Generate modules, tests, slides, videos, courses, and answer evaluations from the CLI.

tutorflow module create, list, get, and open

Create one standalone lesson module:

tutorflow module create "Create a beginner Python variables lesson" \
  --language en \
  --idempotency-key "module-python-variables-v1"

Example JSON response:

{
  "id": "61f1b111-0df3-4de3-a83f-d4b10304949d",
  "title": "Python Variables for Beginners",
  "description": "A standalone lesson module introducing variable assignment and naming.",
  "type": "lesson",
  "status": "completed",
  "publicUrl": "https://tutorflow.io/en/platform/modules/share_abc123",
  "shareToken": "share_abc123",
  "createdAt": "2026-05-12T03:10:00.000Z",
  "priceSnapshot": {
    "category": "module",
    "catalogKey": "module.default",
    "tier": "default",
    "unit": "lesson",
    "unitPrice": 0.05,
    "units": 1,
    "amountUsd": 0.05,
    "currency": "USD",
    "source": "platform_pricing_catalog_v2"
  }
}

List modules:

tutorflow module list --limit 10 --offset 0

Example JSON response:

{
  "items": [
    {
      "id": "61f1b111-0df3-4de3-a83f-d4b10304949d",
      "title": "Python Variables for Beginners",
      "status": "completed",
      "publicUrl": "https://tutorflow.io/en/platform/modules/share_abc123",
      "createdAt": "2026-05-12T03:10:00.000Z"
    }
  ],
  "total": 1
}

Fetch or open a module:

tutorflow module get "module_id"
tutorflow module open "module_id"

module open prints the resolved URL, even in non-interactive mode:

{
  "publicUrl": "https://tutorflow.io/en/platform/modules/share_abc123"
}

tutorflow test create, list, get, edit-token, and open

Create a generated test:

tutorflow test create "Create a 10-question algebra quiz" \
  --language en \
  --idempotency-key "test-algebra-v1"

Example JSON response:

{
  "id": "a1c2d3e4-f5a6-4789-8b0c-d1e2f3a4b5c6",
  "status": "completed",
  "title": "Algebra Readiness Quiz",
  "description": "A 10-question algebra quiz with auto-graded items.",
  "itemCount": 10,
  "previewUrl": "https://tutorflow.io/en/platform/tests/preview_test_abc123",
  "publicUrl": "https://tutorflow.io/en/platform/tests/take/share_test_abc123",
  "createdAt": "2026-05-12T03:10:00.000Z"
}

List, fetch, open, or rotate an edit token:

tutorflow test list --limit 10 --offset 0
tutorflow test get "test_id"
tutorflow test open "test_id"
tutorflow test edit-token "test_id"

Example JSON response from test list:

{
  "items": [
    {
      "id": "a1c2d3e4-f5a6-4789-8b0c-d1e2f3a4b5c6",
      "status": "completed",
      "title": "Algebra Readiness Quiz",
      "itemCount": 10,
      "previewUrl": "https://tutorflow.io/en/platform/tests/preview_test_abc123",
      "createdAt": "2026-05-12T03:10:00.000Z"
    }
  ],
  "total": 1
}

Example JSON response from test edit-token:

{
  "editToken": "7d6f51fdfef3412ea9c35b6116d9be0a",
  "editTokenExpiresAt": "2026-05-12T04:10:00.000Z"
}

tutorflow slide create, list, get, and open

Create a slide deck:

tutorflow slide create "Intro to photosynthesis for grade 6"

Example JSON response:

{
  "id": "61f1b111-0df3-4de3-a83f-d4b10304949d",
  "title": "Intro to Photosynthesis",
  "status": "completed",
  "createdAt": "2026-05-12T03:10:00.000Z",
  "previewUrl": "https://tutorflow.io/en/platform/slides/edit/...",
  "priceSnapshot": {
    "category": "slide",
    "catalogKey": "slide.default",
    "tier": "default",
    "unit": "slide",
    "unitPrice": 0.03,
    "units": 10,
    "amountUsd": 0.3,
    "currency": "USD",
    "source": "platform_pricing_catalog_v2"
  }
}

List, fetch, or open slides:

tutorflow slide list
tutorflow slide get "slide_id"
tutorflow slide open "slide_id"

Example JSON response from slide list:

[
  {
    "id": "61f1b111-0df3-4de3-a83f-d4b10304949d",
    "title": "Intro to Photosynthesis",
    "status": "completed",
    "createdAt": "2026-05-12T03:10:00.000Z",
    "previewUrl": "https://tutorflow.io/en/platform/slides/edit/..."
  }
]

tutorflow video create, list, get, and open

Create video content metadata:

tutorflow video create "Explain Newton's first law with examples"

Example JSON response:

{
  "id": "e41a085a-e43f-4f63-92f4-9e11250f6e63",
  "title": "Newton's First Law",
  "status": "completed",
  "sceneCount": 5,
  "createdAt": "2026-05-12T03:10:00.000Z",
  "previewUrl": "https://tutorflow.io/en/platform/videos/edit/...",
  "renderStatus": "PENDING",
  "requiresRenderTrigger": true
}

List, fetch, or open videos:

tutorflow video list
tutorflow video get "video_id"
tutorflow video open "video_id"

Example JSON response from video list:

[
  {
    "id": "e41a085a-e43f-4f63-92f4-9e11250f6e63",
    "title": "Newton's First Law",
    "status": "completed",
    "sceneCount": 5,
    "createdAt": "2026-05-12T03:10:00.000Z",
    "previewUrl": "https://tutorflow.io/en/platform/videos/edit/..."
  }
]

Video creation does not imply that a rendered video file is immediately available. Check the returned status and follow the video API response fields.

tutorflow course create, list, get, and open

Create a course:

tutorflow course create "Build an introductory JavaScript course"

Example JSON response:

{
  "id": "a1c2d3e4-f5a6-4789-8b0c-d1e2f3a4b5c6",
  "title": "Introductory JavaScript",
  "status": "completed",
  "createdAt": "2026-05-12T03:10:00.000Z",
  "previewUrl": "https://tutorflow.io/en/platform/courses/share_course_abc123",
  "publicUrl": "https://tutorflow.io/en/platform/courses/share_course_abc123/lessons/1",
  "lessonCount": 8
}

List, fetch, or open courses:

tutorflow course list
tutorflow course get "course_id"
tutorflow course open "course_id"

Example JSON response from course list:

[
  {
    "id": "a1c2d3e4-f5a6-4789-8b0c-d1e2f3a4b5c6",
    "title": "Introductory JavaScript",
    "status": "completed",
    "createdAt": "2026-05-12T03:10:00.000Z",
    "previewUrl": "https://tutorflow.io/en/platform/courses/share_course_abc123"
  }
]

tutorflow evaluate

Evaluate a learner answer:

tutorflow evaluate \
  --type open_ended \
  --question "Explain the water cycle" \
  --student-answer "Water evaporates, condenses, and falls as rain."

Example JSON response:

{
  "id": "2f4ad455-1e8e-4b6c-9f3a-7ebf4cf6f483",
  "status": "COMPLETED",
  "evaluationType": "open_ended",
  "score": 8,
  "maxScore": 10,
  "normalizedScore": 80,
  "confidence": 0.92,
  "strengths": [
    "Correctly identifies evaporation and condensation"
  ],
  "mistakes": [],
  "suggestions": [
    "Mention collection as the final stage of the cycle"
  ],
  "feedbackSummary": "The answer shows a solid understanding of the major water cycle stages.",
  "isTerminal": true,
  "createdAt": "2026-05-12T03:10:00.000Z",
  "completedAt": "2026-05-12T03:10:01.000Z"
}

Exact evaluations should include an expected answer:

tutorflow evaluate \
  --type exact \
  --question "What is 2 + 2?" \
  --student-answer "4" \
  --expected-answer "4"

Rubric evaluations require rubric criteria as JSON:

tutorflow evaluate \
  --type rubric_short_answer \
  --question "Explain the water cycle" \
  --student-answer "Water evaporates and condenses." \
  --rubric-json '{"criteria":[{"name":"Accuracy","description":"Scientific correctness","maxScore":10}]}'

Use --json when another agent or script needs to parse the result.