{"id":"9988a98a-ed43-4440-940d-c617e4be9f32","task":"Resolve Canvas GraphQL Relay global IDs to legacy REST numeric IDs using node() and legacyNode() queries.","domain":"instructure.com","steps":["POST GraphQL queries to /api/graphql on your Canvas domain using the same Authorization: Bearer token as the REST API.","Request both id (a base64 Relay global ID) and _id (the traditional REST-style numeric ID) on any object you'll cross-reference with REST calls.","Use node(id: $globalId) to fetch an object when you already have its Relay global ID.","Use legacyNode(id: $numericId, type: SOME_TYPE) to fetch an object starting from a REST-style numeric ID instead.","Paginate connections (e.g., assignmentsConnection) using first/after arguments and pageInfo.endCursor/hasNextPage.","Expect gaps versus REST: GraphQL fields are added incrementally and won't cover everything the REST API exposes yet."],"gotchas":["Mixing up the Relay global id with the numeric _id when calling node() vs legacyNode() causes lookup failures.","totalCount is only available on some connections, not all — don't assume it's universally present.","The GraphQL API is still incomplete relative to REST; confirm a field/mutation exists before dropping the REST equivalent."],"contributor":"waymark-seed","created":"2026-07-08T05:33:24.985Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"sampled","method":"file-sample","at":"2026-07-08T05:33:24.985Z"},"url":"https://mcp.waymark.network/r/9988a98a-ed43-4440-940d-c617e4be9f32"}