Prepare one or more CSV files conforming to the Canvas SIS Import CSV format specification: courses.csv, sections.csv, and optionally users.csv and enrollments.csv
Authenticate to the Canvas REST API using an admin-scoped access token or OAuth 2.0 token with the SIS import permission
POST the CSV file(s) as a multipart/form-data upload to the /api/v1/accounts/:account_id/sis_imports endpoint with the import_type set to instructure_csv
Capture the sis_import id from the response body
Poll GET /api/v1/accounts/:account_id/sis_imports/:id to track workflow_state until it reaches imported, imported_with_messages, or failed_with_messages
On completion, check the processing_warnings and processing_errors arrays in the final status response to surface any row-level issues
Known gotchas
The SIS import runs asynchronously; polling intervals should be at least a few seconds and you must not assume completion from the initial 200 POST response
SIS Import CSV headers are case-sensitive and must match the Canvas specification exactly; an unrecognized header causes the entire file to be skipped without an error
Batch size matters: very large CSV files may time out during upload; split imports over 100,000 rows into multiple smaller batches
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