--- name: courses-routes description: Handle 28 OpenAPI operation(s) under /api/v1/courses for the courses route group. --- # courses API Routes Handle 28 OpenAPI operation(s) under /api/v1/courses for the courses route group. Use the generated operation tools to make real API calls. Do not invent API responses. If a tool reports missing setup, return the exact setup field name to the caller. For write, update, or delete operations, state the intended action before calling the tool. Deployment context for this LearnHouse instance: - It runs single-organization tenancy. - Existing organization: A2A Cloud Academy - Default `org_slug`: `default` - Default `org_id`: `1` - When listing courses and the user does not provide pagination, use `page=1` and `limit=50`. - When creating a course, use query parameter `org_id=1` unless the user explicitly provides another org ID. - Course creation must send multipart form fields `name`, `description`, `public`, and `about`. If the user only gives a title, use it as `name`, provide short `description` and `about` values, and set `public=false` unless the user asks for a public course. - When the user asks for a course with lessons, modules, or activities, do not stop after creating the course and chapters. Create at least one activity per chapter, using each chapter's own returned `chapter_id`. - Do not attach all generated activities to the first chapter. Verify the resulting course metadata shows activities distributed under the intended chapters. - For smoke/status checks, use course count or course list with default `org_slug=default`; do not call `GET /api/v1/health` as a preflight. - Course creation and course management require `LEARNHOUSE_AUTH` consumer setup. ## Operations ### api_create_course_api_v1_courses_post - Operation ID: `api_create_course_api_v1_courses_post` - Route: `POST /api/v1/courses/` - Mode: WRITE - Summary: Create course - Parameters: - `org_id` in `query` required - Body: multipart form fields `name`, `description`, `public`, and `about`. ### api_export_courses_batch_api_v1_courses_export_batch_post - Operation ID: `api_export_courses_batch_api_v1_courses_export_batch_post` - Route: `POST /api/v1/courses/export/batch` - Mode: WRITE - Summary: Export multiple courses as ZIP - Body: JSON request body accepted. ### api_get_course_by_id_api_v1_courses_id_course_id_get - Operation ID: `api_get_course_by_id_api_v1_courses_id_course_id_get` - Route: `GET /api/v1/courses/id/{course_id}` - Mode: READ - Summary: Get course by ID - Parameters: - `course_id` in `path` required ### api_import_courses_api_v1_courses_import_post - Operation ID: `api_import_courses_api_v1_courses_import_post` - Route: `POST /api/v1/courses/import` - Mode: WRITE - Summary: Import courses from an analyzed package - Parameters: - `org_id` in `query` required - Body: JSON request body accepted. ### api_analyze_import_package_api_v1_courses_import_analyze_post - Operation ID: `api_analyze_import_package_api_v1_courses_import_analyze_post` - Route: `POST /api/v1/courses/import/analyze` - Mode: WRITE - Summary: Analyze a course import package - Parameters: - `org_id` in `query` required - Body: JSON request body accepted. ### api_create_from_migration_api_v1_courses_migrate_create_post - Operation ID: `api_create_from_migration_api_v1_courses_migrate_create_post` - Route: `POST /api/v1/courses/migrate/create` - Mode: WRITE - Summary: Create course from migration - Parameters: - `org_id` in `query` required - Body: JSON request body accepted. ### api_suggest_structure_api_v1_courses_migrate_suggest_post - Operation ID: `api_suggest_structure_api_v1_courses_migrate_suggest_post` - Route: `POST /api/v1/courses/migrate/suggest` - Mode: WRITE - Summary: Suggest migration structure - Parameters: - `org_id` in `query` required - Body: JSON request body accepted. ### api_upload_migration_files_api_v1_courses_migrate_upload_post - Operation ID: `api_upload_migration_files_api_v1_courses_migrate_upload_post` - Route: `POST /api/v1/courses/migrate/upload` - Mode: WRITE - Summary: Upload migration files - Parameters: - `org_id` in `query` required - `temp_id` in `query` - Body: JSON request body accepted. ### api_get_courses_count_api_v1_courses_org_slug_org_slug_count_get - Operation ID: `api_get_courses_count_api_v1_courses_org_slug_org_slug_count_get` - Route: `GET /api/v1/courses/org_slug/{org_slug}/count` - Mode: READ - Summary: Count courses in an organization - Parameters: - `org_slug` in `path` required ### api_get_course_by_orgslug_api_v1_courses_org_slug_org_2dfd4569fc - Operation ID: `api_get_course_by_orgslug_api_v1_courses_org_slug_org_slug_page_page_limit_limit` - Route: `GET /api/v1/courses/org_slug/{org_slug}/page/{page}/limit/{limit}` - Mode: READ - Summary: List courses for an organization - Parameters: - `page` in `path` required - `limit` in `path` required - `org_slug` in `path` required - `include_unpublished` in `query` ### api_search_courses_api_v1_courses_org_slug_org_slug_search_get - Operation ID: `api_search_courses_api_v1_courses_org_slug_org_slug_search_get` - Route: `GET /api/v1/courses/org_slug/{org_slug}/search` - Mode: READ - Summary: Search courses - Parameters: - `org_slug` in `path` required - `query` in `query` required - `page` in `query` - `limit` in `query` ### api_delete_course_api_v1_courses_course_uuid_delete - Operation ID: `api_delete_course_api_v1_courses_course_uuid_delete` - Route: `DELETE /api/v1/courses/{course_uuid}` - Mode: WRITE - Summary: Delete course - Parameters: - `course_uuid` in `path` required ### api_get_course_api_v1_courses_course_uuid_get - Operation ID: `api_get_course_api_v1_courses_course_uuid_get` - Route: `GET /api/v1/courses/{course_uuid}` - Mode: READ - Summary: Get course by UUID - Parameters: - `course_uuid` in `path` required ### api_update_course_api_v1_courses_course_uuid_put - Operation ID: `api_update_course_api_v1_courses_course_uuid_put` - Route: `PUT /api/v1/courses/{course_uuid}` - Mode: WRITE - Summary: Update course - Parameters: - `course_uuid` in `path` required - Body: JSON request body accepted. ### api_apply_course_contributor_api_v1_courses_course_uu_a35b28139c - Operation ID: `api_apply_course_contributor_api_v1_courses_course_uuid_apply_contributor_post` - Route: `POST /api/v1/courses/{course_uuid}/apply-contributor` - Mode: WRITE - Summary: Apply as course contributor - Parameters: - `course_uuid` in `path` required ### api_add_bulk_course_contributors_api_v1_courses_cours_3da08940ff - Operation ID: `api_add_bulk_course_contributors_api_v1_courses_course_uuid_bulk_add_contributor` - Route: `POST /api/v1/courses/{course_uuid}/bulk-add-contributors` - Mode: WRITE - Summary: Bulk add course contributors - Parameters: - `course_uuid` in `path` required - Body: JSON request body accepted. ### api_remove_bulk_course_contributors_api_v1_courses_co_3117ba4aab - Operation ID: `api_remove_bulk_course_contributors_api_v1_courses_course_uuid_bulk_remove_contr` - Route: `PUT /api/v1/courses/{course_uuid}/bulk-remove-contributors` - Mode: WRITE - Summary: Bulk remove course contributors - Parameters: - `course_uuid` in `path` required - Body: JSON request body accepted. ### api_clone_course_api_v1_courses_course_uuid_clone_post - Operation ID: `api_clone_course_api_v1_courses_course_uuid_clone_post` - Route: `POST /api/v1/courses/{course_uuid}/clone` - Mode: WRITE - Summary: Clone course - Parameters: - `course_uuid` in `path` required ### api_get_course_contributors_api_v1_courses_course_uui_f1e2d0838a - Operation ID: `api_get_course_contributors_api_v1_courses_course_uuid_contributors_get` - Route: `GET /api/v1/courses/{course_uuid}/contributors` - Mode: READ - Summary: List course contributors - Parameters: - `course_uuid` in `path` required ### api_update_course_contributor_api_v1_courses_course_u_803ac35801 - Operation ID: `api_update_course_contributor_api_v1_courses_course_uuid_contributors_contributo` - Route: `PUT /api/v1/courses/{course_uuid}/contributors/{contributor_user_id}` - Mode: WRITE - Summary: Update course contributor - Parameters: - `course_uuid` in `path` required - `contributor_user_id` in `path` required - `authorship` in `query` required - `authorship_status` in `query` required ### api_export_course_api_v1_courses_course_uuid_export_get - Operation ID: `api_export_course_api_v1_courses_course_uuid_export_get` - Route: `GET /api/v1/courses/{course_uuid}/export` - Mode: READ - Summary: Export course as ZIP - Parameters: - `course_uuid` in `path` required ### api_get_course_meta_api_v1_courses_course_uuid_meta_get - Operation ID: `api_get_course_meta_api_v1_courses_course_uuid_meta_get` - Route: `GET /api/v1/courses/{course_uuid}/meta` - Mode: READ - Summary: Get course metadata - Parameters: - `course_uuid` in `path` required - `with_unpublished_activities` in `query` - `slim` in `query` ### api_get_course_user_rights_api_v1_courses_course_uuid_rights_get - Operation ID: `api_get_course_user_rights_api_v1_courses_course_uuid_rights_get` - Route: `GET /api/v1/courses/{course_uuid}/rights` - Mode: READ - Summary: Get course user rights - Parameters: - `course_uuid` in `path` required ### api_create_course_thumbnail_api_v1_courses_course_uui_dc5e5c11d8 - Operation ID: `api_create_course_thumbnail_api_v1_courses_course_uuid_thumbnail_put` - Route: `PUT /api/v1/courses/{course_uuid}/thumbnail` - Mode: WRITE - Summary: Update course thumbnail - Parameters: - `course_uuid` in `path` required - Body: JSON request body accepted. ### api_delete_course_update_api_v1_courses_course_uuid_u_686f93b204 - Operation ID: `api_delete_course_update_api_v1_courses_course_uuid_update_courseupdate_uuid_del` - Route: `DELETE /api/v1/courses/{course_uuid}/update/{courseupdate_uuid}` - Mode: WRITE - Summary: Delete course update - Parameters: - `course_uuid` in `path` required - `courseupdate_uuid` in `path` required ### api_update_course_update_api_v1_courses_course_uuid_u_01971e1e0f - Operation ID: `api_update_course_update_api_v1_courses_course_uuid_update_courseupdate_uuid_put` - Route: `PUT /api/v1/courses/{course_uuid}/update/{courseupdate_uuid}` - Mode: WRITE - Summary: Update course update - Parameters: - `course_uuid` in `path` required - `courseupdate_uuid` in `path` required - Body: JSON request body accepted. ### api_get_course_updates_api_v1_courses_course_uuid_updates_get - Operation ID: `api_get_course_updates_api_v1_courses_course_uuid_updates_get` - Route: `GET /api/v1/courses/{course_uuid}/updates` - Mode: READ - Summary: List course updates - Parameters: - `course_uuid` in `path` required ### api_create_course_update_api_v1_courses_course_uuid_updates_post - Operation ID: `api_create_course_update_api_v1_courses_course_uuid_updates_post` - Route: `POST /api/v1/courses/{course_uuid}/updates` - Mode: WRITE - Summary: Create course update - Parameters: - `course_uuid` in `path` required - Body: JSON request body accepted.