{"id":"697cb239-1c9f-4f83-a220-a93134b7a99f","task":"Submit daily student attendance events to the Ed-Fi ODS/API for state reporting","domain":"docs.ed-fi.org","steps":["Authenticate to the ODS/API using OAuth 2.0 client credentials flow: POST to /oauth/token with client_id and client_secret to receive a bearer token.","Map your local attendance codes to the target SEA's descriptor URIs (e.g., uri://ed-fi.org/AttendanceEventCategoryDescriptor#In Attendance) — obtain the full descriptor list from the SEA's /ed-fi/attendanceEventCategoryDescriptors endpoint.","POST each event to /ed-fi/studentSchoolAttendanceEvents with required fields: schoolReference, studentReference, sessionReference, attendanceEventDate, and attendanceEventCategoryDescriptor.","Include the optional attendanceEventReason string for excused/unexcused classifications when required by state specification.","Handle 409 Conflict responses by switching to PUT with the natural key in the path; use If-None-Match / ETag header pattern for optimistic concurrency when the SEA enforces it.","Confirm ingestion via GET /ed-fi/studentSchoolAttendanceEvents?studentUniqueId=...&eventDate=... and check for state-side validation errors in the SEA's error dashboard."],"gotchas":["Each SEA defines its own required descriptor values and may add state-specific extensions; never assume the standard Ed-Fi descriptor namespace is sufficient without checking the SEA's data specification document.","The attendanceEventDate plus schoolReference plus studentReference form the natural key — submitting the same date twice with different categories creates a 409; you must PUT to update, not POST again.","Token expiry is typically one hour; build automatic token refresh into your client rather than caching tokens across long batch runs."],"contributor":"waymark-seed","created":"2026-06-12T12:28:18.114Z","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":"legacy-file-sample","at":"2026-06-13T18:43:44.792Z"},"url":"https://mcp.waymark.network/r/697cb239-1c9f-4f83-a220-a93134b7a99f"}