name: bc-admissions-create-cohort description: Use when creating a new academy cohort (single certificate or macro with micro cohorts) via the API; do NOT use for listing/updating cohorts, enrolling students, or issuing certificates. requires: - bc-certificate-manage-and-assign-specialties
Skill: Create a Cohort
When to Use
Use this skill when the user asks to start a new class, create a cohort, or create a macro cohort with multiple certificates. All steps are done via the API (POST/PUT). Do not use when the user only wants to list or read cohorts, update an existing cohort's details (unless linking micro cohorts as part of creation), enroll students, or issue certificates.
Concepts
- Single-certificate cohort: One syllabus, one certificate at program end. Created with a single
POST /v1/admissions/academy/cohortand nomicro_cohorts. - Macro cohort: A container cohort that links multiple micro cohorts (each micro cohort maps to one certificate milestone). A cohort is a macro when
micro_cohortsis non-empty on create. - Never-ending micro cohort: A reusable template cohort (
never_ends: true, noending_date) used as the enrollment target for a certificate track. The UI prefers reusing these instead of creating dated micro cohorts. - Syllabus string: Always
"syllabus_slug.v{version}"or"syllabus_slug.vlatest". Version 1 is marketing-only and cannot be assigned to cohorts. - Ending strategy: Every cohort must have
ending_dateornever_ends: true, never both. - Display order: Macro cohorts store micro cohort order in
cohorts_orderas a comma-separated string of cohort IDs (e.g."1277,1278"). - Macro syllabus overrides: The macro cohort's
syllabus_version.jsonmay include keys like{micro-slug}.v{version}or orderedN:{micro-slug}.v{version}to customize micro syllabi per program. See SYLLABUS.md — Macro cohort syllabus overrides.
Workflow
Step 0 — Verify prerequisites (both paths)
- Confirm the academy exists and you have
crud_cohortcapability. - Confirm the target syllabus exists with a published version ≥ 2.
- For macro micro cohorts: confirm each micro syllabus is linked to a Specialty. If not, load
bc-certificate-manage-and-assign-specialtiesand link the syllabus before continuing.
If any prerequisite fails, stop and fix it before creating the cohort.
Step 1 — Choose cohort type (client-side decision, no API field)
Ask the user or infer from the request:
- Single certificate — students earn one certificate upon completing the full program.
- Macro cohort (multiple certificates) — students earn a certificate at each milestone (micro cohort). Set
available_as_saas: trueon the macro cohort (the UI requires this; the API defaults from the academy if omitted).
Path A — Single certificate (UI: Syllabus → Cohort Details)
- List syllabi. Call
GET /v1/admissions/academy/{academy_id}/syllabus?owner=mewithAuthorizationandAcademy: <academy_id>. Pick the syllabus slug fromresults. - List versions. Call
GET /v1/admissions/academy/{academy_id}/syllabus/{slug}/version. Pick a published version ≥ 2 (or use.vlateston create). - Verify specialty (recommended). Call
GET /v1/certificate/academy/specialty?syllabus_slug={slug}. If the list is empty, link the syllabus to a specialty usingbc-certificate-manage-and-assign-specialties, then continue. - Collect cohort details from the user:
name,slug,kickoff_date, ending strategy (ending_dateornever_ends), optionalonline_meeting_url, optionalavailable_as_saas, optionalschedule. - Create the cohort. Call
POST /v1/admissions/academy/cohortwithsyllabus: "{slug}.v{version}"(or.vlatest). Save the returnedidandslug.
Path B — Macro cohort (UI: Type → Macro Syllabus → Certificates → Cohort Details)
- Select macro syllabus. Use the same list/version endpoints from Path A steps 1–2. Pick the macro syllabus slug and version.
- Derive suggested certificate order. Read the macro syllabus version JSON. Keys like
web-ui-fundamentals.v2or0:web-ui-fundamentals.v2indicate which micro syllabi (and order) the program expects. Use this list as the default order for certificate configuration. - Configure certificates — reuse existing never-ending micro cohorts first. For each micro syllabus in the suggested order:
- Call
GET /v1/certificate/academy/specialty?syllabus_slug={micro_slug}to confirm the specialty exists. - Call
GET /v1/admissions/academy/cohort?syllabus={micro_slug}&ending_date_isnull=true(paginated) to find reusable template cohorts. - Pick one cohort
idper certificate milestone. Save eachidin display order.
- Call
- Fallback — create missing micro cohorts. Only when no reusable cohort exists for a micro syllabus, call
POST /v1/admissions/academy/cohortonce per missing certificate with that micro syllabus,never_ends: true, andavailable_as_saas: true. Save each returnedid. - Collect macro cohort details from the user:
name,slug, macrosyllabus,kickoff_date, ending strategy, optionalonline_meeting_url, andavailable_as_saas: true. - Create the macro cohort. Call
POST /v1/admissions/academy/cohortwithmicro_cohortsset to the list of micro cohort IDs from steps 3–4 andcohorts_orderset to a comma-separated string of those IDs in display order (e.g."1277,1278"). Save the returned macroidandslug. - Optional — link or change micro cohorts later. If the macro was created without
micro_cohorts, callPUT /v1/admissions/academy/cohort/{cohort_id}withmicro_cohortsand optionallycohorts_order. - Optional — sync users after linking. If users were already enrolled in the macro before micro cohorts were linked, they are not automatically added to new micro cohorts. Ask affected users to call
POST /v1/admissions/me/micro-cohorts/sync/{macro_slug}, or inform the user that a bulk sync may be required. - Optional — macro syllabus overrides. To customize micro syllabi for this program, edit the macro
SyllabusVersionJSON with{micro_slug}.v{version}blocks (see SYLLABUS.md). Verify withGET /v1/admissions/academy/{academy_id}/syllabus/{syllabus_slug}/version/{version}?macro-cohort={macro_slug}.
Step final — Verify creation (both paths)
Call GET /v1/admissions/academy/cohort/{id_or_slug} and confirm name, slug, syllabus_version, dates, and (for macros) micro_cohorts match the intent.
Endpoints
All /academy/ endpoints require the Academy header with the academy ID. List endpoints are paginated (limit, offset; response has count and results). Send Accept-Language (e.g. en, es) to receive translated error messages.
| Action | Method | Path | Capability | Used in |
|---|---|---|---|---|
| List syllabi | GET | /v1/admissions/academy/{academy_id}/syllabus |
read_syllabus |
Both |
| List syllabus versions | GET | /v1/admissions/academy/{academy_id}/syllabus/{slug}/version |
read_syllabus |
Both |
| List specialties | GET | /v1/certificate/academy/specialty |
read_certificate |
Both |
| List cohorts (find templates) | GET | /v1/admissions/academy/cohort |
read_all_cohort |
Macro |
| Create cohort | POST | /v1/admissions/academy/cohort |
crud_cohort |
Both |
| Update cohort (link micros) | PUT | /v1/admissions/academy/cohort/{cohort_id} |
crud_cohort |
Macro |
| Get cohort (verify) | GET | /v1/admissions/academy/cohort/{id_or_slug} |
read_all_cohort |
Both |
| Sync user into micro cohorts | POST | /v1/admissions/me/micro-cohorts/sync/{macro_slug} |
(authenticated user) | Macro edge case |
| Get micro syllabus with macro merge | GET | /v1/admissions/academy/{academy_id}/syllabus/{slug}/version/{version}?macro-cohort={macro_slug} |
read_syllabus |
Macro optional |
List syllabi — response (GET, paginated subset):
{
"count": 12,
"first": null,
"next": null,
"previous": null,
"last": null,
"results": [
{
"id": 5,
"slug": "full-stack-web-development",
"name": "Full Stack Web Development",
"duration_in_hours": 400
}
]
}
List syllabus versions — response (GET, paginated subset):
{
"count": 2,
"results": [
{
"id": 10,
"version": 2,
"status": "PUBLISHED",
"syllabus": {"id": 5, "slug": "full-stack-web-development"}
}
]
}
List specialties — response (GET):
[
{
"id": 3,
"slug": "full-stack-web-development",
"name": "Full Stack Web Development",
"syllabuses": [{"id": 5, "slug": "full-stack-web-development"}]
}
]
List cohorts (find never-ending templates) — request query:
GET /v1/admissions/academy/cohort?syllabus=web-ui-fundamentals&ending_date_isnull=true&limit=20&offset=0
List cohorts — response (GET, paginated subset):
{
"count": 1,
"results": [
{
"id": 1277,
"slug": "web-ui-fundamentals-never-ending",
"name": "Web UI Fundamentals With Tailwind",
"never_ends": true,
"ending_date": null,
"syllabus_version": {
"version": 2,
"syllabus": {"slug": "web-ui-fundamentals"}
}
}
]
}
Create single-certificate cohort — request (POST /v1/admissions/academy/cohort):
{
"name": "Full Stack - Miami 2026",
"slug": "full-stack-miami-2026",
"syllabus": "full-stack-web-development.v2",
"kickoff_date": "2026-06-05T12:30:00Z",
"ending_date": "2026-12-15T18:00:00Z",
"never_ends": false,
"online_meeting_url": "https://zoom.us/j/123456789",
"available_as_saas": true,
"stage": "INACTIVE"
}
Create single-certificate cohort (never-ending) — request:
{
"name": "Self-Paced Web Dev",
"slug": "self-paced-web-dev",
"syllabus": "web-dev-basics.vlatest",
"kickoff_date": "2026-06-05T12:30:00Z",
"never_ends": true,
"online_meeting_url": "https://meet.google.com/abc-defg-hij",
"available_as_saas": true
}
Create micro cohort (fallback, macro path) — request (POST /v1/admissions/academy/cohort):
{
"name": "Web UI Fundamentals With Tailwind",
"slug": "web-ui-fundamentals-never-ending",
"syllabus": "web-ui-fundamentals.v2",
"kickoff_date": "2020-01-01T00:00:00Z",
"never_ends": true,
"available_as_saas": true,
"stage": "STARTED"
}
Save the returned id (e.g. 1277) for the macro's micro_cohorts.
Create macro cohort — request (POST /v1/admissions/academy/cohort):
{
"name": "Full Stack - Miami 2026",
"slug": "full-stack-miami-2026",
"syllabus": "full-stack-web-development.v2",
"kickoff_date": "2026-06-05T12:30:00Z",
"ending_date": "2027-06-05T18:00:00Z",
"never_ends": false,
"online_meeting_url": "https://zoom.us/j/123456789",
"available_as_saas": true,
"micro_cohorts": [1277, 1278, 1279],
"cohorts_order": "1277,1278,1279"
}
Create cohort — response (201, single or macro):
{
"id": 1280,
"name": "Full Stack - Miami 2026",
"slug": "full-stack-miami-2026",
"syllabus_version": {
"id": 10,
"version": 2,
"syllabus": {"slug": "full-stack-web-development"}
},
"kickoff_date": "2026-06-05T12:30:00Z",
"ending_date": "2027-06-05T18:00:00Z",
"never_ends": false,
"stage": "INACTIVE",
"available_as_saas": true,
"micro_cohorts": [1277, 1278, 1279],
"cohorts_order": "1277,1278,1279"
}
Always store id and slug from the response.
Update cohort (link micro cohorts) — request (PUT /v1/admissions/academy/cohort/{cohort_id}):
{
"micro_cohorts": [1277, 1278],
"cohorts_order": "1277,1278"
}
Edge Cases
missing-syllabus-field: Includesyllabusin the POST body using"slug.v{version}"format.cohort-without-ending-date-and-never-ends: Setending_dateornever_ends: true— one is required.cohort-with-ending-date-and-never-ends: Remove one — they are mutually exclusive.assigning-a-syllabus-version-1: Use version ≥ 2 or.vlatest(resolves to highest published version).micro-cohort-syllabus-must-have-specialty: The micro cohort's syllabus has no linked specialty. Link it viabc-certificate-manage-and-assign-specialties, then retry.micro-cohort-syllabus-required: A micro cohort ID inmicro_cohortshas no syllabus. Pick a different cohort or create one with a valid syllabus.- No reusable never-ending cohort found for a micro syllabus: Create a micro cohort with
never_ends: trueandavailable_as_saas: true(Path B step 4), then use itsid. - Micro cohort IDs from another academy: All IDs in
micro_cohortsmust belong to the same academy. Re-list cohorts scoped to the current academy. - Users already in macro before micro cohorts linked: New micro cohorts do not auto-enroll existing macro users. Inform the user about the sync endpoint or bulk sync.
available_as_saasomitted on macro: API defaults to the academy's setting. Setavailable_as_saas: trueexplicitly for macro cohorts.- Academy cohort list has no
never_endsfilter: Useending_date_isnull=trueas a workaround to find template cohorts.
Checklist
- Verified academy, syllabus, and published version ≥ 2 exist.
- Chose cohort type: single certificate (Path A) or macro (Path B).
- Path A: Listed syllabus and version, verified specialty, collected details, and called
POST /v1/admissions/academy/cohort. - Path B: Selected macro syllabus, derived certificate order from syllabus JSON, found or created never-ending micro cohorts, collected macro details, and called
POSTwithmicro_cohortsandcohorts_order. - Confirmed creation via
GET /v1/admissions/academy/cohort/{id_or_slug}. - Path B only: If users were already in the macro before linking, informed the user about user sync.
- Path B optional: If using macro syllabus overrides, verified merged JSON via
GET .../version/...?macro-cohort=....