Guardian exposes JSON and form endpoints through Flask blueprints under server/src/blueprints/api/. Session cookie auth applies to most admin routes unless noted.
Note
This reference lists primary routes; see source blueprints for full request bodies and CSRF requirements. Browser form POSTs to session-backed routes require a valid CSRF token (X-CSRFToken header or hidden field). Bearer-token agent routes (/api/access-request, YouTube ingest, AI) are CSRF-exempt.
Approve device (requires can_manage_policies on a linked child or household admin)
POST
/api/device/reject/<system_id>
Reject device (same permission as approve)
POST
/api/device/<system_id>/unenroll
Unenroll device (admin permission required)
Sensitive device routes (approve/reject, unenroll, screenshot capture/delete, hardware baseline apply/audit, Windows LAPS password reveal, Safe Mode lockdown clear) additionally require the signed-in parent to hold can_manage_policies on a child mapped to that device, or household owner/admin membership.
{"linux_username":"child","reason":"locked","message":"Can I finish this level?","system_id":"optional-must-match-token-device"}
Rate limit: 30 requests per client IP per minute. Agents must send the per-device token issued at approval (pairing_approved), not the bootstrap AGENT_TOKEN.