Skip to main content
A list is a named group of students in your academy (a “cohort”, “tier”, or “segment”). Lists do two jobs:
  • 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.
Some lists are managed by an offer: when a student buys or claims an offer, they join its member list automatically. Those lists are the offer’s source of truth for who holds it, so this API refuses to rename or delete them, or to edit their membership, with a 400 list_managed_by_offer error. Grant or revoke the offer from your dashboard instead. Reads work on every list.
All endpoints require your API key in the 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.
Returns the same list object shape as the list endpoint.

Update a list

Rename a list or change its description. Provide at least one of name 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.
Returns the updated list object.

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

Returns 200 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

Example response