/
RA
rage
/
Main Frontend API
Search skmtc…
⌘K
Changes
Docs
Sign in
Sign in
APIs
5
Docs
History
Schema
Filter operations
certificates
6
chapters
6
chatbot-models
2
chatbots
5
code_giveaways
7
course_auditing
2
course_modules
7
course-credit-registrations
11
course-instances
15
course-plans
15
course-stats
28
course-students
9
courses
66
post
/api/v0/main-frontend/courses
POST `/api/v0/main-frontend/courses` - Create a new course. # Example Request: ```http POST /api/v0/main-frontend/courses HTTP/1.1 Content-Type: application/json { "name": "Introduction to introduction", "slug": "introduction-to-introduction", "organization_id": "1b89e57e-8b57-42f2-9fed-c7a6736e3eec" } ```
get
/api/v0/main-frontend/courses/
GET `/api/v0/main-frontend/courses` - Get all courses Returns all courses.
get
/api/v0/main-frontend/courses/join/{join_code}
GET /courses/join/:join_code - Gets the course related to join code
get
/api/v0/main-frontend/courses/{course_id}
GET `/api/v0/main-frontend/courses/:course_id` - Get course.
put
/api/v0/main-frontend/courses/{course_id}
POST `/api/v0/main-frontend/courses/:course_id` - Update course. # Example Request: ```http PUT /api/v0/main-frontend/courses/ab4541d8-6db4-4561-bdb2-45f35b2544a1 HTTP/1.1 Content-Type: application/json { "name": "Introduction to Introduction" } ```
delete
/api/v0/main-frontend/courses/{course_id}
DELETE `/api/v0/main-frontend/courses/:course_id` - Delete a course.
get
/api/v0/main-frontend/courses/{course_id}/breadcrumb-info
GET `/api/v0/main-frontend/courses/:course_id/breadcrumb-info` - Get information to display breadcrumbs on the manage course pages.
get
/api/v0/main-frontend/courses/{course_id}/chatbots
GET `/api/v0/main-frontend/courses/{course_id}/chatbots`
post
/api/v0/main-frontend/courses/{course_id}/chatbots/{chatbot_configuration_id}/set-as-default
POST `/api/v0/main-frontend/courses/{course_id}/chatbots/{chatbot_configuration_id}/set-as-default`
post
/api/v0/main-frontend/courses/{course_id}/chatbots/{chatbot_configuration_id}/set-as-non-default
POST `/api/v0/main-frontend/courses/{course_id}/chatbots/{chatbot_configuration_id}/set-as-non-default`
get
/api/v0/main-frontend/courses/{course_id}/course-instances
GET `/api/v0/main-frontend/courses/:id/course-instances` - Returns all course instances for given course id.
get
/api/v0/main-frontend/courses/{course_id}/course-module-completions/{user_id}
GET `/api/v0/main-frontend/courses/:course_id/course-module-completions/:user_id` - Returns all course module completions for a given user for this course.
post
/api/v0/main-frontend/courses/{course_id}/course-modules
get
/api/v0/main-frontend/courses/{course_id}/course-users-counts-by-exercise
GET `/api/v0/main-frontend/courses/:id/course-users-counts-by-exercise` - Returns the amount of users for each exercise.
post
/api/v0/main-frontend/courses/{course_id}/create-copy
POST `/api/v0/main-frontend/courses/:id/create-copy` - Create a copy of a course with specified mode. Different copy modes: - `duplicate`: Creates a completely separate copy with new language group - `same_language_group`: Creates a new language version within the same language group - `existing_language_group`: Creates a new language version in the specified language group - `new_language_group`: Creates a new language version in a new language group # Example Request: ```http POST /api/v0/main-frontend/courses/fd484707-25b6-4c51-a4ff-32d8259e3e47/create-copy HTTP/1.1 Content-Type: application/json { "name": "Johdatus kaikkeen", "slug": "johdatus-kaikkeen", "organization_id": "1b89e57e-8b57-42f2-9fed-c7a6736e3eec", "language_code": "fi-FI", "mode": "duplicate" } ``` Or with an existing language group: ```http POST /api/v0/main-frontend/courses/fd484707-25b6-4c51-a4ff-32d8259e3e47/create-copy HTTP/1.1 Content-Type: application/json { "name": "Johdatus kaikkeen", "slug": "johdatus-kaikkeen", "organization_id": "1b89e57e-8b57-42f2-9fed-c7a6736e3eec", "language_code": "fi-FI", "mode": { "existing_language_group": { "target_course_id": "1b89e57e-8b57-42f2-9fed-c7a6736e3eec" } } } ```
get
/api/v0/main-frontend/courses/{course_id}/daily-submission-counts
GET `/api/v0/main-frontend/courses/:id/daily-submission-counts` - Returns submission counts grouped by day.
get
/api/v0/main-frontend/courses/{course_id}/daily-users-who-have-submitted-something
GET `/api/v0/main-frontend/courses/:id/daily-users-who-have-submitted-something` - Returns a count of users who have submitted something grouped by day.
get
/api/v0/main-frontend/courses/{course_id}/default-peer-review
get
/api/v0/main-frontend/courses/{course_id}/exercises
GET `/api/v0/main-frontend/courses/:id/exercises` - Returns all exercises for the course.
get
/api/v0/main-frontend/courses/{course_id}/exercises-and-count-of-answers-requiring-attention
GET `/api/v0/main-frontend/courses/:id/exercises-and-count-of-answers-requiring-attention` - Returns all exercises for the course and count of answers requiring attention in them.
get
/api/v0/main-frontend/courses/{course_id}/export-course-instances
GET `/api/v0/main-frontend/courses/${course.id}/export-course-instances` gets SCV course instances for course
get
/api/v0/main-frontend/courses/{course_id}/export-course-user-consents
GET `/api/v0/main-frontend/courses/${course.id}/export-course-user-consents` gets SCV course specific research form questions and user answers for course
get
/api/v0/main-frontend/courses/{course_id}/export-exercise-tasks
GET `/api/v0/main-frontend/courses/${course.id}/export-exercise-tasks` gets SCV all exercise-tasks' private specs in course
get
/api/v0/main-frontend/courses/{course_id}/export-submissions
GET `/api/v0/main-frontend/courses/${courseId}/export-submissions` gets SCV of course exercise submissions
get
/api/v0/main-frontend/courses/{course_id}/export-user-details
GET `/api/v0/main-frontend/courses/${course.id}/export-user-details` gets SCV of user details for all users having submitted an exercise in the course
get
/api/v0/main-frontend/courses/{course_id}/export-user-exercise-states
GET `/api/v0/main-frontend/courses/${course.id}/export-user-exercise-states` gets CSV for course specific user exercise states
get
/api/v0/main-frontend/courses/{course_id}/feedback
GET `/api/v0/main-frontend/courses/:id/feedback?read=true` - Returns feedback for the given course.
get
/api/v0/main-frontend/courses/{course_id}/feedback-count
GET `/api/v0/main-frontend/courses/:id/feedback-count` - Returns the amount of feedback for the given course.
get
/api/v0/main-frontend/courses/{course_id}/get-course-audiences
get `/api/v0/main-frontend/courses/:course_id/get-course-audiences` - Get course audiences.
get
/api/v0/main-frontend/courses/{course_id}/get-course-metadata
get `/api/v0/main-frontend/courses/:course_id/get-course-metadata` - Get course metadata.
get
/api/v0/main-frontend/courses/{course_id}/get-course-prerequisites
get `/api/v0/main-frontend/courses/:course_id/get-course-prerequisites` - Get course prerequisites.
post
/api/v0/main-frontend/courses/{course_id}/join-course-with-join-code
POST /courses/:course_id/join-course-with-join-code - Adds the user to join_code_uses so the user gets access to the course
get
/api/v0/main-frontend/courses/{course_id}/language-versions
GET `/api/v0/main-frontend/courses/:id/language-versions` - Returns all language versions of the same course. # Example Request: ```http GET /api/v0/main-frontend/courses/fd484707-25b6-4c51-a4ff-32d8259e3e47/language-versions HTTP/1.1 Content-Type: application/json ```
post
/api/v0/main-frontend/courses/{course_id}/new-chapter-ordering
POST `/api/v0/main-frontend/courses/:id/new-chapter-ordering` - Reorders chapters based on modified chapter number.# Creates redirects if url_path changes.
post
/api/v0/main-frontend/courses/{course_id}/new-course-instance
POST `/api/v0/main-frontend/courses/:id/new-course-instance`
post
/api/v0/main-frontend/courses/{course_id}/new-page-ordering
POST `/api/v0/main-frontend/courses/:id/new-page-ordering` - Reorders pages to the given order numbers and given chapters. Note that the page objects posted here might have the content omitted because it is not needed here and the content makes the request body to be very large. Creates redirects if url_path changes.
get
/api/v0/main-frontend/courses/{course_id}/page-visit-datum-summary
GET `/api/v0/main-frontend/courses/${course.id}/page-visit-datum-summary` - Gets aggregated statistics for page visits for the course.
get
/api/v0/main-frontend/courses/{course_id}/page-visit-datum-summary-by-countries
GET `/api/v0/main-frontend/courses/${course.id}/page-visit-datum-summary-by-countries` - Gets aggregated statistics for page visits for the course.
get
/api/v0/main-frontend/courses/{course_id}/page-visit-datum-summary-by-device-types
GET `/api/v0/main-frontend/courses/${course.id}/page-visit-datum-summary-by-device-types` - Gets aggregated statistics for page visits for the course.
get
/api/v0/main-frontend/courses/{course_id}/page-visit-datum-summary-by-pages
GET `/api/v0/main-frontend/courses/${course.id}/page-visit-datum-summary-by-pages` - Gets aggregated statistics for page visits for the course.
get
/api/v0/main-frontend/courses/{course_id}/partners-block
GET /courses/:course_id/partners_blocks - Gets a partners block related to a course
post
/api/v0/main-frontend/courses/{course_id}/partners-block
POST /api/v0/main-frontend/courses/:course_id/partners_block - Create or updates a partners block for a course
delete
/api/v0/main-frontend/courses/{course_id}/partners-block
DELETE `/api/v0/main-frontend/courses/:course_id` - Delete a partners block in a course.
get
/api/v0/main-frontend/courses/{course_id}/progress/{user_id}
GET `/api/v0/main-frontend/courses/:course_id/progress/:user_id` - Returns user progress for the course.
get
/api/v0/main-frontend/courses/{course_id}/references
post
/api/v0/main-frontend/courses/{course_id}/references
post
/api/v0/main-frontend/courses/{course_id}/references/{reference_id}
delete
/api/v0/main-frontend/courses/{course_id}/references/{reference_id}
post
/api/v0/main-frontend/courses/{course_id}/reprocess-completions
POST `/api/v0/main-frontend/courses/{course_id}/reprocess-completions` Reprocesses all module completions for the given course instance. Only available to admins.
post
/api/v0/main-frontend/courses/{course_id}/set-join-code
POST /api/v0/main-frontend/courses/:course_id/generate-join-code - Generates a code that is used as a part of URL to join course
get
/api/v0/main-frontend/courses/{course_id}/sisu-course-llm-descriptions
GET `/api/v0/main-frontend/courses/:course_id/sisu-course-llm-descriptions` - Get Sisu descriptions summarised by LLM Returns LLM generated descriptions for a course based on information from Sisu API.
get
/api/v0/main-frontend/courses/{course_id}/status-for-all-exercises/{user_id}
GET `/api/v0/main-frontend/courses/:course_id/status-for-all-exercises/:user_id` - Returns status for all exercises in the course for a given user.
get
/api/v0/main-frontend/courses/{course_id}/structure
GET `/api/v0/main-frontend/courses/:course_id/structure` - Returns the structure of a course. # Example ```json { "course": { "id": "d86cf910-4d26-40e9-8c9c-1cc35294fdbb", "slug": "introduction-to-everything", "created_at": "2021-04-28T10:40:54.503917", "updated_at": "2021-04-28T10:40:54.503917", "name": "Introduction to everything", "organization_id": "1b89e57e-8b57-42f2-9fed-c7a6736e3eec", "deleted_at": null, "language_code": "en-US", "copied_from": null, "language_version_of_course_id": null }, "pages": [ { "id": "f3b0d699-c9be-4d56-bd0a-9d40e5547e4d", "created_at": "2021-04-28T13:51:51.024118", "updated_at": "2021-04-28T14:36:18.179490", "course_id": "d86cf910-4d26-40e9-8c9c-1cc35294fdbb", "content": [], "url_path": "/", "title": "Welcome to Introduction to Everything", "deleted_at": null, "chapter_id": "d332f3d9-39a5-4a18-80f4-251727693c37" } ], "chapters": [ { "id": "d332f3d9-39a5-4a18-80f4-251727693c37", "created_at": "2021-04-28T16:11:47.477850", "updated_at": "2021-04-28T16:11:47.477850", "name": "The Basics", "course_id": "d86cf910-4d26-40e9-8c9c-1cc35294fdbb", "deleted_at": null, "chapter_image_url": "http://project-331.local/api/v0/files/uploads/organizations/1b89e57e-8b57-42f2-9fed-c7a6736e3eec/courses/d86cf910-4d26-40e9-8c9c-1cc35294fdbb/images/mbPQh8th96TdUwX96Y0ch1fjbJLRFr.png", "chapter_number": 1, "front_page_id": null } ] } ```
get
/api/v0/main-frontend/courses/{course_id}/submission-counts-by-exercise
GET `/api/v0/main-frontend/courses/:id/submission-counts-by-exercise` - Returns submission counts grouped by weekday and hour.
get
/api/v0/main-frontend/courses/{course_id}/suspected-cheaters
GET /api/v0/main-frontend/courses/${course.id}/suspected-cheaters?status=Flagged - returns the suspected cheaters in the given review state for a course.
post
/api/v0/main-frontend/courses/{course_id}/suspected-cheaters/confirm/{user_id}
POST /api/v0/main-frontend/courses/${course.id}/suspected-cheaters/confirm/:user_id - confirms the student cheated (sets status to 'ConfirmedCheating') and fails the student.
post
/api/v0/main-frontend/courses/{course_id}/suspected-cheaters/dismiss/{user_id}
POST /api/v0/main-frontend/courses/${course.id}/suspected-cheaters/dismiss/:user_id - dismisses the suspicion as a false alarm (sets status to 'Dismissed').
get
/api/v0/main-frontend/courses/{course_id}/suspected-cheaters/flagged-count
GET /api/v0/main-frontend/courses/${course.id}/suspected-cheaters/flagged-count - number of suspected cheaters awaiting review (status flagged). Used to show a review notification to teachers.
delete
/api/v0/main-frontend/courses/{course_id}/teacher-reset-course-progress-for-everyone
DELETE `/api/v0/main-frontend/courses/${course.id}/teacher-reset-course-progress-for-everyone` - Can be used by teachers to reset the course progress for all students. Only works when the course is a draft and not published to students. Cannot be used to delete a course that some students have taken. Deletes submissions, user exercise states, and peer reviews etc. for all the course instances of this course.
delete
/api/v0/main-frontend/courses/{course_id}/teacher-reset-course-progress-for-themselves
DELETE `/api/v0/main-frontend/courses/${course.id}/teacher-reset-course-progress-for-themselves` - Allows a teacher to reset the course progress for themselves. Cannot be used to reset the course for others. Deletes submissions, user exercise states, and peer reviews etc. for all the course instances of this course.
get
/api/v0/main-frontend/courses/{course_id}/thresholds
GET /api/v0/main-frontend/courses/${course.id}/thresholds - get all thresholds for all modules in a course.
post
/api/v0/main-frontend/courses/{course_id}/update-metadata
POST `/api/v0/main-frontend/courses/:course_id/update-metadata` - Update metadata.
post
/api/v0/main-frontend/courses/{course_id}/update-peer-review-queue-reviews-received
POST `/api/v0/main-frontend/courses/${course_id}/update-peer-review-queue-reviews-received` Updates reviews received for all the students in the peer review queue for a specific course. Updates only entries that have not received enough peer reviews in the table. Only available to admins.
post
/api/v0/main-frontend/courses/{course_id}/upload
POST `/api/v0/main-frontend/courses/:course_id/upload` - Uploads a media (image, audio, file) for the course from Gutenberg page edit. Put the the contents of the media in a form and add a content type header multipart/form-data. # Example Request: ```http POST /api/v0/main-frontend/pages/d86cf910-4d26-40e9-8c9c-1cc35294fdbb/upload HTTP/1.1 Content-Type: multipart/form-data BINARY_DATA ```
get
/api/v0/main-frontend/courses/{course_id}/user-settings/{user_id}
GET `/api/v0/main-frontend/courses/:course_id/user-settings/:user_id` - Get current course settings for a specific user.
get
/api/v0/main-frontend/courses/{course_id}/weekday-hour-submission-counts
GET `/api/v0/main-frontend/courses/:id/weekday-hour-submission-counts` - Returns submission counts grouped by weekday and hour.
credit-registration-admin
34
credit-registrations
16
email_templates
3
email-verification
4
exams
11
exercise_repositories
5
exercise_services
5
exercise_slide_submissions
3
exercises
11
feedback
1
files
2
global-stats
7
glossary
4
oauth
17
org
1
organizations
16
page_audio
3
pages
8
playground-examples
4
playground-views
2
proposed_edits
3
regradings
4
roles
4
shared_submissions
4
status
11
teacher_grading_decisions
1
time
1
user-details
10
users
18
courses
Copy Markdown
Copied
Copy failed
Changes to GET `/api/v0/main-frontend/courses` - Get all courses Returns all courses.
get
/api/v0/main-frontend/courses/
Jul 21, 2026
e1fba8af5777
Revision changes
○
endpoint added
Ask about this API