Skip to main content
The sdk.courses namespace provides access to digital courses purchased by the customer. All methods require authentication (Bearer token set via sdk.setAuthToken()).

Methods

courses.getAll(params?)

Get a paginated list of courses available to the customer.
const { data: courses, pagination } = await sdk.courses.getAll({
  page: 1,
  per_page: 10
});
Parameters:
FieldTypeDefaultDescription
pagenumber1Page number
per_pagenumber10Courses per page
Returns: { data: Course[]; pagination?: Pagination }

courses.getById(id)

Get details for a specific course, including its modules.
const course = await sdk.courses.getById(15);
console.log(course.title);
console.log(course.modules); // CourseModule[]
Returns: Course

courses.getProgress(courseId)

Get the customer’s progress for a specific course.
const progress = await sdk.courses.getProgress(15);
console.log(`${progress.progress_percentage}% complete`);
console.log(`${progress.completed_modules} of ${progress.total_modules} modules`);
Returns: CourseProgress

courses.getModule(courseId, moduleId)

Get the content of a specific module within a course.
const module = await sdk.courses.getModule(15, 3);
console.log(module.title);
console.log(module.content);
Returns: CourseModule

courses.completeModule(courseId, moduleId)

Mark a module as completed.
const result = await sdk.courses.completeModule(15, 3);
if (result.success) {
  console.log('Module completed!');
}
Returns: { success: boolean }

Legacy Customer Endpoints

For backward compatibility, the SDK also provides these legacy methods that use the /customer/courses endpoints:
// Get all customer courses
const courses = await sdk.courses.getCustomerCourses();

// Get a specific customer course
const course = await sdk.courses.getCustomerCourse(15);

// Get a module via the customer endpoint
const module = await sdk.courses.getCustomerCourseModule(15, 3);

Types

interface Course {
  id: number;
  title: string;
  description: string;
  modules: CourseModule[];
  progress?: CourseProgress;
}

interface CourseModule {
  id: number;
  title: string;
  content: string;
  order: number;
  is_completed?: boolean;
}

interface CourseProgress {
  course_id: number;
  completed_modules: number;
  total_modules: number;
  progress_percentage: number;
}

Example: Course Player

async function loadCoursePlayer(courseId: number) {
  const [course, progress] = await Promise.all([
    sdk.courses.getById(courseId),
    sdk.courses.getProgress(courseId),
  ]);

  // Find the next uncompleted module
  const nextModule = course.modules.find(m => !m.is_completed);

  return { course, progress, nextModule };
}

async function completeAndAdvance(courseId: number, moduleId: number) {
  await sdk.courses.completeModule(courseId, moduleId);
  const progress = await sdk.courses.getProgress(courseId);
  return progress;
}