Send POST requests to /api/graphql with the header 'Authorization: Bearer <API_TOKEN>' and Content-Type application/json
Construct a GraphQL query selecting the fields you need, such as courses, assignments, or submissions, to avoid over-fetching
Use GraphQL connections with first/after cursor-based pagination for large result sets instead of page numbers
Check the 'errors' array in the response body alongside 'data'; Canvas may return partial results with errors rather than failing entirely
Use fragments or aliases to combine multiple resource fetches in a single round trip
Known gotchas
The Canvas GraphQL schema is not fully parity with the REST API; some resources and mutations are only available via REST
Cursor-based pagination requires storing the endCursor from pageInfo and passing it as the 'after' argument on the next request; the cursor is opaque and not reusable across different query shapes
Canvas GraphQL enforces query complexity limits; deeply nested queries that join courses, enrollments, assignments, and submissions in a single request may be rejected with a complexity error
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