Skip to main content
This page documents two related endpoints for managing course progress:
  1. Update course progress (mark lectures as completed)
  2. Get current course progress

Update Course Progress

Mark a lecture as completed and update the user’s course progress. Automatically generates a certificate when course is completed.

Authentication

Requires authentication via Clerk. The userId is automatically extracted from the authentication token.

Request Body

courseId
string
required
The unique identifier of the course
lectureId
string
required
The unique identifier of the lecture to mark as completed

Response

success
boolean
required
Indicates whether the request was successful
message
string
required
Status message (e.g., “Progress Updated”)
isCourseCompleted
boolean
required
True if all lectures in the course are now completed
certificateAvailable
boolean
required
True if a certificate has been generated and is available for download

Request Example

{
  "courseId": "60d5ec49f1b2c72b8c8e4f1a",
  "lectureId": "lecture_ch1_vid3"
}

Response Examples

{
  "success": true,
  "message": "Progress Updated",
  "isCourseCompleted": false,
  "certificateAvailable": false
}
{
  "success": true,
  "message": "Progress Updated",
  "isCourseCompleted": true,
  "certificateAvailable": true
}
{
  "success": false,
  "message": "Invalid request data"
}
{
  "success": false,
  "message": "Course not found"
}
{
  "success": false,
  "message": "Course not purchased"
}

Error Codes

Status CodeDescription
200Success
400Invalid request data
401Unauthorized - Invalid or missing authentication token
403Course not purchased
404Course not found
500Internal server error

Behavior Notes

  • Uses $addToSet to prevent duplicate lecture completions
  • Creates a CourseProgress document if it doesn’t exist (upsert)
  • Automatically marks course as completed when all lectures are finished
  • Generates a certificate PDF and uploads to Cloudinary when course is completed
  • Certificate includes QR code for verification

Validation Schema

{
  courseId: z.string().min(1),
  lectureId: z.string().min(1)
}

Get Course Progress

Retrieve the user’s progress for a specific course.

Authentication

Requires authentication via Clerk. The userId is automatically extracted from the authentication token.

Request Body

courseId
string
required
The unique identifier of the course

Response

success
boolean
required
Indicates whether the request was successful
progressData
object | null
Course progress data or null if no progress exists
message
string
Error message if success is false

Request Example

{
  "courseId": "60d5ec49f1b2c72b8c8e4f1a"
}

Response Examples

{
  "success": true,
  "progressData": {
    "_id": "65f1a2b3c4d5e6f7g8h9i0j1",
    "userId": "user_2abc123def456",
    "courseId": "60d5ec49f1b2c72b8c8e4f1a",
    "lectureCompleted": [
      "lecture_ch1_vid1",
      "lecture_ch1_vid2",
      "lecture_ch1_vid3",
      "lecture_ch2_vid1"
    ],
    "completed": false,
    "createdAt": "2024-03-15T10:30:00.000Z",
    "updatedAt": "2024-03-20T14:45:00.000Z"
  }
}
{
  "success": true,
  "progressData": null
}
{
  "success": false,
  "message": "Invalid request data"
}
{
  "success": false,
  "message": "An unexpected error occurred"
}

Error Codes

Status CodeDescription
200Success
400Invalid request data
401Unauthorized - Invalid or missing authentication token
500Internal server error

Validation Schema

{
  courseId: z.string().min(1)
}