Skip to main content
Course endpoints sit under /api/brands/{brand}/courses/ with brandAccess middleware. Authenticate with EF-Access-Key.

List Courses

number
Results per page (1–100, default: 25)
string
Search by title, description, slug, or instructor name
string
newest, oldest, created_at, updated_at
cURL

List Courses (Unpaginated)

Returns { id, title } for all courses — useful for dropdowns.

Get Course


Create Course

string
required
Course title (max 255)
string
required
Language code (e.g. en, pt)
string
required
Course description
string
required
draft or published
string
required
embedded (content lives inline on a page) or module (dedicated course pages on a domain)
number
Required when delivery_type is module. Must be an existing brand domain.
string
Required when delivery_type is module. Must be unique per brand_id + domain_id.
string
Instructor display name (max 255)
file | string
Instructor photo — upload as file (multipart) or provide as URL string
Course logo — upload as file or URL string
file | string
Cover image — upload as file or URL string
boolean
Show module titles in the course outline
boolean
Enable commenting on content
string
Course category name (max 255)
number
Page ID for the course details/landing page
number
Page ID for module listing
number
Page ID for content viewing
number
Email template ID to send upon enrollment
cURL

Update Course

Same body as Create. title, language_code, description, status, and delivery_type are required.

Delete Course


Copy Course to Another Brand

number
required
Source course ID
number
required
Target brand ID
string
required
Title for the copied course in the target brand

Enrollments

List Enrollments

Get Enrollment

string
required
Elasticsearch document ID for the enrollment

Enroll Student

string
required
Student email address. Returns 422 if already enrolled.
string
Student display name (max 255)
cURL

Update Enrollment Notes

string
Internal notes about the enrollment (max 10,000 chars)

Complete Content Item

Mark a specific content item as completed for an enrolled student.
number
required
The course content item ID to mark as complete
This endpoint is idempotent — marking an already-completed item again does not create duplicates.

Remove Enrollment


Modules

List Modules

List Modules (Unpaginated)

Returns { id, title } array — cached.

Create Module

string
required
Module title (max 255)
string
required
Module description

Update Module

Delete Module

Reorder Modules

object
required
Map of { "<module_id>": <integer order>, ... }

Notes

  • Enrollment IDs are Elasticsearch document IDs (strings), not numeric database IDs
  • File uploads (logo, cover, instructor_photo) are stored on BunnyCDN — you can provide a URL string instead of uploading a file
  • The copy endpoint replicates the course’s modules and all content to the target brand
  • progress_percent is recalculated automatically when content is marked complete