📚 API Documentation
Build and manage courses programmatically via REST API.
🔐 Authentication
All endpoints require a valid session cookie. Get one by signing in via POST /api/auth/callback/demo with a CSRF token from GET /api/auth/csrf.
# 1. Get CSRF token curl -c cookies.txt https://up-course.com/api/auth/csrf # 2. Sign in (demo) curl -X POST https://up-course.com/api/auth/callback/demo \ -b cookies.txt -c cookies.txt \ -d "csrfToken=<TOKEN>&name=MyApp" # 3. Use session cookie for all subsequent requests curl -b cookies.txt https://up-course.com/api/courses
📡 Endpoints
Courses
GET
/api/coursesList published courses (paginated). Supports ?category=&page=&limit=
POST
/api/coursesCreate a new course with optional inline lessons
{"title":"...","description":"...","price":0,"lessons":[{"title":"...","videoUrl":"...","freePreview":true}]}GET
/api/courses/{slug}Get course with flat lessons
PATCH
/api/courses/{slug}Update course metadata or status
{"status":"published"}Lessons
POST
/api/courses/{slug}/lessonsCreate a lesson
{"title":"...","type":"video|text|quiz","videoUrl":"...","freePreview":true}PUT
/api/courses/{slug}/lessonsReorder lessons
{"lessonIds":["id1","id2"]}PATCH
/api/courses/{slug}/lessons/{id}Update lesson (title, content, videoUrl, published, etc.)
DELETE
/api/courses/{slug}/lessons/{id}Delete a lesson
Enrollments
POST
/api/enrollmentsEnroll in a course
{"courseId":"..."}GET
/api/enrollmentsGet my enrolled courses
GET
/api/enrollAuto-enroll + redirect (free courses). ?courseId=&redirect=
Progress
POST
/api/progress/{lessonId}Save video position, mark complete, or submit quiz
{"completed":true,"videoPosition":120}GET
/api/progress/{courseId}Get all progress for a course
🚀 Full Example: Create a Course
# Create course with inline lessons (flat, no modules)
curl -X POST https://up-course.com/api/courses -b cookies.txt -H "Content-Type: application/json" -d '{"title":"My Course","description":"Learn something","price":0,
"lessons":[{"title":"Intro","videoUrl":"https://youtube.com/watch?v=...","freePreview":true}]}'
# Publish course
curl -X PATCH https://up-course.com/api/courses/my-course-xxx \
-b cookies.txt -H "Content-Type: application/json" \
-d '{"status":"published"}'