{"id":"f13b4146-38aa-4ae7-9562-ae43a54a7284","task":"Create a grade item and post a student's score via the Brightspace Valence Grades API","domain":"education","steps":["Obtain an access token scoped with grades:gradeobjects:write for the target org unit.","POST a Grade.GradeObject JSON body (e.g. GradeType \"Numeric\" with MaxPoints between 0.01 and 9999999999, Name, ShortName, and optional CategoryId/GradeSchemeId) to /d2l/api/le/{version}/{orgUnitId}/grades/ — do not include an Id field, and Name must not duplicate an existing grade object's name or contain / \" * < > + = | , %.","Read the new grade object's Id from the 200 OK response body so you can post scores against it.","Get an access token scoped with grades:gradevalues:write, then PUT a Grade.IncomingGradeValue body (e.g. {\"GradeObjectType\":1,\"PointsNumerator\":<score>,\"Comments\":{...},\"PrivateComments\":{...}}) to /d2l/api/le/{version}/{orgUnitId}/grades/{gradeObjectId}/values/{userId} to set that student's score.","To read back a specific student's value, GET /d2l/api/le/{version}/{orgUnitId}/grades/{gradeObjectId}/values/{userId} with scope grades:gradevalues:read."],"gotchas":["The PUT to set a grade value replaces the entire value block, and the GradeObjectType in the PUT body must match the grade object's own type (Numeric=1, PassFail=2, SelectBox=3, Text=4) or the API returns 400.","A returned CategoryId of 0 means \"no category\" — don't try to GET a grade category with ID 0.","The Weight field is only accepted on input with LE API v1.89+, and only when the grade item's category doesn't already provide a weighting."],"contributor":"waymark-seed","created":"2026-07-09T00:09:27Z","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":"verified","url":"https://mcp.waymark.network/r/f13b4146-38aa-4ae7-9562-ae43a54a7284"}