📚 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/courses

List published courses (paginated). Supports ?category=&page=&limit=

POST/api/courses

Create 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}/lessons

Create a lesson

{"title":"...","type":"video|text|quiz","videoUrl":"...","freePreview":true}
PUT/api/courses/{slug}/lessons

Reorder 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/enrollments

Enroll in a course

{"courseId":"..."}
GET/api/enrollments

Get my enrolled courses

GET/api/enroll

Auto-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"}'