- Group students so you can manage them in bulk from your own tools.
- Drive course access. When an offer in your academy grants its courses to a list, every member of that list can access those courses. Add someone to the list and they get access; remove them and the access is revoked. You configure offers in your dashboard; this API manages the list and its membership. For the start-to-finish recipe (lock courses, create a hidden free offer, grant it to a list, drive membership from here), see Access Workflows.
List access is dynamic and follows membership. This is different from an enrollment, which is a direct per-student course assignment. Use a list for cohort or tier access you may want to revoke later; use an enrollment for an individual assignment.
Authorization header. See Authentication.
List all lists
Returns every list in your academy, newest first, each with its active member count.Response fields
object
required
Example request
Example response
Create a list
Body parameters
string
required
Name of the list. 1 to 100 characters. Must be unique within the academy (case-insensitive); a duplicate returns
409 already_exists.string
Optional description. Maximum 500 characters.
Response
Returns the created list (member_count is 0) with a 201 status code.
Example request
Example response
Get a list
Path parameters
string
required
UUID of the list. Returns
404 not_found if it does not exist in this academy.Update a list
Rename a list or change its description. Provide at least one ofname or description.
Body parameters
string
New name. 1 to 100 characters. A duplicate name returns
409 already_exists.string
New description, or
null to clear it. Maximum 500 characters.Example request
Delete a list
Deletes the list. Members are not removed from the academy, but they lose any course access that this list was granting. Offer-managed lists cannot be deleted through the API (400 list_managed_by_offer).
Example response
List members
Returns the active members of a list, newest first.Query parameters
number
default:"50"
Number of members to return. Minimum
1, maximum 100.number
default:"0"
Number of members to skip. Use with
limit for pagination.Response fields
object
required
Add members
Adds students to a list by email. This endpoint is an upsert: if an email does not yet belong to a student in your academy, the student is created first, then added to the list. Calling it again for someone already on the list is a safe no-op. Offer-managed lists cannot be edited through the API (400 list_managed_by_offer); grant the offer instead.
Body parameters
string
A single student email. Provide either
email or emails.string[]
A batch of student emails. Maximum 100 per request. Provide either
email or emails.boolean
default:"true"
Whether to send the magic-link welcome email to students who are newly created by this call. Set to
false for silent bulk syncs. Has no effect on people who are already members.Response fields
Returns200 with a per-email result array, so a single failure (such as a plan-limit hit) does not fail the whole batch.
object
required
Example request
Example response
Remove a member
Removes a student from a list. They remain in your academy, but they lose any course access this list was granting. The student’s enrollments and progress are untouched. Offer-managed lists cannot be edited through the API (400 list_managed_by_offer); revoke the offer instead.
Path parameters
string
required
UUID of the student to remove (the
id from the members list). Returns 404 not_found if they are not an active member of the list.Example response
Courses a list grants
Returns the courses this list grants access to, derived from your academy’s active offers. A list grants a course in one of two ways: an offer is free for the list’s members (the offer grants to the list), or the list is the offer’s member list (the people who bought or claimed it). This is read-only; create or edit offers in your dashboard.Response fields
object
required

