Prepare the required CSV files: manifest.csv, orgs.csv, courses.csv, classes.csv, users.csv, and enrollments.csv, following the column names and data types defined in the OneRoster 1.2 CSV Binding specification.
In manifest.csv, set file.manifest.version to 1.0, declare each file with a propertyName of file.[filename] and a value of bulk or absent to indicate full-replacement semantics; leave dateLastModified and status columns empty for bulk mode.
Ensure the file set is semantically complete: every sourcedId referenced in enrollments.csv must have a matching record in users.csv and classes.csv; any unresolved reference will cause the import to fail or be silently skipped depending on the receiver.
Package all CSV files plus manifest.csv into a single ZIP archive with no subdirectory nesting, then deliver it to the receiving system via its documented ingestion mechanism (SFTP drop, file upload UI, or API endpoint).
After import, retrieve a processing report from the receiving system (format varies by vendor) and check for rows with status=tobedeleted or error messages indicating missing references.
For delta updates in subsequent syncs, set status=tobedeleted on rows you want removed and status=active on new or modified rows, and update dateLastModified to the current ISO 8601 timestamp.
Known gotchas
Bulk mode requires the file set to be semantically complete — omitting any referenced entity (e.g., an org referenced by a class) will cause referential integrity failures even if the receiver does not surface a clear error.
The manifest.csv must be present for the receiver to recognize the package as OneRoster 1.2; without it, receivers may fall back to 1.0 parsing rules or reject the archive entirely.
sourcedId values must be globally unique and stable across syncs; changing a sourcedId for an existing entity creates a duplicate rather than updating the original record.
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