{"service":"platform3 Events Alpha API","module":"events","surface":"alpha","belongsHereIf":"A record that something happened.","storage":"Approved caliper.* persistence, alpha.event_extension sidecars for new Alpha facts, and alpha.* SQL views for public reads.","endpoints":{"demoToken":"https://platform3-andymontgomery-9773s-projects.vercel.app/events/alpha/implementation/api/dev/mint?tenantId=demo","sourceImports":"https://platform3-andymontgomery-9773s-projects.vercel.app/events/alpha/implementation/api/source-imports","events":"https://platform3-andymontgomery-9773s-projects.vercel.app/events/alpha/implementation/api/events","eventDetail":"https://platform3-andymontgomery-9773s-projects.vercel.app/events/alpha/implementation/api/events/{eventId}","attendanceEvents":"https://platform3-andymontgomery-9773s-projects.vercel.app/events/alpha/implementation/api/attendance-events","attendanceEventDetail":"https://platform3-andymontgomery-9773s-projects.vercel.app/events/alpha/implementation/api/attendance-events/{attendanceEventId}","disciplineEvents":"https://platform3-andymontgomery-9773s-projects.vercel.app/events/alpha/implementation/api/discipline-events","disciplineEventDetail":"https://platform3-andymontgomery-9773s-projects.vercel.app/events/alpha/implementation/api/discipline-events/{disciplineEventId}","activitySources":"https://platform3-andymontgomery-9773s-projects.vercel.app/events/alpha/implementation/api/activity-sources","registerActivitySource":"https://platform3-andymontgomery-9773s-projects.vercel.app/events/alpha/implementation/api/activity-sources","activitySourceDetail":"https://platform3-andymontgomery-9773s-projects.vercel.app/events/alpha/implementation/api/activity-sources/{sourceId}"},"links":{"architecture":"https://platform3-andymontgomery-9773s-projects.vercel.app/events/alpha/architecture","dataDictionary":"https://platform3-andymontgomery-9773s-projects.vercel.app/events/alpha/data_dictionary","customerWebsite":"https://platform3-andymontgomery-9773s-projects.vercel.app/events/alpha/customer_website","aliasMap":"https://platform3-andymontgomery-9773s-projects.vercel.app/events/alpha/architecture#alias-map"},"identityBoundaryContract":{"learningAppActivityMoments":"Events accepts the documented learning moments, including typed lab_started, lab_completed, and fluency_probe_completed facts, for the same studentId/contentId pair a lesson attempt uses with Content and Results.","tokenRule":"When an Events bearer token carries studentIds, orgIds, schoolIds, or contentIds claims, Events enforces those claims on writes and reads. Tokens without those boundary claims are tenant-scoped service/demo tokens and may write/read any activity moment inside the token tenant.","rejectedProblem":{"status":403,"code":"events:boundary_rejected","meaning":"The token is valid, but its boundary claims do not include the requested student, org/school, or content."},"integratorAction":"Use an Events token minted for the same tenant and studentId/contentId pair as the Content student-view and Results attempt/outcome write. Do not rewrite the event's studentId or contentId to a demo surrogate; preserve the actual lesson pair in the event row."}}