Obtain the SEA's full descriptor list for entryType (e.g., 'Next year school', 'Re-entry', 'Transfer from public school') and exitWithdrawType descriptors by GET to /ed-fi/entryTypeDescriptors and /ed-fi/exitWithdrawTypeDescriptors.
Map your SIS enrollment codes to the SEA's descriptor URIs; document the mapping in a configuration file rather than hardcoding URIs.
POST to /ed-fi/studentSchoolAssociations with the required fields: studentReference (studentUniqueId), schoolReference (schoolId), entryDate, entryGradeLevelDescriptor, and entryTypeDescriptor.
When a student withdraws, PATCH or PUT the existing association record to add exitWithdrawDate and exitWithdrawTypeDescriptor; do not delete the record as SEAs require audit history.
For state reporting of membership days, also submit StudentEducationOrganizationResponsibilityAssociation records when the enrolling school differs from the serving school.
Validate completeness: the SEA's compliance dashboard will flag records missing required state-specific extension fields (e.g., tuition payer code); resolve these before the state reporting window closes.
Known gotchas
The combination of studentUniqueId + schoolId + entryDate forms the natural key; a student who re-enrolls in the same school in the same year with the same entryDate will collide with the original record.
Some SEAs require the entryGradeLevelDescriptor to match the grade level in the school's offered grades list; submitting an unsupported grade level returns a 409 referencing the dependency check.
Withdrawals submitted after the SEA's audit window may not be accepted for that school year; confirm the submission deadline with the SEA's calendar before scheduling nightly batch jobs.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp