Create a custom hole-filling course (async)
Creates a custom hole-filling course for a student with specific lessons you choose. Returns 202 with a jobId immediately — the course is created asynchronously.
How it works
- Looks up the student by email
- Creates lesson assignments in the target app
- Creates a course in OneRoster with the assigned lessons
- Removes the student from existing same-subject courses (protected courses like Manual XP are kept) — unless
skipUnenrollis true - Enrolls the student in the new course
If enrollment fails, any removed courses are automatically restored (unless unenrollment was skipped). Progress and failures are reported via Google Chat notifications.
Picking lessons
For Bridge apps (mobymax, lalilo, freckle, vocabloco, anton, edia), use GET /edubridge/progression/catalog to browse available lessons, then pass the lessonId values into the lessons array.
For the native OneRoster apps (timeback, timeback_learn, alphawrite, alpha_read), /catalog does not apply and no external assignments are created. For timeback_learn, Math lessonId values are source course-component sourcedIds, while Science values are resource sourcedIds. For the other native apps, lessonId values are existing OneRoster resource sourcedIds (for alpha_read, use the article resource sourcedId, e.g. article_4100001; requires subject Reading).
Validation rules
Grade: Accepts PK, PreK, Pre-K, Pre-Kindergarten, K, KG, Kindergarten, or 0–12. Canonicalized to a numeric string (PK = -1, K = 0). Values like 3rd or banana are rejected.
next: What happens after the student completes the course. Accepts:
- A test type:
end of course,test out, orplacement(case-insensitive, flexible spacing) - A course UUID from an active course sequence — the student will be enrolled in that course next
assignmentId: Must be a positive integer if provided. Resolved automatically from existing enrollments if omitted.
Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Body
The student's email address.
"alice@alpha.school"
Academic subject. Supported values: Math, Language, Reading, Writing, Vocabulary, Science.
Math, Language, Reading, Writing, Vocabulary, Science "Reading"
Grade level. Accepted values:
- Canonical:
-1(Pre-K),0(K),1through12 - Aliases (case-insensitive):
PK,PreK,Pre-K,Pre-Kindergarten,K,KG,Kindergarten
AP (grade 13), partial numerics (e.g. 3rd), and unrecognized strings are rejected with 400.
1"3"
Learning app that owns the lessons. When app is timeback, timeback_learn, alphawrite, or alpha_read, the flow links existing OneRoster resources directly — no Bridge call is made. For timeback_learn, Math lessonId values must be source course-component sourcedIds while Science values must be resource sourcedIds. For alphawrite and alpha_read, lessonId values must be existing OneRoster resource sourcedIds (for alpha_read, the article resource sourcedId, e.g. article_4100001). alpha_read requires subject Reading.
mobymax, lalilo, freckle, vocabloco, anton, edia, timeback, timeback_learn, alphawrite, alpha_read "mobymax"
Lessons to include in the custom hole-filling course. At least 1 required. For large sets (>100), lessons are batched automatically across multiple Bridge calls.
1Post-completion action. Accepts:
- Test-type strings (case-insensitive, whitespace/hyphens/underscores ignored):
end of course,test out,placement. Also accepts variant spellings likeEnd Of Course,EndOfCourse,end-of-course,end_of_course,TEST OUT,Test-Out, etc. Normalized toassessment+ the canonical test type. - Course UUID — a lowercase UUID referencing a course in an active course sequence for the given subject. Validated server-side: the course must exist, appear in an active sequence, and be the most recent
courseReferenceon its stage (historical/swapped-out courses are rejected).
Any other value is rejected with 400.
1"end of course"
AlphaTest assignment ID. If omitted, the server attempts to resolve it by scanning the student's existing same-subject enrollments for course metadata containing assignmentId. Must be a positive integer.
Base course sourced ID for hole-filling lineage tracking. If omitted, the server attempts to resolve it from the student's existing same-subject enrollments.
Gap analysis record ID for metadata tracking.
List of missed question IDs for metadata tracking.
When true, skip unenrolling the student from other active courses of the same subject. By default (false/omitted), the student is unenrolled from all same-subject courses before enrolling in the new HF course.
false
Origin identifier for the assignment that triggered this custom HF. Propagated to course metadata and used when assigning the follow-up test, so AlphaTest's analysis rules resolve the correct origin. Defaults to 'progression' if omitted.
"timeback_ui"