[ { "surface": "core-apitokens", "endpoints": [ { "method": "GET", "path": "/api/apitokens", "auth": "jwt", "params": "not documented", "purpose": "List the caller's own tokens. Admins may pass ?all=true for everyone's.", "example": "curl http://localhost:5001/api/apitokens -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/apitokens", "auth": "permission:apitokens.create", "params": "body: JSON (fields not yet documented)", "purpose": "Create a token for the caller. Returns the full secret ONCE.", "example": "curl -X POST http://localhost:5001/api/apitokens -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/apitokens/", "auth": "permission:apitokens.create", "params": "path: tokenid (int)", "purpose": "Revoke (deactivate) a token. Own token, or any if admin.", "example": "curl -X DELETE http://localhost:5001/api/apitokens/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/apitokens/", "auth": "permission:apitokens.create", "params": "path: tokenid (int); body: JSON (fields not yet documented)", "purpose": "Rename, rescope, or deactivate a token. Own token, or any if admin.", "example": "curl -X PUT http://localhost:5001/api/apitokens/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" } ] }, { "surface": "core-applications", "endpoints": [ { "method": "GET", "path": "/api/applications", "auth": "permission:applications.view", "params": "not documented", "purpose": "List all applications.", "example": "curl http://localhost:5001/api/applications -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/applications", "auth": "permission:applications.create", "params": "body: JSON (fields not yet documented)", "purpose": "Create a new application.", "example": "curl -X POST http://localhost:5001/api/applications -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/applications/", "auth": "permission:applications.delete", "params": "path: app_id (int)", "purpose": "Permanently delete an application, its versions, and its uploads.", "example": "curl -X DELETE http://localhost:5001/api/applications/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/applications/", "auth": "permission:applications.view", "params": "path: app_id (int)", "purpose": "Get a single application with details.", "example": "curl http://localhost:5001/api/applications/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/applications/", "auth": "permission:applications.edit", "params": "path: app_id (int); body: JSON (fields not yet documented)", "purpose": "Update an application.", "example": "curl -X PUT http://localhost:5001/api/applications/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/applications//image", "auth": "permission:applications.edit", "params": "path: app_id (int)", "purpose": "Remove an application's image and clear the field.", "example": "curl -X DELETE http://localhost:5001/api/applications/1/image -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/applications//image", "auth": "permission:applications.edit", "params": "path: app_id (int); body: JSON (fields not yet documented)", "purpose": "Upload (or replace) an application's image.", "example": "curl -X POST http://localhost:5001/api/applications/1/image -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/applications//installed", "auth": "permission:applications.view", "params": "path: app_id (int)", "purpose": "List all computers that have this application installed.", "example": "curl http://localhost:5001/api/applications/1/installed -H \"Authorization: Bearer $TOK\"" }, { "method": "DELETE", "path": "/api/applications//package", "auth": "permission:applications.edit", "params": "path: app_id (int)", "purpose": "Remove an uploaded installer and clear the path it set.", "example": "curl -X DELETE http://localhost:5001/api/applications/1/package -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/applications//package", "auth": "permission:applications.edit", "params": "path: app_id (int); body: JSON (fields not yet documented)", "purpose": "Upload (or replace) the installer for an application.", "example": "curl -X POST http://localhost:5001/api/applications/1/package -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/applications//revert", "auth": "permission:applications.edit", "params": "path: app_id (int); body: JSON (fields not yet documented)", "purpose": "Strip an application back to a catalogue record.", "example": "curl -X POST http://localhost:5001/api/applications/1/revert -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/applications//versions", "auth": "permission:applications.view", "params": "path: app_id (int)", "purpose": "List all versions for an application.", "example": "curl http://localhost:5001/api/applications/1/versions -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/applications//versions", "auth": "permission:applications.create", "params": "path: app_id (int); body: JSON (fields not yet documented)", "purpose": "Create a new version for an application.", "example": "curl -X POST http://localhost:5001/api/applications/1/versions -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/applications/image/", "auth": "none (reviewed: named in the public-read or mutation sweep)", "params": "path: filename (path)", "purpose": "Serve an uploaded application image.", "example": "curl http://localhost:5001/api/applications/image/example.png" }, { "method": "GET", "path": "/api/applications/machines/", "auth": "permission:applications.view", "params": "path: machine_id (int)", "purpose": "List all applications installed on a computer.", "example": "curl http://localhost:5001/api/applications/machines/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/applications/machines/", "auth": "permission:applications.create", "params": "path: machine_id (int); body: JSON (fields not yet documented)", "purpose": "Install an application on a computer.", "example": "curl -X POST http://localhost:5001/api/applications/machines/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/applications/machines//", "auth": "permission:applications.delete", "params": "path: machine_id (int), app_id (int)", "purpose": "Uninstall an application from a computer.", "example": "curl -X DELETE http://localhost:5001/api/applications/machines/1/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/applications/machines//", "auth": "permission:applications.edit", "params": "path: machine_id (int), app_id (int); body: JSON (fields not yet documented)", "purpose": "Update installed application (e.g., change version).", "example": "curl -X PUT http://localhost:5001/api/applications/machines/1/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/applications/package/", "auth": "permission:applications.download", "params": "path: filename (path)", "purpose": "Download an uploaded installer.", "example": "curl http://localhost:5001/api/applications/package/example.png -H \"Authorization: Bearer $TOK\"" } ] }, { "surface": "core-assets", "endpoints": [ { "method": "GET", "path": "/api/assets", "auth": "permission:assets.view", "params": "not documented", "purpose": "List all assets with filtering and pagination.", "example": "curl http://localhost:5001/api/assets -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/assets", "auth": "permission:assets.create", "params": "body: JSON (fields not yet documented)", "purpose": "Create a new asset.", "example": "curl -X POST http://localhost:5001/api/assets -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/assets/", "auth": "permission:assets.delete", "params": "path: asset_id (int)", "purpose": "Delete (soft delete) an asset.", "example": "curl -X DELETE http://localhost:5001/api/assets/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/assets/", "auth": "permission:assets.view", "params": "path: asset_id (int)", "purpose": "Get a single asset with full details.", "example": "curl http://localhost:5001/api/assets/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/assets/", "auth": "permission:assets.edit", "params": "path: asset_id (int); body: JSON (fields not yet documented)", "purpose": "Update an asset.", "example": "curl -X PUT http://localhost:5001/api/assets/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/assets//communications", "auth": "permission:assets.view", "params": "path: asset_id (int)", "purpose": "Get all communications for an asset.", "example": "curl http://localhost:5001/api/assets/1/communications -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/assets//relationships", "auth": "permission:assets.view", "params": "path: asset_id (int)", "purpose": "Get all relationships for an asset.", "example": "curl http://localhost:5001/api/assets/1/relationships -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/assets/lookup/", "auth": "permission:assets.view", "params": "path: assetnumber (string)", "purpose": "Look up an asset by its asset number.", "example": "curl http://localhost:5001/api/assets/lookup/x -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/assets/map", "auth": "permission:assets.view", "params": "not documented", "purpose": "Get all assets with map positions for unified floor map display.", "example": "curl http://localhost:5001/api/assets/map -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/assets/relationships", "auth": "permission:assets.create", "params": "body: JSON (fields not yet documented)", "purpose": "Create a relationship between two assets.", "example": "curl -X POST http://localhost:5001/api/assets/relationships -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/assets/relationships/", "auth": "permission:assets.delete", "params": "path: rel_id (int)", "purpose": "Delete an asset relationship.", "example": "curl -X DELETE http://localhost:5001/api/assets/relationships/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/assets/relationshiptypes", "auth": "permission:assets.view", "params": "not documented", "purpose": "List all asset relationship types.", "example": "curl http://localhost:5001/api/assets/relationshiptypes -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/assets/relationshiptypes", "auth": "permission:assets.create", "params": "body: JSON (fields not yet documented)", "purpose": "Create a new asset relationship type.", "example": "curl -X POST http://localhost:5001/api/assets/relationshiptypes -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/assets/relationshiptypes/", "auth": "permission:assets.delete", "params": "path: type_id (int)", "purpose": "Delete a relationship type. Refused if any relationship still uses it.", "example": "curl -X DELETE http://localhost:5001/api/assets/relationshiptypes/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/assets/relationshiptypes/", "auth": "permission:assets.edit", "params": "path: type_id (int); body: JSON (fields not yet documented)", "purpose": "Update a relationship type.", "example": "curl -X PUT http://localhost:5001/api/assets/relationshiptypes/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/assets/statuses", "auth": "permission:assets.view", "params": "not documented", "purpose": "List all asset statuses.", "example": "curl http://localhost:5001/api/assets/statuses -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/assets/statuses", "auth": "permission:assets.create", "params": "body: JSON (fields not yet documented)", "purpose": "Create a new asset status.", "example": "curl -X POST http://localhost:5001/api/assets/statuses -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/assets/statuses/", "auth": "permission:assets.delete", "params": "path: status_id (int)", "purpose": "Delete an asset status. Refused if any asset still uses it.", "example": "curl -X DELETE http://localhost:5001/api/assets/statuses/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/assets/statuses/", "auth": "permission:assets.view", "params": "path: status_id (int)", "purpose": "Get a single asset status.", "example": "curl http://localhost:5001/api/assets/statuses/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/assets/statuses/", "auth": "permission:assets.edit", "params": "path: status_id (int); body: JSON (fields not yet documented)", "purpose": "Update an asset status.", "example": "curl -X PUT http://localhost:5001/api/assets/statuses/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/assets/types", "auth": "permission:assets.view", "params": "not documented", "purpose": "List all asset types.", "example": "curl http://localhost:5001/api/assets/types -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/assets/types", "auth": "permission:assets.create", "params": "body: JSON (fields not yet documented)", "purpose": "Create a new asset type.", "example": "curl -X POST http://localhost:5001/api/assets/types -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/assets/types/", "auth": "permission:assets.view", "params": "path: type_id (int)", "purpose": "Get a single asset type.", "example": "curl http://localhost:5001/api/assets/types/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/assets/types/", "auth": "permission:assets.edit", "params": "path: type_id (int); body: JSON (fields not yet documented)", "purpose": "Update an asset type's display fields (color/icon/description). The name, plugin, and table are structural and not editable here.", "example": "curl -X PUT http://localhost:5001/api/assets/types/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" } ] }, { "surface": "core-auditlogs", "endpoints": [ { "method": "GET", "path": "/api/auditlogs", "auth": "permission:audit.view", "params": "not documented", "purpose": "List audit logs with filtering and pagination.", "example": "curl http://localhost:5001/api/auditlogs -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/auditlogs/entity//", "auth": "permission:audit.view", "params": "path: entitytype (string), entityid (int)", "purpose": "Get audit history for a specific entity.", "example": "curl http://localhost:5001/api/auditlogs/entity/x/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/auditlogs/purge", "auth": "permission:audit.purge", "params": "body: JSON (fields not yet documented)", "purpose": "Delete entries older than the retention window.", "example": "curl -X POST http://localhost:5001/api/auditlogs/purge -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/auditlogs/retention", "auth": "permission:audit.view", "params": "not documented", "purpose": "Size of the log and what the configured retention would remove.", "example": "curl http://localhost:5001/api/auditlogs/retention -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/auditlogs/stats", "auth": "permission:audit.view", "params": "not documented", "purpose": "Get audit log statistics.", "example": "curl http://localhost:5001/api/auditlogs/stats -H \"Authorization: Bearer $TOK\"" } ] }, { "surface": "core-auth", "endpoints": [ { "method": "POST", "path": "/api/auth/change-password", "auth": "jwt", "params": "body: JSON (fields not yet documented)", "purpose": "Change the authenticated user's own password.", "example": "curl -X POST http://localhost:5001/api/auth/change-password -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/auth/login", "auth": "none (the login surface itself; rate limited, 5-strike lockout)", "params": "body: JSON (fields not yet documented)", "purpose": "Authenticate user and return JWT tokens.", "example": "curl -X POST http://localhost:5001/api/auth/login -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/auth/logout", "auth": "jwt", "params": "body: JSON (fields not yet documented)", "purpose": "Logout user (for frontend token cleanup).", "example": "curl -X POST http://localhost:5001/api/auth/logout -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/auth/me", "auth": "jwt", "params": "not documented", "purpose": "Get current authenticated user info.", "example": "curl http://localhost:5001/api/auth/me -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/auth/refresh", "auth": "jwt (refresh token)", "params": "body: JSON (fields not yet documented)", "purpose": "Refresh access token using refresh token.", "example": "curl -X POST http://localhost:5001/api/auth/refresh -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" } ] }, { "surface": "core-businessunits", "endpoints": [ { "method": "GET", "path": "/api/businessunits", "auth": "jwt-optional (works signed out; the handler decides what shows)", "params": "not documented", "purpose": "List all business units.", "example": "curl http://localhost:5001/api/businessunits -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/businessunits", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Create a new business unit.", "example": "curl -X POST http://localhost:5001/api/businessunits -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/businessunits/", "auth": "jwt + role:admin", "params": "path: bu_id (int)", "purpose": "Delete (deactivate) a business unit.", "example": "curl -X DELETE http://localhost:5001/api/businessunits/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/businessunits/", "auth": "permission:assets.view", "params": "path: bu_id (int)", "purpose": "Get a single business unit.", "example": "curl http://localhost:5001/api/businessunits/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/businessunits/", "auth": "jwt + role:admin", "params": "path: bu_id (int); body: JSON (fields not yet documented)", "purpose": "Update a business unit.", "example": "curl -X PUT http://localhost:5001/api/businessunits/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" } ] }, { "surface": "core-collector", "endpoints": [ { "method": "POST", "path": "/api/collector/", "auth": "api-key (per-plugin collector token)", "params": "path: pluginname (string); body: JSON (fields not yet documented)", "purpose": "Generic collector ingest for any plugin (ADR-006).", "example": "curl -X POST http://localhost:5001/api/collector/x -H \"X-API-Key: $KEY\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/collector/_schemas", "auth": "jwt", "params": "not documented", "purpose": "List collector schemas for all enabled plugins (JWT-protected).", "example": "curl http://localhost:5001/api/collector/_schemas -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/collector/apps", "auth": "api-key (collector token, legacy shared key)", "params": "body: JSON (fields not yet documented)", "purpose": "Update installed applications for a PC (matched by hostname).", "example": "curl -X POST http://localhost:5001/api/collector/apps -H \"X-API-Key: $KEY\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/collector/bulk", "auth": "api-key (collector token, legacy shared key)", "params": "body: JSON (fields not yet documented)", "purpose": "Bulk update multiple PCs at once.", "example": "curl -X POST http://localhost:5001/api/collector/bulk -H \"X-API-Key: $KEY\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/collector/heartbeat", "auth": "api-key (collector token, legacy shared key)", "params": "body: JSON (fields not yet documented)", "purpose": "Record PC online status / heartbeat (single or batch).", "example": "curl -X POST http://localhost:5001/api/collector/heartbeat -H \"X-API-Key: $KEY\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/collector/pc", "auth": "api-key (collector token, legacy shared key)", "params": "body: JSON (fields not yet documented)", "purpose": "Update one PC from the collection script (matched by hostname).", "example": "curl -X POST http://localhost:5001/api/collector/pc -H \"X-API-Key: $KEY\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/collector/status", "auth": "api-key (per-plugin collector token)", "params": "not documented", "purpose": "Check collector API status.", "example": "curl http://localhost:5001/api/collector/status -H \"X-API-Key: $KEY\"" } ] }, { "surface": "core-customfields", "endpoints": [ { "method": "GET", "path": "/api/customfields", "auth": "permission:assets.view", "params": "not documented", "purpose": "List custom-field definitions. Filter by ?assettypeid=. ?active=false includes inactive ones.", "example": "curl http://localhost:5001/api/customfields -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/customfields", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: customfields.create_field has no docstring.", "example": "curl -X POST http://localhost:5001/api/customfields -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/customfields/", "auth": "jwt + role:admin", "params": "path: fieldid (int)", "purpose": "UNDOCUMENTED: customfields.delete_field has no docstring.", "example": "curl -X DELETE http://localhost:5001/api/customfields/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/customfields/", "auth": "jwt + role:admin", "params": "path: fieldid (int); body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: customfields.update_field has no docstring.", "example": "curl -X PUT http://localhost:5001/api/customfields/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/customfields/asset/", "auth": "permission:assets.view", "params": "path: assetid (int)", "purpose": "Active custom fields for an asset's type, merged with its values.", "example": "curl http://localhost:5001/api/customfields/asset/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/customfields/asset/", "auth": "jwt + role:admin", "params": "path: assetid (int); body: JSON (fields not yet documented)", "purpose": "Upsert values for an asset. Body: {values: {fieldid: value, ...}}.", "example": "curl -X PUT http://localhost:5001/api/customfields/asset/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" } ] }, { "surface": "core-dashboard", "endpoints": [ { "method": "GET", "path": "/api/dashboard", "auth": "permission:assets.view", "params": "not documented", "purpose": "Get dashboard summary data (asset-based).", "example": "curl http://localhost:5001/api/dashboard -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/dashboard/capabilities", "auth": "jwt-optional (works signed out; the handler decides what shows)", "params": "not documented", "purpose": "What THIS caller can reach, for chrome that would otherwise only 401.", "example": "curl http://localhost:5001/api/dashboard/capabilities -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/dashboard/health", "auth": "none (reviewed: named in the public-read or mutation sweep)", "params": "not documented", "purpose": "Health check endpoint (no auth required).", "example": "curl http://localhost:5001/api/dashboard/health" }, { "method": "GET", "path": "/api/dashboard/navigation", "auth": "jwt-optional (works signed out; the handler decides what shows)", "params": "not documented", "purpose": "Get navigation items from all loaded plugins.", "example": "curl http://localhost:5001/api/dashboard/navigation -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/dashboard/stats", "auth": "permission:assets.view", "params": "not documented", "purpose": "Get detailed statistics by asset type.", "example": "curl http://localhost:5001/api/dashboard/stats -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/dashboard/summary", "auth": "permission:assets.view", "params": "not documented", "purpose": "Get dashboard summary data (asset-based).", "example": "curl http://localhost:5001/api/dashboard/summary -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/dashboard/widgets", "auth": "permission:assets.view", "params": "not documented", "purpose": "Aggregate dashboard widget definitions from all enabled plugins.", "example": "curl http://localhost:5001/api/dashboard/widgets -H \"Authorization: Bearer $TOK\"" } ] }, { "surface": "core-dashboarddefaults", "endpoints": [ { "method": "GET", "path": "/api/dashboarddefaults", "auth": "permission:settings.view", "params": "not documented", "purpose": "List all visitor-IP -> business-unit mappings.", "example": "curl http://localhost:5001/api/dashboarddefaults -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/dashboarddefaults", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Create a visitor-IP -> business-unit mapping.", "example": "curl -X POST http://localhost:5001/api/dashboarddefaults -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/dashboarddefaults/", "auth": "jwt + role:admin", "params": "path: default_id (int)", "purpose": "Delete (deactivate) a mapping.", "example": "curl -X DELETE http://localhost:5001/api/dashboarddefaults/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/dashboarddefaults/", "auth": "jwt + role:admin", "params": "path: default_id (int); body: JSON (fields not yet documented)", "purpose": "Update a mapping.", "example": "curl -X PUT http://localhost:5001/api/dashboarddefaults/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/dashboarddefaults/display-role", "auth": "none (reviewed: named in the public-read or mutation sweep)", "params": "not documented", "purpose": "Resolve what a single 'display' PC should show, from its own IP.", "example": "curl http://localhost:5001/api/dashboarddefaults/display-role" }, { "method": "GET", "path": "/api/dashboarddefaults/visitor-location", "auth": "none (reviewed: named in the public-read or mutation sweep)", "params": "not documented", "purpose": "Resolve the business unit for the calling display by its IP.", "example": "curl http://localhost:5001/api/dashboarddefaults/visitor-location" } ] }, { "surface": "core-docs", "endpoints": [ { "method": "GET", "path": "/api/docs/", "auth": "none (reviewed: named in the public-read or mutation sweep)", "params": "not documented", "purpose": "Redoc page. url_for keeps the asset URLs correct under any mount.", "example": "curl http://localhost:5001/api/docs/" }, { "method": "GET", "path": "/api/docs/llms.txt", "auth": "none (reviewed: named in the public-read or mutation sweep)", "params": "not documented", "purpose": "Concise LLM-oriented API guide.", "example": "curl http://localhost:5001/api/docs/llms.txt" }, { "method": "GET", "path": "/api/docs/openapi.json", "auth": "none (reviewed: named in the public-read or mutation sweep)", "params": "not documented", "purpose": "The generated OpenAPI 3.1 spec (machine + LLM readable).", "example": "curl http://localhost:5001/api/docs/openapi.json" }, { "method": "GET", "path": "/api/docs/redoc.standalone.js", "auth": "none (reviewed: named in the public-read or mutation sweep)", "params": "not documented", "purpose": "Vendored Redoc bundle (offline).", "example": "curl http://localhost:5001/api/docs/redoc.standalone.js" } ] }, { "surface": "core-locations", "endpoints": [ { "method": "GET", "path": "/api/locations", "auth": "permission:assets.view", "params": "not documented", "purpose": "List all locations.", "example": "curl http://localhost:5001/api/locations -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/locations", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Create a new location.", "example": "curl -X POST http://localhost:5001/api/locations -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/locations/", "auth": "jwt + role:admin", "params": "path: location_id (int)", "purpose": "Delete (deactivate) a location.", "example": "curl -X DELETE http://localhost:5001/api/locations/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/locations/", "auth": "permission:assets.view", "params": "path: location_id (int)", "purpose": "Get a single location.", "example": "curl http://localhost:5001/api/locations/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/locations/", "auth": "jwt + role:admin", "params": "path: location_id (int); body: JSON (fields not yet documented)", "purpose": "Update a location.", "example": "curl -X PUT http://localhost:5001/api/locations/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/locations/types", "auth": "permission:assets.view", "params": "not documented", "purpose": "List location types. ?active=false includes inactive ones.", "example": "curl http://localhost:5001/api/locations/types -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/locations/types", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: locations.create_location_type has no docstring.", "example": "curl -X POST http://localhost:5001/api/locations/types -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/locations/types/", "auth": "jwt + role:admin", "params": "path: type_id (int)", "purpose": "UNDOCUMENTED: locations.delete_location_type has no docstring.", "example": "curl -X DELETE http://localhost:5001/api/locations/types/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/locations/types/", "auth": "jwt + role:admin", "params": "path: type_id (int); body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: locations.update_location_type has no docstring.", "example": "curl -X PUT http://localhost:5001/api/locations/types/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" } ] }, { "surface": "core-maplevels", "endpoints": [ { "method": "GET", "path": "/api/maplevels", "auth": "jwt-optional (works signed out; the handler decides what shows)", "params": "not documented", "purpose": "Every active level, grouped by building, in display order.", "example": "curl http://localhost:5001/api/maplevels -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/maplevels", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: maplevels.create_level has no docstring.", "example": "curl -X POST http://localhost:5001/api/maplevels -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/maplevels/", "auth": "jwt + role:admin", "params": "path: levelid (int)", "purpose": "Deactivate a level, refusing while assets are still placed on it.", "example": "curl -X DELETE http://localhost:5001/api/maplevels/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/maplevels/", "auth": "jwt-optional (works signed out; the handler decides what shows)", "params": "path: levelid (int)", "purpose": "UNDOCUMENTED: maplevels.get_level has no docstring.", "example": "curl http://localhost:5001/api/maplevels/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PATCH|PUT", "path": "/api/maplevels/", "auth": "jwt + role:admin", "params": "path: levelid (int); body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: maplevels.update_level has no docstring.", "example": "curl -X PATCH http://localhost:5001/api/maplevels/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/maplevels//blueprint", "auth": "jwt + role:admin", "params": "path: levelid (int); body: JSON (fields not yet documented)", "purpose": "Upload this level's blueprint for one theme.", "example": "curl -X POST http://localhost:5001/api/maplevels/1/blueprint -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/maplevels//blueprint/", "auth": "jwt-optional (works signed out; the handler decides what shows)", "params": "path: levelid (int), filename (path)", "purpose": "Serve a level's blueprint image. Public, for the same reason as above.", "example": "curl http://localhost:5001/api/maplevels/1/blueprint/example.png -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/maplevels/buildings", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: maplevels.create_building has no docstring.", "example": "curl -X POST http://localhost:5001/api/maplevels/buildings -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "PATCH|PUT", "path": "/api/maplevels/buildings/", "auth": "jwt + role:admin", "params": "path: buildingid (int); body: JSON (fields not yet documented)", "purpose": "Rename or reorder a building. Levels move with it; nothing repositions.", "example": "curl -X PATCH http://localhost:5001/api/maplevels/buildings/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" } ] }, { "surface": "core-mappositions", "endpoints": [ { "method": "POST", "path": "/api/mappositions/positions", "auth": "permission:assets.edit", "params": "body: JSON (fields not yet documented)", "purpose": "Set positions for many assets at once.", "example": "curl -X POST http://localhost:5001/api/mappositions/positions -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/mappositions/snapshots", "auth": "permission:assets.view", "params": "not documented", "purpose": "Snapshots, newest first. Metadata only - the positions are large.", "example": "curl http://localhost:5001/api/mappositions/snapshots -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/mappositions/snapshots//restore", "auth": "permission:assets.edit", "params": "path: snapshotid (int); body: JSON (fields not yet documented)", "purpose": "Put the positions in this snapshot back.", "example": "curl -X POST http://localhost:5001/api/mappositions/snapshots/1/restore -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/mappositions/transform", "auth": "permission:assets.edit", "params": "body: JSON (fields not yet documented)", "purpose": "Move every placed marker on a level by a transform read off landmarks.", "example": "curl -X POST http://localhost:5001/api/mappositions/transform -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/mappositions/verify", "auth": "permission:assets.edit", "params": "body: JSON (fields not yet documented)", "purpose": "Mark markers as reviewed against the current drawing without moving them.", "example": "curl -X POST http://localhost:5001/api/mappositions/verify -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" } ] }, { "surface": "core-models", "endpoints": [ { "method": "GET", "path": "/api/models", "auth": "permission:assets.view", "params": "not documented", "purpose": "List all vendor catalog models.", "example": "curl http://localhost:5001/api/models -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/models", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Create a new model.", "example": "curl -X POST http://localhost:5001/api/models -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/models/", "auth": "jwt + role:admin", "params": "path: model_id (int)", "purpose": "Delete (deactivate) a model.", "example": "curl -X DELETE http://localhost:5001/api/models/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/models/", "auth": "permission:assets.view", "params": "path: model_id (int)", "purpose": "Get a single model.", "example": "curl http://localhost:5001/api/models/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/models/", "auth": "jwt + role:admin", "params": "path: model_id (int); body: JSON (fields not yet documented)", "purpose": "Update a model.", "example": "curl -X PUT http://localhost:5001/api/models/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/models//image", "auth": "jwt + role:admin", "params": "path: model_id (int)", "purpose": "Clear a model image and delete the uploaded file if we own it.", "example": "curl -X DELETE http://localhost:5001/api/models/1/image -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/models//image", "auth": "jwt + role:admin", "params": "path: model_id (int); body: JSON (fields not yet documented)", "purpose": "Upload (or replace) the photo for a model.", "example": "curl -X POST http://localhost:5001/api/models/1/image -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/models/image/", "auth": "none (reviewed: named in the public-read or mutation sweep)", "params": "path: filename (path)", "purpose": "Serve an uploaded model image (public - asset detail pages read it).", "example": "curl http://localhost:5001/api/models/image/example.png" } ] }, { "surface": "core-modeltypes", "endpoints": [ { "method": "GET", "path": "/api/modeltypes", "auth": "permission:assets.view", "params": "not documented", "purpose": "List all model types with optional filtering.", "example": "curl http://localhost:5001/api/modeltypes -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/modeltypes", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Create a new model type.", "example": "curl -X POST http://localhost:5001/api/modeltypes -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/modeltypes/", "auth": "jwt + role:admin", "params": "path: type_id (int)", "purpose": "Delete (deactivate) a model type.", "example": "curl -X DELETE http://localhost:5001/api/modeltypes/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/modeltypes/", "auth": "permission:assets.view", "params": "path: type_id (int)", "purpose": "Get a single model type.", "example": "curl http://localhost:5001/api/modeltypes/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/modeltypes/", "auth": "jwt + role:admin", "params": "path: type_id (int); body: JSON (fields not yet documented)", "purpose": "Update a model type.", "example": "curl -X PUT http://localhost:5001/api/modeltypes/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" } ] }, { "surface": "core-operatingsystems", "endpoints": [ { "method": "GET", "path": "/api/operatingsystems", "auth": "permission:assets.view", "params": "not documented", "purpose": "List all operating systems.", "example": "curl http://localhost:5001/api/operatingsystems -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/operatingsystems", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Create a new operating system.", "example": "curl -X POST http://localhost:5001/api/operatingsystems -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/operatingsystems/", "auth": "jwt + role:admin", "params": "path: os_id (int)", "purpose": "Delete (deactivate) an operating system.", "example": "curl -X DELETE http://localhost:5001/api/operatingsystems/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/operatingsystems/", "auth": "permission:assets.view", "params": "path: os_id (int)", "purpose": "Get a single operating system.", "example": "curl http://localhost:5001/api/operatingsystems/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/operatingsystems/", "auth": "jwt + role:admin", "params": "path: os_id (int); body: JSON (fields not yet documented)", "purpose": "Update an operating system.", "example": "curl -X PUT http://localhost:5001/api/operatingsystems/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" } ] }, { "surface": "core-plugins", "endpoints": [ { "method": "GET", "path": "/api/plugins", "auth": "permission:settings.view", "params": "not documented", "purpose": "List all discovered plugins (enabled or not) with their metadata and the framework contract version.", "example": "curl http://localhost:5001/api/plugins -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/plugins/", "auth": "jwt + role:admin", "params": "path: name (string); body: JSON (fields not yet documented)", "purpose": "Enable or disable a plugin. Takes effect on the next app restart for route/navigation changes.", "example": "curl -X PUT http://localhost:5001/api/plugins/x -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/plugins/enabled", "auth": "jwt-optional (works signed out; the handler decides what shows)", "params": "not documented", "purpose": "Return just the names of enabled plugins as a flat array.", "example": "curl http://localhost:5001/api/plugins/enabled -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/plugins/settings-routes", "auth": "permission:settings.view", "params": "not documented", "purpose": "Return settings routes contributed by all enabled plugins.", "example": "curl http://localhost:5001/api/plugins/settings-routes -H \"Authorization: Bearer $TOK\"" } ] }, { "surface": "core-pluginui", "endpoints": [ { "method": "GET", "path": "/api/pluginui/asset-panels", "auth": "permission:assets.view", "params": "not documented", "purpose": "Return the asset-detail panels matching one asset's type (get_asset_panels).", "example": "curl http://localhost:5001/api/pluginui/asset-panels -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/pluginui/asset-presentation", "auth": "permission:assets.view", "params": "not documented", "purpose": "Merge enabled plugins' asset-type presentation entries (hook).", "example": "curl http://localhost:5001/api/pluginui/asset-presentation -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/pluginui/asset-type-descriptors", "auth": "permission:assets.view", "params": "not documented", "purpose": "Merge enabled plugins' asset-type subtype descriptors.", "example": "curl http://localhost:5001/api/pluginui/asset-type-descriptors -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/pluginui/core-type-descriptors", "auth": "permission:assets.view", "params": "not documented", "purpose": "Return type descriptors for core-owned non-asset types.", "example": "curl http://localhost:5001/api/pluginui/core-type-descriptors -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/pluginui/map-overlays", "auth": "permission:assets.view", "params": "not documented", "purpose": "Merge enabled plugins' map overlay declarations (get_map_overlays hook).", "example": "curl http://localhost:5001/api/pluginui/map-overlays -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/pluginui/settings-cards", "auth": "permission:assets.view", "params": "not documented", "purpose": "Merge enabled plugins' settings-catalog cards (get_settings_cards hook).", "example": "curl http://localhost:5001/api/pluginui/settings-cards -H \"Authorization: Bearer $TOK\"" } ] }, { "surface": "core-reports", "endpoints": [ { "method": "GET", "path": "/api/reports", "auth": "permission:reports.view", "params": "not documented", "purpose": "List all available reports.", "example": "curl http://localhost:5001/api/reports -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/reports/asset-inventory", "auth": "permission:reports.view", "params": "not documented", "purpose": "Report: Complete asset inventory summary.", "example": "curl http://localhost:5001/api/reports/asset-inventory -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/reports/assets-by-status", "auth": "permission:reports.view", "params": "not documented", "purpose": "Report: Asset count grouped by status.", "example": "curl http://localhost:5001/api/reports/assets-by-status -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/reports/email", "auth": "permission:reports.export", "params": "body: JSON (fields not yet documented)", "purpose": "Email a report's data as an HTML table (on-demand delivery).", "example": "curl -X POST http://localhost:5001/api/reports/email -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/reports/kb-popularity", "auth": "permission:reports.view", "params": "not documented", "purpose": "Report: Most clicked knowledge base articles.", "example": "curl http://localhost:5001/api/reports/kb-popularity -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/reports/machines-by-type", "auth": "permission:reports.view", "params": "not documented", "purpose": "Report: Machine count grouped by machine type.", "example": "curl http://localhost:5001/api/reports/machines-by-type -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/reports/pc-relationships", "auth": "permission:reports.view", "params": "not documented", "purpose": "Report: PCs with relationships to shop floor machines.", "example": "curl http://localhost:5001/api/reports/pc-relationships -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/reports/software-compliance", "auth": "permission:reports.view", "params": "not documented", "purpose": "Report: Required applications vs installed (per PC).", "example": "curl http://localhost:5001/api/reports/software-compliance -H \"Authorization: Bearer $TOK\"" } ] }, { "surface": "core-scripts", "endpoints": [ { "method": "GET", "path": "/api/scripts", "auth": "permission:endpoints.runscript", "params": "not documented", "purpose": "List scripts (active by default).", "example": "curl http://localhost:5001/api/scripts -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/scripts", "auth": "permission:endpoints.runscript", "params": "body: JSON (fields not yet documented)", "purpose": "Create a script catalog entry (body uploaded separately).", "example": "curl -X POST http://localhost:5001/api/scripts -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/scripts/", "auth": "permission:endpoints.runscript", "params": "path: script_id (int)", "purpose": "UNDOCUMENTED: scripts.delete_script has no docstring.", "example": "curl -X DELETE http://localhost:5001/api/scripts/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/scripts/", "auth": "permission:endpoints.runscript", "params": "path: script_id (int)", "purpose": "UNDOCUMENTED: scripts.get_script has no docstring.", "example": "curl http://localhost:5001/api/scripts/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/scripts/", "auth": "permission:endpoints.runscript", "params": "path: script_id (int); body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: scripts.update_script has no docstring.", "example": "curl -X PUT http://localhost:5001/api/scripts/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/scripts//body", "auth": "permission:endpoints.runscript", "params": "path: script_id (int); body: JSON (fields not yet documented)", "purpose": "Upload (or replace) the .ps1 body for a script.", "example": "curl -X POST http://localhost:5001/api/scripts/1/body -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/scripts/body/", "auth": "permission:endpoints.runscript", "params": "path: filename (path)", "purpose": "Operator-facing script body download (JWT/RBAC).", "example": "curl http://localhost:5001/api/scripts/body/example.png -H \"Authorization: Bearer $TOK\"" } ] }, { "surface": "core-search", "endpoints": [ { "method": "GET", "path": "/api/search", "auth": "permission:assets.view", "params": "not documented", "purpose": "Global search across multiple entity types.", "example": "curl http://localhost:5001/api/search -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/search/suggest", "auth": "permission:assets.view", "params": "not documented", "purpose": "A better spelling for a query that found nothing, or null.", "example": "curl http://localhost:5001/api/search/suggest -H \"Authorization: Bearer $TOK\"" } ] }, { "surface": "core-settings", "endpoints": [ { "method": "GET", "path": "/api/settings", "auth": "jwt-optional (works signed out; the handler decides what shows)", "params": "not documented", "purpose": "List all settings, optionally filtered by category.", "example": "curl http://localhost:5001/api/settings -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/settings", "auth": "permission:settings.edit", "params": "body: JSON (fields not yet documented)", "purpose": "Create a new setting (admin only).", "example": "curl -X POST http://localhost:5001/api/settings -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/settings/", "auth": "jwt-optional (works signed out; the handler decides what shows)", "params": "path: key (string)", "purpose": "Get a single setting by key.", "example": "curl http://localhost:5001/api/settings/x -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/settings/", "auth": "permission:settings.edit", "params": "path: key (string); body: JSON (fields not yet documented)", "purpose": "Update a setting value.", "example": "curl -X PUT http://localhost:5001/api/settings/x -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/settings/asset-import/import", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Validate uploaded CSVs and, when commit=true, load them.", "example": "curl -X POST http://localhost:5001/api/settings/asset-import/import -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/settings/asset-import/script", "auth": "jwt + role:admin", "params": "not documented", "purpose": "Download Collect-ShopDB.ps1 with this site's CSV path embedded.", "example": "curl http://localhost:5001/api/settings/asset-import/script -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/settings/asset-import/templates", "auth": "jwt + role:admin", "params": "not documented", "purpose": "List the importable CSV tables in the order they must be uploaded.", "example": "curl http://localhost:5001/api/settings/asset-import/templates -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/settings/asset-import/templates/", "auth": "jwt + role:admin", "params": "path: tablename (string)", "purpose": "Download a generated CSV template for a single importable table.", "example": "curl http://localhost:5001/api/settings/asset-import/templates/x -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/settings/asset-import/winc/batches", "auth": "jwt + role:admin", "params": "not documented", "purpose": "List applied/undone WINC import batches, newest first (for the undo UI).", "example": "curl http://localhost:5001/api/settings/asset-import/winc/batches -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/settings/asset-import/winc/commit", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Apply a WINC plan reversibly. Requires acknowledgment for needs-create.", "example": "curl -X POST http://localhost:5001/api/settings/asset-import/winc/commit -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/settings/asset-import/winc/preview", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Read-only WINC analysis: report what a commit would do. Writes nothing.", "example": "curl -X POST http://localhost:5001/api/settings/asset-import/winc/preview -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/settings/asset-import/winc/undo", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Reverse an applied WINC import batch by id. Conservative and reversible.", "example": "curl -X POST http://localhost:5001/api/settings/asset-import/winc/undo -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/settings/branding-logo", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Upload a branding logo image and point the matching setting at it.", "example": "curl -X POST http://localhost:5001/api/settings/branding-logo -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/settings/branding/", "auth": "none (reviewed: named in the public-read or mutation sweep)", "params": "path: filename (path)", "purpose": "Serve an uploaded branding logo (public - kiosks/print pages read it).", "example": "curl http://localhost:5001/api/settings/branding/example.png" }, { "method": "POST", "path": "/api/settings/map-blueprint", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Upload a floor-map blueprint image and point the setting at it.", "example": "curl -X POST http://localhost:5001/api/settings/map-blueprint -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/settings/map-blueprint/", "auth": "none (reviewed: named in the public-read or mutation sweep)", "params": "path: filename (path)", "purpose": "Serve an uploaded blueprint image (public - kiosks read it).", "example": "curl http://localhost:5001/api/settings/map-blueprint/example.png" }, { "method": "POST", "path": "/api/settings/seed", "auth": "permission:settings.edit", "params": "body: JSON (fields not yet documented)", "purpose": "Seed default settings if they don't exist.", "example": "curl -X POST http://localhost:5001/api/settings/seed -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/settings/test-email", "auth": "permission:settings.edit", "params": "body: JSON (fields not yet documented)", "purpose": "Send a test email to verify SMTP configuration.", "example": "curl -X POST http://localhost:5001/api/settings/test-email -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" } ] }, { "surface": "core-setup", "endpoints": [ { "method": "POST", "path": "/api/setup/complete", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Flag the first-run setup as finished.", "example": "curl -X POST http://localhost:5001/api/setup/complete -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/setup/create-admin", "auth": "none (first run only: refused once an admin exists)", "params": "body: JSON (fields not yet documented)", "purpose": "Create the first admin. Only works while there are zero users, setup has not been marked complete, and the caller proves operator control (setup token or a loopback request).", "example": "curl -X POST http://localhost:5001/api/setup/create-admin -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/setup/needs-admin", "auth": "none (reviewed: named in the public-read or mutation sweep)", "params": "not documented", "purpose": "True when no users exist yet - the app's very first run. Public so the login screen can offer to create the first admin.", "example": "curl http://localhost:5001/api/setup/needs-admin" }, { "method": "POST", "path": "/api/setup/seed-reference", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Seed core reference data + permissions + default settings. Idempotent - reuses the same routines as the `flask seed ...` CLI commands.", "example": "curl -X POST http://localhost:5001/api/setup/seed-reference -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/setup/seed-starter", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Add common vendors that are not already present. Idempotent.", "example": "curl -X POST http://localhost:5001/api/setup/seed-starter -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" } ] }, { "surface": "core-shopdbbackups", "endpoints": [ { "method": "GET", "path": "/api/shopdbbackups", "auth": "jwt + role:admin", "params": "not documented", "purpose": "List every retained backup set, newest first, with a compatibility flag.", "example": "curl http://localhost:5001/api/shopdbbackups -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/shopdbbackups", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Kick off an on-demand backup run.", "example": "curl -X POST http://localhost:5001/api/shopdbbackups -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/shopdbbackups/", "auth": "jwt + role:admin", "params": "path: snapshotid (string)", "purpose": "Return one set's full manifest plus a resolved compatibility verdict.", "example": "curl http://localhost:5001/api/shopdbbackups/x -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/shopdbbackups//restore", "auth": "jwt + role:admin", "params": "path: snapshotid (string); body: JSON (fields not yet documented)", "purpose": "Queue a restore of a set, gated on schema compatibility.", "example": "curl -X POST http://localhost:5001/api/shopdbbackups/x/restore -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/shopdbbackups/finalize-restore", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Run the post-restore schema upgrade in the app context.", "example": "curl -X POST http://localhost:5001/api/shopdbbackups/finalize-restore -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/shopdbbackups/history", "auth": "jwt + role:admin", "params": "not documented", "purpose": "Return the recorded history of backup and restore runs, newest first.", "example": "curl http://localhost:5001/api/shopdbbackups/history -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/shopdbbackups/settings", "auth": "jwt + role:admin", "params": "not documented", "purpose": "Return destination + retention config for the settings pane.", "example": "curl http://localhost:5001/api/shopdbbackups/settings -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/shopdbbackups/settings", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Persist the backup destination kind and its credential/config fields.", "example": "curl -X PUT http://localhost:5001/api/shopdbbackups/settings -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/shopdbbackups/status", "auth": "jwt + role:admin", "params": "not documented", "purpose": "Return the live status of the most recent backup and restore runs.", "example": "curl http://localhost:5001/api/shopdbbackups/status -H \"Authorization: Bearer $TOK\"" } ] }, { "surface": "core-supportteams", "endpoints": [ { "method": "GET", "path": "/api/supportteams", "auth": "permission:assets.view", "params": "not documented", "purpose": "List support teams (with contacts). ?active and ?teamname filters.", "example": "curl http://localhost:5001/api/supportteams -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/supportteams", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Create a new support team.", "example": "curl -X POST http://localhost:5001/api/supportteams -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/supportteams/", "auth": "jwt + role:admin", "params": "path: team_id (int)", "purpose": "Delete a support team; 409 while any application references it.", "example": "curl -X DELETE http://localhost:5001/api/supportteams/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/supportteams/", "auth": "permission:assets.view", "params": "path: team_id (int)", "purpose": "Get a single support team with its contacts.", "example": "curl http://localhost:5001/api/supportteams/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/supportteams/", "auth": "jwt + role:admin", "params": "path: team_id (int); body: JSON (fields not yet documented)", "purpose": "Update a support team.", "example": "curl -X PUT http://localhost:5001/api/supportteams/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/supportteams//contacts", "auth": "jwt + role:admin", "params": "path: team_id (int); body: JSON (fields not yet documented)", "purpose": "Add a contact to a support team.", "example": "curl -X POST http://localhost:5001/api/supportteams/1/contacts -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/supportteams//contacts/", "auth": "jwt + role:admin", "params": "path: team_id (int), contact_id (int)", "purpose": "Delete a support-team contact.", "example": "curl -X DELETE http://localhost:5001/api/supportteams/1/contacts/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/supportteams//contacts/", "auth": "jwt + role:admin", "params": "path: team_id (int), contact_id (int); body: JSON (fields not yet documented)", "purpose": "Update a support-team contact.", "example": "curl -X PUT http://localhost:5001/api/supportteams/1/contacts/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" } ] }, { "surface": "core-users", "endpoints": [ { "method": "GET", "path": "/api/users", "auth": "jwt + role:admin", "params": "not documented", "purpose": "List all users.", "example": "curl http://localhost:5001/api/users -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/users", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Create a new user.", "example": "curl -X POST http://localhost:5001/api/users -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/users/", "auth": "jwt + role:admin", "params": "path: userid (int)", "purpose": "Delete a user.", "example": "curl -X DELETE http://localhost:5001/api/users/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/users/", "auth": "jwt", "params": "path: userid (int)", "purpose": "Get a single user.", "example": "curl http://localhost:5001/api/users/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/users/", "auth": "jwt", "params": "path: userid (int); body: JSON (fields not yet documented)", "purpose": "Update a user.", "example": "curl -X PUT http://localhost:5001/api/users/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/users/permissions", "auth": "jwt", "params": "not documented", "purpose": "List assignable permissions grouped by category.", "example": "curl http://localhost:5001/api/users/permissions -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/users/roles", "auth": "jwt", "params": "not documented", "purpose": "List all roles with their permissions.", "example": "curl http://localhost:5001/api/users/roles -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/users/roles", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Create a new role.", "example": "curl -X POST http://localhost:5001/api/users/roles -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/users/roles/", "auth": "jwt + role:admin", "params": "path: roleid (int)", "purpose": "Delete a role.", "example": "curl -X DELETE http://localhost:5001/api/users/roles/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/users/roles/", "auth": "jwt + role:admin", "params": "path: roleid (int); body: JSON (fields not yet documented)", "purpose": "Update a role.", "example": "curl -X PUT http://localhost:5001/api/users/roles/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" } ] }, { "surface": "core-vendors", "endpoints": [ { "method": "GET", "path": "/api/vendors", "auth": "permission:assets.view", "params": "not documented", "purpose": "List all vendors.", "example": "curl http://localhost:5001/api/vendors -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/vendors", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Create a new vendor.", "example": "curl -X POST http://localhost:5001/api/vendors -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/vendors/", "auth": "jwt + role:admin", "params": "path: vendor_id (int)", "purpose": "Delete (deactivate) a vendor.", "example": "curl -X DELETE http://localhost:5001/api/vendors/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/vendors/", "auth": "permission:assets.view", "params": "path: vendor_id (int)", "purpose": "Get a single vendor.", "example": "curl http://localhost:5001/api/vendors/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/vendors/", "auth": "jwt + role:admin", "params": "path: vendor_id (int); body: JSON (fields not yet documented)", "purpose": "Update a vendor.", "example": "curl -X PUT http://localhost:5001/api/vendors/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" } ] }, { "surface": "plugin-backups", "endpoints": [ { "method": "GET", "path": "/api/backups/asset/", "auth": "permission:backups.view", "params": "path: assetid (int)", "purpose": "Revision history for one asset, newest first.", "example": "curl http://localhost:5001/api/backups/asset/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/backups/asset//info", "auth": "permission:backups.view", "params": "path: assetid (int)", "purpose": "A kind's 'at a glance' card, built from its LATEST revision.", "example": "curl http://localhost:5001/api/backups/asset/1/info -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/backups/dashboard/stale", "auth": "permission:backups.view", "params": "not documented", "purpose": "Chains whose backup has stopped running.", "example": "curl http://localhost:5001/api/backups/dashboard/stale -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/backups/kinds", "auth": "permission:backups.view", "params": "not documented", "purpose": "Registered backup kinds, for UI that needs to enumerate them.", "example": "curl http://localhost:5001/api/backups/kinds -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/backups/revisions/", "auth": "permission:backups.view", "params": "path: backuprevisionid (int)", "purpose": "One revision, including its parsed payload where there is one.", "example": "curl http://localhost:5001/api/backups/revisions/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/backups/revisions//diff", "auth": "permission:backups.view", "params": "path: backuprevisionid (int)", "purpose": "Diff two revisions of the same asset+kind.", "example": "curl http://localhost:5001/api/backups/revisions/1/diff -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/backups/revisions//download", "auth": "permission:backups.download", "params": "path: backuprevisionid (int)", "purpose": "Render a revision back to its native file format.", "example": "curl http://localhost:5001/api/backups/revisions/1/download -H \"Authorization: Bearer $TOK\"" } ] }, { "surface": "plugin-computers", "endpoints": [ { "method": "GET", "path": "/api/computers", "auth": "permission:computers.view", "params": "not documented", "purpose": "List all computers with filtering and pagination.", "example": "curl http://localhost:5001/api/computers -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/computers", "auth": "permission:computers.create", "params": "body: JSON (fields not yet documented)", "purpose": "Create new computer (creates both Asset and Computer records).", "example": "curl -X POST http://localhost:5001/api/computers -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/computers/", "auth": "permission:computers.delete", "params": "path: computer_id (int)", "purpose": "Delete (soft delete) computer.", "example": "curl -X DELETE http://localhost:5001/api/computers/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/computers/", "auth": "permission:computers.view", "params": "path: computer_id (int)", "purpose": "Get a single computer with full details.", "example": "curl http://localhost:5001/api/computers/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/computers/", "auth": "permission:computers.edit", "params": "path: computer_id (int); body: JSON (fields not yet documented)", "purpose": "Update computer (both Asset and Computer records).", "example": "curl -X PUT http://localhost:5001/api/computers/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/computers//apps", "auth": "permission:computers.view", "params": "path: computer_id (int)", "purpose": "Get all installed applications for a computer.", "example": "curl http://localhost:5001/api/computers/1/apps -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/computers//apps", "auth": "permission:computers.create", "params": "path: computer_id (int); body: JSON (fields not yet documented)", "purpose": "Add an installed application to a computer.", "example": "curl -X POST http://localhost:5001/api/computers/1/apps -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/computers//apps/", "auth": "permission:computers.delete", "params": "path: computer_id (int), app_id (int)", "purpose": "Remove an installed application from a computer.", "example": "curl -X DELETE http://localhost:5001/api/computers/1/apps/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/computers//report", "auth": "permission:computers.create", "params": "path: computer_id (int); body: JSON (fields not yet documented)", "purpose": "Report computer status (for agent-based reporting).", "example": "curl -X POST http://localhost:5001/api/computers/1/report -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/computers/asset//policypanel", "auth": "permission:computers.view", "params": "path: asset_id (int)", "purpose": "Keyvalue panel: which policy governs this endpoint, and what it allows.", "example": "curl http://localhost:5001/api/computers/asset/1/policypanel -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/computers/by-asset/", "auth": "permission:computers.view", "params": "path: asset_id (int)", "purpose": "Get computer data by asset ID.", "example": "curl http://localhost:5001/api/computers/by-asset/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/computers/by-hostname/", "auth": "permission:computers.view", "params": "path: hostname (string)", "purpose": "Get computer by hostname.", "example": "curl http://localhost:5001/api/computers/by-hostname/x -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/computers/client-script", "auth": "jwt + role:admin", "params": "not documented", "purpose": "The collector reporter, stamped with THIS site's values.", "example": "curl http://localhost:5001/api/computers/client-script -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/computers/dashboard/quiet", "auth": "permission:computers.view", "params": "not documented", "purpose": "PCs that WERE reporting, have stopped, and are still meant to be in use.", "example": "curl http://localhost:5001/api/computers/dashboard/quiet -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/computers/dashboard/sharedmachines", "auth": "permission:computers.view", "params": "not documented", "purpose": "Machine numbers claimed by more than one PC, with nothing filed under them.", "example": "curl http://localhost:5001/api/computers/dashboard/sharedmachines -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/computers/dashboard/summary", "auth": "permission:computers.view", "params": "not documented", "purpose": "Get computer dashboard summary data.", "example": "curl http://localhost:5001/api/computers/dashboard/summary -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/computers/display-kiosks", "auth": "permission:computers.view", "params": "not documented", "purpose": "Reporting display kiosks, for the Dashboard Defaults picker.", "example": "curl http://localhost:5001/api/computers/display-kiosks -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/computers/policies/actions", "auth": "permission:computers.view", "params": "not documented", "purpose": "The allowlisted action names + labels a policy may reference.", "example": "curl http://localhost:5001/api/computers/policies/actions -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/computers/policies/business", "auth": "permission:computers.view", "params": "not documented", "purpose": "UNDOCUMENTED: computers.list_business_policies has no docstring.", "example": "curl http://localhost:5001/api/computers/policies/business -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/computers/policies/business", "auth": "permission:computers.create", "params": "body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: computers.create_business_policy has no docstring.", "example": "curl -X POST http://localhost:5001/api/computers/policies/business -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/computers/policies/business/", "auth": "permission:computers.delete", "params": "path: policy_id (int)", "purpose": "UNDOCUMENTED: computers.delete_business_policy has no docstring.", "example": "curl -X DELETE http://localhost:5001/api/computers/policies/business/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/computers/policies/business/", "auth": "permission:computers.view", "params": "path: policy_id (int)", "purpose": "UNDOCUMENTED: computers.get_business_policy has no docstring.", "example": "curl http://localhost:5001/api/computers/policies/business/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/computers/policies/business/", "auth": "permission:computers.edit", "params": "path: policy_id (int); body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: computers.update_business_policy has no docstring.", "example": "curl -X PUT http://localhost:5001/api/computers/policies/business/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/computers/policies/configuration", "auth": "permission:computers.view", "params": "not documented", "purpose": "UNDOCUMENTED: computers.list_configuration_policies has no docstring.", "example": "curl http://localhost:5001/api/computers/policies/configuration -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/computers/policies/configuration", "auth": "permission:computers.create", "params": "body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: computers.create_configuration_policy has no docstring.", "example": "curl -X POST http://localhost:5001/api/computers/policies/configuration -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/computers/policies/configuration/", "auth": "permission:computers.delete", "params": "path: policy_id (int)", "purpose": "UNDOCUMENTED: computers.delete_configuration_policy has no docstring.", "example": "curl -X DELETE http://localhost:5001/api/computers/policies/configuration/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/computers/policies/configuration/", "auth": "permission:computers.view", "params": "path: policy_id (int)", "purpose": "UNDOCUMENTED: computers.get_configuration_policy has no docstring.", "example": "curl http://localhost:5001/api/computers/policies/configuration/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/computers/policies/configuration/", "auth": "permission:computers.edit", "params": "path: policy_id (int); body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: computers.update_configuration_policy has no docstring.", "example": "curl -X PUT http://localhost:5001/api/computers/policies/configuration/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/computers/policies/effective/", "auth": "permission:computers.view", "params": "path: asset_id (int)", "purpose": "Preview the resolved effective policy for one endpoint (debug/UI).", "example": "curl http://localhost:5001/api/computers/policies/effective/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/computers/protocols", "auth": "permission:computers.view", "params": "not documented", "purpose": "List access protocols. ?active=false includes disabled ones.", "example": "curl http://localhost:5001/api/computers/protocols -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/computers/protocols", "auth": "permission:computers.edit", "params": "body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: computers.create_protocol has no docstring.", "example": "curl -X POST http://localhost:5001/api/computers/protocols -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/computers/protocols/", "auth": "permission:computers.edit", "params": "path: protocol_id (int)", "purpose": "UNDOCUMENTED: computers.delete_protocol has no docstring.", "example": "curl -X DELETE http://localhost:5001/api/computers/protocols/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PATCH|PUT", "path": "/api/computers/protocols/", "auth": "permission:computers.edit", "params": "path: protocol_id (int); body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: computers.update_protocol has no docstring.", "example": "curl -X PATCH http://localhost:5001/api/computers/protocols/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/computers/types", "auth": "permission:computers.view", "params": "not documented", "purpose": "List all computer types.", "example": "curl http://localhost:5001/api/computers/types -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/computers/types", "auth": "permission:computers.create", "params": "body: JSON (fields not yet documented)", "purpose": "Create a new computer type.", "example": "curl -X POST http://localhost:5001/api/computers/types -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/computers/types/", "auth": "permission:computers.delete", "params": "path: type_id (int)", "purpose": "Delete a computer type. Refused if any PC still uses it.", "example": "curl -X DELETE http://localhost:5001/api/computers/types/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/computers/types/", "auth": "permission:computers.view", "params": "path: type_id (int)", "purpose": "Get a single computer type.", "example": "curl http://localhost:5001/api/computers/types/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/computers/types/", "auth": "permission:computers.edit", "params": "path: type_id (int); body: JSON (fields not yet documented)", "purpose": "Update a computer type.", "example": "curl -X PUT http://localhost:5001/api/computers/types/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" } ] }, { "surface": "plugin-employees", "endpoints": [ { "method": "DELETE", "path": "/api/employees//photo", "auth": "jwt + role:admin", "params": "path: sso (int)", "purpose": "Clear an employee photo and delete the uploaded file. External mode 409s.", "example": "curl -X DELETE http://localhost:5001/api/employees/1/photo -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/employees//photo", "auth": "jwt + role:admin", "params": "path: sso (int); body: JSON (fields not yet documented)", "purpose": "Upload (or replace) the photo for a self-hosted directory employee.", "example": "curl -X POST http://localhost:5001/api/employees/1/photo -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/employees/directory", "auth": "permission:employees.view", "params": "not documented", "purpose": "Full self-hosted directory (for the management page).", "example": "curl http://localhost:5001/api/employees/directory -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/employees/directory", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: employees.create_directory_employee has no docstring.", "example": "curl -X POST http://localhost:5001/api/employees/directory -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/employees/directory/", "auth": "jwt + role:admin", "params": "path: sso (int)", "purpose": "UNDOCUMENTED: employees.delete_directory_employee has no docstring.", "example": "curl -X DELETE http://localhost:5001/api/employees/directory/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/employees/directory/", "auth": "jwt + role:admin", "params": "path: sso (int); body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: employees.update_directory_employee has no docstring.", "example": "curl -X PUT http://localhost:5001/api/employees/directory/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/employees/directory/import", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Bulk upsert from CSV. Accepts headers SSO,First_Name,Last_Name,Team,Role, Picture (case-insensitive; sso/firstname/... also accepted).", "example": "curl -X POST http://localhost:5001/api/employees/directory/import -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/employees/lookup", "auth": "permission:employees.view", "params": "not documented", "purpose": "Look up multiple employees by SSO list.", "example": "curl http://localhost:5001/api/employees/lookup -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/employees/lookup/", "auth": "permission:employees.view", "params": "path: sso (string)", "purpose": "Look up a single employee by SSO.", "example": "curl http://localhost:5001/api/employees/lookup/x -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/employees/photo/", "auth": "none (reviewed: named in the public-read or mutation sweep)", "params": "path: filename (path)", "purpose": "Serve an uploaded employee photo (public - kiosk cards read it).", "example": "curl http://localhost:5001/api/employees/photo/example.png" }, { "method": "GET", "path": "/api/employees/resolve/", "auth": "permission:employees.view", "params": "path: sso (string)", "purpose": "Resolve one SSO to a name and photo, and say HOW.", "example": "curl http://localhost:5001/api/employees/resolve/x -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/employees/search", "auth": "permission:employees.view", "params": "not documented", "purpose": "Search employees by name.", "example": "curl http://localhost:5001/api/employees/search -H \"Authorization: Bearer $TOK\"" } ] }, { "surface": "plugin-endpoints", "endpoints": [ { "method": "GET", "path": "/api/endpoints", "auth": "permission:endpoints.fleet", "params": "not documented", "purpose": "List reported endpoint states.", "example": "curl http://localhost:5001/api/endpoints -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/", "auth": "permission:endpoints.fleet", "params": "not documented", "purpose": "List reported endpoint states.", "example": "curl http://localhost:5001/api/endpoints/ -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/", "auth": "permission:endpoints.view", "params": "path: asset_id (int)", "purpose": "Get the current state for one endpoint by asset id.", "example": "curl http://localhost:5001/api/endpoints/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/endpoints//agentupgrade", "auth": "permission:endpoints.agentupdate", "params": "path: asset_id (int); body: JSON (fields not yet documented)", "purpose": "Push the published agent build to one endpoint.", "example": "curl -X POST http://localhost:5001/api/endpoints/1/agentupgrade -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/endpoints//commands", "auth": "permission:endpoints.view", "params": "path: asset_id (int)", "purpose": "Recent commands for one endpoint, newest first (operator view).", "example": "curl http://localhost:5001/api/endpoints/1/commands -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/endpoints//commands", "auth": "permission:endpoints.command", "params": "path: asset_id (int); body: JSON (fields not yet documented)", "purpose": "Queue an allowlisted command for one endpoint.", "example": "curl -X POST http://localhost:5001/api/endpoints/1/commands -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/endpoints//events", "auth": "permission:endpoints.view", "params": "path: asset_id (int)", "purpose": "List curated Windows events for one endpoint, newest first.", "example": "curl http://localhost:5001/api/endpoints/1/events -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints//holdableactions", "auth": "permission:endpoints.view", "params": "path: asset_id (int)", "purpose": "Desired-mode actions on this endpoint, with current hold state.", "example": "curl http://localhost:5001/api/endpoints/1/holdableactions -H \"Authorization: Bearer $TOK\"" }, { "method": "DELETE", "path": "/api/endpoints//lock", "auth": "permission:endpoints.command", "params": "path: asset_id (int)", "purpose": "Lift the quarantine on this endpoint.", "example": "curl -X DELETE http://localhost:5001/api/endpoints/1/lock -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints//lock", "auth": "permission:endpoints.view", "params": "path: asset_id (int)", "purpose": "The endpoint lock standing on this endpoint, or null.", "example": "curl http://localhost:5001/api/endpoints/1/lock -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/endpoints//lock", "auth": "permission:endpoints.command", "params": "path: asset_id (int); body: JSON (fields not yet documented)", "purpose": "Quarantine this endpoint against non-admin commands.", "example": "curl -X POST http://localhost:5001/api/endpoints/1/lock -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/endpoints//logcollections", "auth": "permission:endpoints.view", "params": "path: asset_id (int)", "purpose": "Collected-log history for one endpoint, newest first.", "example": "curl http://localhost:5001/api/endpoints/1/logcollections -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints//policyholds", "auth": "permission:endpoints.view", "params": "path: asset_id (int)", "purpose": "Active break-glass holds for one endpoint.", "example": "curl http://localhost:5001/api/endpoints/1/policyholds -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/endpoints//policyholds", "auth": "permission:endpoints.command", "params": "path: asset_id (int); body: JSON (fields not yet documented)", "purpose": "Deliberately suspend desired-state reconciliation for one or more actions.", "example": "curl -X POST http://localhost:5001/api/endpoints/1/policyholds -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/endpoints//policyholds/", "auth": "permission:endpoints.command", "params": "path: asset_id (int), action (string)", "purpose": "End a hold early, resuming reconciliation of one action.", "example": "curl -X DELETE http://localhost:5001/api/endpoints/1/policyholds/x -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints//scriptruns", "auth": "permission:endpoints.view", "params": "path: asset_id (int)", "purpose": "The last few run_script commands for one endpoint, newest first.", "example": "curl http://localhost:5001/api/endpoints/1/scriptruns -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/endpoints/adoptiontool/package", "auth": "permission:endpoints.agentpackage", "params": "body: JSON (fields not yet documented)", "purpose": "Bundle the adoption tool as a downloadable ZIP.", "example": "curl -X POST http://localhost:5001/api/endpoints/adoptiontool/package -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/endpoints/agentkey", "auth": "jwt + role:admin", "params": "not documented", "purpose": "Revoke the endpoint agent key: stop all managed-token endpoint traffic.", "example": "curl -X DELETE http://localhost:5001/api/endpoints/agentkey -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/agentkey", "auth": "jwt + role:admin", "params": "not documented", "purpose": "Report the endpoint agent key state (no secret).", "example": "curl http://localhost:5001/api/endpoints/agentkey -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/endpoints/agentkey/regenerate", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Mint a fresh endpoint agent key, revoking any previous one.", "example": "curl -X POST http://localhost:5001/api/endpoints/agentkey/regenerate -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/endpoints/alerts", "auth": "api-key (endpoint agent credential, or the fleet key while sharedkeyallowed is on)", "params": "not documented", "purpose": "Fleet alerts for one endpoint by hostname (collector-token auth).", "example": "curl http://localhost:5001/api/endpoints/alerts -H \"X-API-Key: $KEY\"" }, { "method": "POST", "path": "/api/endpoints/alerts//acknowledge", "auth": "api-key (endpoint agent credential, or the fleet key while sharedkeyallowed is on)", "params": "path: notification_id (int); body: JSON (fields not yet documented)", "purpose": "Agent acknowledges a fleet alert (collector-token auth).", "example": "curl -X POST http://localhost:5001/api/endpoints/alerts/1/acknowledge -H \"X-API-Key: $KEY\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/endpoints/apppackage/", "auth": "api-key (endpoint agent credential, or the fleet key while sharedkeyallowed is on)", "params": "path: appversionid (int)", "purpose": "Agent-facing installer download (collector-token auth).", "example": "curl http://localhost:5001/api/endpoints/apppackage/1 -H \"X-API-Key: $KEY\"" }, { "method": "GET", "path": "/api/endpoints/apppackage/app/", "auth": "api-key (endpoint agent credential, or the fleet key while sharedkeyallowed is on)", "params": "path: app_id (int)", "purpose": "Agent-facing installer download by APP (collector-token auth).", "example": "curl http://localhost:5001/api/endpoints/apppackage/app/1 -H \"X-API-Key: $KEY\"" }, { "method": "GET", "path": "/api/endpoints/apppackage/app//", "auth": "api-key (endpoint agent credential, or the fleet key while sharedkeyallowed is on)", "params": "path: app_id (int), filename (path)", "purpose": "Agent-facing installer download by APP (collector-token auth).", "example": "curl http://localhost:5001/api/endpoints/apppackage/app/1/example.png -H \"X-API-Key: $KEY\"" }, { "method": "GET", "path": "/api/endpoints/asset//activity", "auth": "permission:endpoints.view", "params": "path: asset_id (int)", "purpose": "List panel: one chronological feed of what happened to this endpoint.", "example": "curl http://localhost:5001/api/endpoints/asset/1/activity -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/asset//applications", "auth": "permission:endpoints.view", "params": "path: asset_id (int)", "purpose": "Table panel: the installed-software (SBOM) snapshot for this endpoint.", "example": "curl http://localhost:5001/api/endpoints/asset/1/applications -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/asset//diskhealth", "auth": "permission:endpoints.view", "params": "path: asset_id (int)", "purpose": "Physical drive health rows.", "example": "curl http://localhost:5001/api/endpoints/asset/1/diskhealth -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/asset//hardware", "auth": "permission:endpoints.view", "params": "path: asset_id (int)", "purpose": "Keyvalue panel: processor, memory and system chassis inventory.", "example": "curl http://localhost:5001/api/endpoints/asset/1/hardware -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/asset//interfaces", "auth": "permission:endpoints.view", "params": "path: asset_id (int)", "purpose": "Table panel: every hardware NIC the agent last reported.", "example": "curl http://localhost:5001/api/endpoints/asset/1/interfaces -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/asset//iphistory", "auth": "permission:endpoints.view", "params": "path: asset_id (int)", "purpose": "Table panel: every address this asset has held, newest change first.", "example": "curl http://localhost:5001/api/endpoints/asset/1/iphistory -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/asset//listeners", "auth": "permission:endpoints.view", "params": "path: asset_id (int)", "purpose": "Table panel: TCP sockets in LISTEN, with the owning process.", "example": "curl http://localhost:5001/api/endpoints/asset/1/listeners -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/asset//mappeddrives", "auth": "permission:endpoints.view", "params": "path: asset_id (int)", "purpose": "List panel: mapped network drives with a health badge each.", "example": "curl http://localhost:5001/api/endpoints/asset/1/mappeddrives -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/asset//osinfo", "auth": "permission:endpoints.view", "params": "path: asset_id (int)", "purpose": "Keyvalue panel: operating system, firmware and domain membership.", "example": "curl http://localhost:5001/api/endpoints/asset/1/osinfo -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/asset//recentevents", "auth": "permission:endpoints.view", "params": "path: asset_id (int)", "purpose": "List panel: the endpoint's most recent curated events, newest first.", "example": "curl http://localhost:5001/api/endpoints/asset/1/recentevents -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/asset//services", "auth": "permission:endpoints.view", "params": "path: asset_id (int)", "purpose": "List panel: monitored services/processes with a run-state badge per row.", "example": "curl http://localhost:5001/api/endpoints/asset/1/services -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/asset//status", "auth": "permission:endpoints.view", "params": "path: asset_id (int)", "purpose": "Keyvalue panel: the endpoint's current status snapshot.", "example": "curl http://localhost:5001/api/endpoints/asset/1/status -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/asset//storage", "auth": "permission:endpoints.view", "params": "path: asset_id (int)", "purpose": "Tabs panel: volume capacity and physical drive health as two sections.", "example": "curl http://localhost:5001/api/endpoints/asset/1/storage -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/asset//telemetrymeta", "auth": "permission:endpoints.view", "params": "path: asset_id (int)", "purpose": "Lightweight freshness probe for the panels.", "example": "curl http://localhost:5001/api/endpoints/asset/1/telemetrymeta -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/asset//usercontext", "auth": "permission:endpoints.view", "params": "path: asset_id (int)", "purpose": "Keyvalue panel: session-scoped data from the interactive user probe.", "example": "curl http://localhost:5001/api/endpoints/asset/1/usercontext -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/endpoints/collect", "auth": "api-key (endpoints collector token)", "params": "body: JSON (fields not yet documented)", "purpose": "Agent telemetry ingest. Same handler as POST /api/collector/endpoints.", "example": "curl -X POST http://localhost:5001/api/endpoints/collect -H \"X-API-Key: $KEY\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/endpoints/commands//result", "auth": "api-key (endpoint agent credential, or the fleet key while sharedkeyallowed is on)", "params": "path: command_id (int); body: JSON (fields not yet documented)", "purpose": "Agent reports a claimed command's outcome (collector-token auth).", "example": "curl -X POST http://localhost:5001/api/endpoints/commands/1/result -H \"X-API-Key: $KEY\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/endpoints/commands/next", "auth": "api-key (endpoint agent credential, or the fleet key while sharedkeyallowed is on)", "params": "not documented", "purpose": "Agent long-poll: claim the next pending command for a hostname.", "example": "curl http://localhost:5001/api/endpoints/commands/next -H \"X-API-Key: $KEY\"" }, { "method": "GET", "path": "/api/endpoints/dashboard/enrollmentpending", "auth": "permission:endpoints.fleet", "params": "not documented", "purpose": "One queue row while enroll requests wait for an admin, else nothing.", "example": "curl http://localhost:5001/api/endpoints/dashboard/enrollmentpending -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/dashboard/quiet", "auth": "permission:endpoints.fleet", "params": "not documented", "purpose": "Endpoints that reported before, then went quiet past the window.", "example": "curl http://localhost:5001/api/endpoints/dashboard/quiet -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/dashboard/reenrollblocked", "auth": "permission:endpoints.fleet", "params": "not documented", "purpose": "PCs kept from re-enrolling for more than 7 days.", "example": "curl http://localhost:5001/api/endpoints/dashboard/reenrollblocked -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/dashboard/stability", "auth": "permission:endpoints.fleet", "params": "not documented", "purpose": "Endpoints with recent crash/shutdown/corruption events.", "example": "curl http://localhost:5001/api/endpoints/dashboard/stability -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/dashboard/summary", "auth": "permission:endpoints.fleet", "params": "not documented", "purpose": "High-level fleet counts for the endpoints dashboard.", "example": "curl http://localhost:5001/api/endpoints/dashboard/summary -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/endpoints/enroll", "auth": "none (per-IP rate limited and capped; a valid fleet key only decides auto-enroll)", "params": "body: JSON (fields not yet documented)", "purpose": "A PC asks for its own credential.", "example": "curl -X POST http://localhost:5001/api/endpoints/enroll -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/endpoints/enrollment", "auth": "permission:endpoints.fleet", "params": "not documented", "purpose": "Credential state of every computer, plus pending and recent requests.", "example": "curl http://localhost:5001/api/endpoints/enrollment -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/endpoints/enrollment/assets//allow-reenroll", "auth": "jwt + role:admin", "params": "path: assetid (int); body: JSON (fields not yet documented)", "purpose": "Lift a re-enrollment block. The PC enrolls on its next attempt.", "example": "curl -X POST http://localhost:5001/api/endpoints/enrollment/assets/1/allow-reenroll -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/endpoints/enrollment/assets//revoke", "auth": "jwt + role:admin", "params": "path: assetid (int); body: JSON (fields not yet documented)", "purpose": "Un-enroll a PC. Its agent gets CREDENTIAL_INVALID and enrolls again.", "example": "curl -X POST http://localhost:5001/api/endpoints/enrollment/assets/1/revoke -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/endpoints/enrollment/migration", "auth": "permission:endpoints.fleet", "params": "not documented", "purpose": "Per-computer readiness to move onto per-PC credentials, plus waves.", "example": "curl http://localhost:5001/api/endpoints/enrollment/migration -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/endpoints/enrollment/migration/wave", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Push the agent upgrade to a batch of READY PCs.", "example": "curl -X POST http://localhost:5001/api/endpoints/enrollment/migration/wave -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/endpoints/enrollment/requests//approve", "auth": "jwt + role:admin", "params": "path: requestid (int); body: JSON (fields not yet documented)", "purpose": "Bind a pending request to the asset the admin picked.", "example": "curl -X POST http://localhost:5001/api/endpoints/enrollment/requests/1/approve -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/endpoints/enrollment/requests//reject", "auth": "jwt + role:admin", "params": "path: requestid (int); body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: endpoints.reject_enroll_request has no docstring.", "example": "curl -X POST http://localhost:5001/api/endpoints/enrollment/requests/1/reject -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "PUT", "path": "/api/endpoints/enrollment/settings", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Change the enrollment settings.", "example": "curl -X PUT http://localhost:5001/api/endpoints/enrollment/settings -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/endpoints/logcollections/", "auth": "permission:endpoints.updateapp", "params": "path: collection_id (int)", "purpose": "One collected log including its content, for the scrollable pane.", "example": "curl http://localhost:5001/api/endpoints/logcollections/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/logcollections//download", "auth": "permission:endpoints.updateapp", "params": "path: collection_id (int)", "purpose": "Serve a collected log as a file attachment.", "example": "curl http://localhost:5001/api/endpoints/logcollections/1/download -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/monitors", "auth": "permission:endpoints.view", "params": "not documented", "purpose": "List monitor definitions (shipped and local).", "example": "curl http://localhost:5001/api/endpoints/monitors -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/endpoints/monitors", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Create a user-defined (local) monitor definition.", "example": "curl -X POST http://localhost:5001/api/endpoints/monitors -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/endpoints/monitors/", "auth": "jwt + role:admin", "params": "path: monitor_id (int)", "purpose": "Delete a local monitor definition. Shipped rows are protected.", "example": "curl -X DELETE http://localhost:5001/api/endpoints/monitors/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/endpoints/monitors/", "auth": "jwt + role:admin", "params": "path: monitor_id (int); body: JSON (fields not yet documented)", "purpose": "Update a local monitor definition. Shipped rows are read-only.", "example": "curl -X PUT http://localhost:5001/api/endpoints/monitors/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/endpoints/monitors/resolve", "auth": "permission:endpoints.view", "params": "not documented", "purpose": "Resolve the monitor set for a PC type (agent runtime fetch).", "example": "curl http://localhost:5001/api/endpoints/monitors/resolve -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/monitors/resolved", "auth": "api-key (endpoint agent credential, or the fleet key while sharedkeyallowed is on)", "params": "not documented", "purpose": "Agent watch list: the monitors this endpoint should report on.", "example": "curl http://localhost:5001/api/endpoints/monitors/resolved -H \"X-API-Key: $KEY\"" }, { "method": "POST", "path": "/api/endpoints/operatorreports", "auth": "api-key (endpoint agent credential, or the fleet key while sharedkeyallowed is on)", "params": "body: JSON (fields not yet documented)", "purpose": "Agent uploads one operator issue report (collector-token auth).", "example": "curl -X POST http://localhost:5001/api/endpoints/operatorreports -H \"X-API-Key: $KEY\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/endpoints/operatorreports//image", "auth": "permission:endpoints.operatorreports", "params": "path: operatorreportid (int)", "purpose": "Serve one operator report's screenshot.", "example": "curl http://localhost:5001/api/endpoints/operatorreports/1/image -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/panel//operatorreports", "auth": "permission:endpoints.operatorreports", "params": "path: asset_id (int)", "purpose": "Operator Reports panel: this PC's recent operator issue reports.", "example": "curl http://localhost:5001/api/endpoints/panel/1/operatorreports -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/scriptbody/", "auth": "api-key (endpoint agent credential, or the fleet key while sharedkeyallowed is on)", "params": "path: script_id (int)", "purpose": "Agent-facing script body download (collector-token auth).", "example": "curl http://localhost:5001/api/endpoints/scriptbody/1 -H \"X-API-Key: $KEY\"" }, { "method": "GET", "path": "/api/endpoints/settings/server-cert", "auth": "jwt + role:admin", "params": "not documented", "purpose": "Get details about the current server certificate.", "example": "curl http://localhost:5001/api/endpoints/settings/server-cert -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/settings/server-cert/download", "auth": "permission:endpoints.fleet", "params": "not documented", "purpose": "The PUBLIC server certificate as a DER .cer file, never the key.", "example": "curl http://localhost:5001/api/endpoints/settings/server-cert/download -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/endpoints/settings/server-cert/generate", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Generate a new self-signed server certificate.", "example": "curl -X POST http://localhost:5001/api/endpoints/settings/server-cert/generate -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/endpoints/settings/server-cert/live", "auth": "permission:endpoints.fleet", "params": "not documented", "purpose": "The certificate PCs actually receive from this site's public address.", "example": "curl http://localhost:5001/api/endpoints/settings/server-cert/live -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/endpoints/settings/server-cert/upload", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Upload a new server certificate and private key.", "example": "curl -X POST http://localhost:5001/api/endpoints/settings/server-cert/upload -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/endpoints/siteagent", "auth": "permission:endpoints.agentpackage", "params": "not documented", "purpose": "Report whether the site agent build has a prebuilt binary staged.", "example": "curl http://localhost:5001/api/endpoints/siteagent -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/endpoints/siteagent/binaries/", "auth": "permission:endpoints.agentpackage", "params": "path: binkey (string)", "purpose": "List staged versions for a binary (agent or tray), newest first.", "example": "curl http://localhost:5001/api/endpoints/siteagent/binaries/x -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/endpoints/siteagent/binaries/", "auth": "permission:endpoints.agentpackage", "params": "path: binkey (string); body: JSON (fields not yet documented)", "purpose": "Stage an uploaded binary as a new version.", "example": "curl -X POST http://localhost:5001/api/endpoints/siteagent/binaries/x -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/endpoints/siteagent/binaries//adopt", "auth": "permission:endpoints.agentpackage", "params": "path: binkey (string); body: JSON (fields not yet documented)", "purpose": "Adopt the unmanaged legacy flat file into the version store.", "example": "curl -X POST http://localhost:5001/api/endpoints/siteagent/binaries/x/adopt -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "PUT", "path": "/api/endpoints/siteagent/binaries//current", "auth": "permission:endpoints.agentpackage", "params": "path: binkey (string); body: JSON (fields not yet documented)", "purpose": "Point 'current' at an already-staged version (roll back or forward).", "example": "curl -X PUT http://localhost:5001/api/endpoints/siteagent/binaries/x/current -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/endpoints/siteagent/binaries//detect", "auth": "permission:endpoints.agentpackage", "params": "path: binkey (string); body: JSON (fields not yet documented)", "purpose": "Read the PE file version of an uploaded EXE without staging it.", "example": "curl -X POST http://localhost:5001/api/endpoints/siteagent/binaries/x/detect -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/endpoints/siteagent/bootstrap.ps1", "auth": "api-key (single-use bootstrap token in the X-Endpoint-Bootstrap-Token header, or ?t= while that is enabled; per-IP rate limited, 404 when not usable)", "params": "not documented", "purpose": "The PowerShell the one-line command downloads, runs and deletes.", "example": "curl http://localhost:5001/api/endpoints/siteagent/bootstrap.ps1" }, { "method": "GET", "path": "/api/endpoints/siteagent/bootstrap/package", "auth": "api-key (single-use bootstrap token in the X-Endpoint-Bootstrap-Token header, or ?t= while that is enabled; per-IP rate limited, 404 when not usable)", "params": "not documented", "purpose": "The keyless agent package the bootstrap script installs.", "example": "curl http://localhost:5001/api/endpoints/siteagent/bootstrap/package" }, { "method": "GET", "path": "/api/endpoints/siteagent/bootstrap/tokens", "auth": "jwt + role:admin", "params": "not documented", "purpose": "Every bootstrap token, newest first. Never a secret.", "example": "curl http://localhost:5001/api/endpoints/siteagent/bootstrap/tokens -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/endpoints/siteagent/bootstrap/tokens", "auth": "jwt + role:admin", "params": "body: JSON (fields not yet documented)", "purpose": "Mint one short-lived bootstrap token. The secret is returned ONCE.", "example": "curl -X POST http://localhost:5001/api/endpoints/siteagent/bootstrap/tokens -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/endpoints/siteagent/bootstrap/tokens//revoke", "auth": "jwt + role:admin", "params": "path: tokenid (int); body: JSON (fields not yet documented)", "purpose": "Kill a bootstrap token now. Already-revoked is a no-op, not an error.", "example": "curl -X POST http://localhost:5001/api/endpoints/siteagent/bootstrap/tokens/1/revoke -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/endpoints/siteagent/package", "auth": "permission:endpoints.agentpackage", "params": "body: JSON (fields not yet documented)", "purpose": "Bundle the site agent as a downloadable ZIP.", "example": "curl -X POST http://localhost:5001/api/endpoints/siteagent/package -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" } ] }, { "surface": "plugin-geenforce", "endpoints": [ { "method": "GET", "path": "/api/geenforce/applications", "auth": "permission:geenforce.view or geenforce.manage", "params": "not documented", "purpose": "The core Applications catalog (id + name) for the curated entry->app link picker in the entry editor.", "example": "curl http://localhost:5001/api/geenforce/applications -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/geenforce/config", "auth": "permission:geenforce.view or geenforce.manage", "params": "not documented", "purpose": "Plugin config: the on-share export root + the client IP allowlist.", "example": "curl http://localhost:5001/api/geenforce/config -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/geenforce/config", "auth": "permission:geenforce.publish", "params": "body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: geenforce.put_config has no docstring.", "example": "curl -X PUT http://localhost:5001/api/geenforce/config -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/geenforce/dashboard/failures", "auth": "permission:geenforce.view or geenforce.manage", "params": "not documented", "purpose": "Entries that FAILED on their PC's most recent enforcement cycle.", "example": "curl http://localhost:5001/api/geenforce/dashboard/failures -H \"Authorization: Bearer $TOK\"" }, { "method": "DELETE", "path": "/api/geenforce/entries/", "auth": "permission:geenforce.manage", "params": "path: entryid (int)", "purpose": "UNDOCUMENTED: geenforce.delete_entry has no docstring.", "example": "curl -X DELETE http://localhost:5001/api/geenforce/entries/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/geenforce/entries/", "auth": "permission:geenforce.manage", "params": "path: entryid (int); body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: geenforce.update_entry has no docstring.", "example": "curl -X PUT http://localhost:5001/api/geenforce/entries/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/geenforce/entries//payload", "auth": "permission:geenforce.view or geenforce.manage", "params": "path: entryid (int)", "purpose": "Return the stored inline payload bytes for an entry (404 if none).", "example": "curl http://localhost:5001/api/geenforce/entries/1/payload -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/geenforce/entries//payload", "auth": "permission:geenforce.publish", "params": "path: entryid (int); body: JSON (fields not yet documented)", "purpose": "Store an inline payload (<= 1 MB) for an entry and point the entry at it.", "example": "curl -X POST http://localhost:5001/api/geenforce/entries/1/payload -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/geenforce/manifest", "auth": "api-key (geenforce fetch token, or the IP allowlist)", "params": "not documented", "purpose": "Serve the current published manifest for a scope (fat-client: full scope).", "example": "curl http://localhost:5001/api/geenforce/manifest -H \"X-API-Key: $KEY\"" }, { "method": "GET", "path": "/api/geenforce/payload/", "auth": "api-key (geenforce fetch token, or the IP allowlist)", "params": "path: sha256 (string)", "purpose": "Serve a payload blob by content hash over HTTPS.", "example": "curl http://localhost:5001/api/geenforce/payload/x -H \"X-API-Key: $KEY\"" }, { "method": "POST", "path": "/api/geenforce/report", "auth": "api-key (geenforce report token)", "params": "body: JSON (fields not yet documented)", "purpose": "Record one PC's enforcement cycle: applied version (did it receive the update?) + per-entry self-heal outcomes (installed/skipped/failed).", "example": "curl -X POST http://localhost:5001/api/geenforce/report -H \"X-API-Key: $KEY\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/geenforce/reports", "auth": "permission:geenforce.view or geenforce.manage", "params": "not documented", "purpose": "Latest enforcement report per PC (fleet compliance view).", "example": "curl http://localhost:5001/api/geenforce/reports -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/geenforce/reports/", "auth": "permission:geenforce.view or geenforce.manage", "params": "path: reportid (int)", "purpose": "One report with per-entry outcomes (self-heal / failure detail).", "example": "curl http://localhost:5001/api/geenforce/reports/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/geenforce/scopes", "auth": "permission:geenforce.view or geenforce.manage", "params": "not documented", "purpose": "List imaging PC-type scopes with entry + published-version counts.", "example": "curl http://localhost:5001/api/geenforce/scopes -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/geenforce/scopes", "auth": "permission:geenforce.manage", "params": "body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: geenforce.create_scope has no docstring.", "example": "curl -X POST http://localhost:5001/api/geenforce/scopes -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/geenforce/scopes/", "auth": "permission:geenforce.manage", "params": "path: scopeid (int)", "purpose": "UNDOCUMENTED: geenforce.delete_scope has no docstring.", "example": "curl -X DELETE http://localhost:5001/api/geenforce/scopes/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/geenforce/scopes/", "auth": "permission:geenforce.view or geenforce.manage", "params": "path: scopeid (int)", "purpose": "UNDOCUMENTED: geenforce.get_scope has no docstring.", "example": "curl http://localhost:5001/api/geenforce/scopes/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/geenforce/scopes/", "auth": "permission:geenforce.manage", "params": "path: scopeid (int); body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: geenforce.update_scope has no docstring.", "example": "curl -X PUT http://localhost:5001/api/geenforce/scopes/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/geenforce/scopes//compliance", "auth": "permission:geenforce.view or geenforce.manage", "params": "path: scopeid (int)", "purpose": "Fleet-install coverage per app-linked entry (from collected PC data).", "example": "curl http://localhost:5001/api/geenforce/scopes/1/compliance -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/geenforce/scopes//entries", "auth": "permission:geenforce.manage", "params": "path: scopeid (int); body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: geenforce.create_entry has no docstring.", "example": "curl -X POST http://localhost:5001/api/geenforce/scopes/1/entries -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "PUT", "path": "/api/geenforce/scopes//entries/reorder", "auth": "permission:geenforce.manage", "params": "path: scopeid (int); body: JSON (fields not yet documented)", "purpose": "Set entry order from a list of entryids (the ordering contract).", "example": "curl -X PUT http://localhost:5001/api/geenforce/scopes/1/entries/reorder -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/geenforce/scopes//export-share", "auth": "permission:geenforce.publish", "params": "path: scopeid (int); body: JSON (fields not yet documented)", "purpose": "Write the scope's current published JSON to the configured share root (backing up the old file to _meta/history first).", "example": "curl -X POST http://localhost:5001/api/geenforce/scopes/1/export-share -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/geenforce/scopes//preview", "auth": "permission:geenforce.view or geenforce.manage", "params": "path: scopeid (int)", "purpose": "Render the DRAFT manifest JSON a publish would freeze (review before ship).", "example": "curl http://localhost:5001/api/geenforce/scopes/1/preview -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/geenforce/scopes//publish", "auth": "permission:geenforce.publish", "params": "path: scopeid (int); body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: geenforce.publish_scope_route has no docstring.", "example": "curl -X POST http://localhost:5001/api/geenforce/scopes/1/publish -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/geenforce/scopes//publish-preflight", "auth": "permission:geenforce.view or geenforce.manage", "params": "path: scopeid (int)", "purpose": "Would publishing this scope outrun the fleet's enforcer lib?", "example": "curl http://localhost:5001/api/geenforce/scopes/1/publish-preflight -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/geenforce/scopes//rollback", "auth": "permission:geenforce.publish", "params": "path: scopeid (int); body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: geenforce.rollback_scope_route has no docstring.", "example": "curl -X POST http://localhost:5001/api/geenforce/scopes/1/rollback -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/geenforce/scopes//simulate", "auth": "permission:geenforce.view or geenforce.manage", "params": "path: scopeid (int)", "purpose": "Which draft entries apply to a given machine profile, and why the rest are filtered out (reuses the engine-mirror filters).", "example": "curl http://localhost:5001/api/geenforce/scopes/1/simulate -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/geenforce/scopes//versions", "auth": "permission:geenforce.view or geenforce.manage", "params": "path: scopeid (int)", "purpose": "UNDOCUMENTED: geenforce.list_versions has no docstring.", "example": "curl http://localhost:5001/api/geenforce/scopes/1/versions -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/geenforce/scopes//versions/", "auth": "permission:geenforce.view or geenforce.manage", "params": "path: scopeid (int), versionnumber (int)", "purpose": "UNDOCUMENTED: geenforce.get_version has no docstring.", "example": "curl http://localhost:5001/api/geenforce/scopes/1/versions/1 -H \"Authorization: Bearer $TOK\"" } ] }, { "surface": "plugin-guides", "endpoints": [ { "method": "GET", "path": "/api/guides", "auth": "permission:guides.view", "params": "not documented", "purpose": "Published guides, plus the caller's own drafts if they can author.", "example": "curl http://localhost:5001/api/guides -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/guides", "auth": "permission:guides.create", "params": "body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: guides.create_guide has no docstring.", "example": "curl -X POST http://localhost:5001/api/guides -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/guides/", "auth": "permission:guides.delete", "params": "path: guideid (int)", "purpose": "UNDOCUMENTED: guides.delete_guide has no docstring.", "example": "curl -X DELETE http://localhost:5001/api/guides/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/guides/", "auth": "permission:guides.view", "params": "path: guideid (int); body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: guides.update_guide has no docstring.", "example": "curl -X PUT http://localhost:5001/api/guides/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/guides//publish", "auth": "permission:guides.publish", "params": "path: guideid (int); body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: guides.publish_guide has no docstring.", "example": "curl -X POST http://localhost:5001/api/guides/1/publish -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/guides//restore/", "auth": "permission:guides.view", "params": "path: guideid (int), revisionid (int); body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: guides.restore_revision has no docstring.", "example": "curl -X POST http://localhost:5001/api/guides/1/restore/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/guides//revisions", "auth": "permission:guides.view", "params": "path: guideid (int)", "purpose": "UNDOCUMENTED: guides.list_revisions has no docstring.", "example": "curl http://localhost:5001/api/guides/1/revisions -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/guides//unpublish", "auth": "permission:guides.publish", "params": "path: guideid (int); body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: guides.unpublish_guide has no docstring.", "example": "curl -X POST http://localhost:5001/api/guides/1/unpublish -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/guides//working", "auth": "permission:guides.view", "params": "path: guideid (int)", "purpose": "The working copy, for the editor.", "example": "curl http://localhost:5001/api/guides/1/working -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/guides/", "auth": "permission:guides.view", "params": "path: slug (string)", "purpose": "What a reader gets: the published revision.", "example": "curl http://localhost:5001/api/guides/x -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/guides/images", "auth": "permission:guides.create", "params": "body: JSON (fields not yet documented)", "purpose": "Take a pasted or dropped image.", "example": "curl -X POST http://localhost:5001/api/guides/images -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/guides/images/", "auth": "permission:guides.view", "params": "path: imageid (int)", "purpose": "The image itself, under the same rule as the guide that holds it.", "example": "curl http://localhost:5001/api/guides/images/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/guides/revisions/", "auth": "permission:guides.view", "params": "path: revisionid (int)", "purpose": "One revision by id.", "example": "curl http://localhost:5001/api/guides/revisions/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/guides/tags", "auth": "permission:guides.view", "params": "not documented", "purpose": "Every tag in use, with a count, for the filter chips.", "example": "curl http://localhost:5001/api/guides/tags -H \"Authorization: Bearer $TOK\"" } ] }, { "surface": "plugin-knowledgebase", "endpoints": [ { "method": "GET", "path": "/api/knowledgebase", "auth": "permission:kb.view", "params": "not documented", "purpose": "List all knowledge base articles.", "example": "curl http://localhost:5001/api/knowledgebase -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/knowledgebase", "auth": "permission:kb.create", "params": "body: JSON (fields not yet documented)", "purpose": "Create a new knowledge base article.", "example": "curl -X POST http://localhost:5001/api/knowledgebase -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/knowledgebase/", "auth": "permission:kb.delete", "params": "path: link_id (int)", "purpose": "Delete (deactivate) a knowledge base article.", "example": "curl -X DELETE http://localhost:5001/api/knowledgebase/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/knowledgebase/", "auth": "permission:kb.view", "params": "path: link_id (int)", "purpose": "Get a single knowledge base article.", "example": "curl http://localhost:5001/api/knowledgebase/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/knowledgebase/", "auth": "permission:kb.edit", "params": "path: link_id (int); body: JSON (fields not yet documented)", "purpose": "Update a knowledge base article.", "example": "curl -X PUT http://localhost:5001/api/knowledgebase/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/knowledgebase//click", "auth": "permission:kb.view", "params": "path: link_id (int); body: JSON (fields not yet documented)", "purpose": "Increment the click counter for an article the caller is allowed to read.", "example": "curl -X POST http://localhost:5001/api/knowledgebase/1/click -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/knowledgebase/stats", "auth": "permission:kb.view", "params": "not documented", "purpose": "Get knowledge base statistics.", "example": "curl http://localhost:5001/api/knowledgebase/stats -H \"Authorization: Bearer $TOK\"" } ] }, { "surface": "plugin-machines", "endpoints": [ { "method": "GET", "path": "/api/machines", "auth": "permission:machines.view", "params": "not documented", "purpose": "List all machines with filtering and pagination.", "example": "curl http://localhost:5001/api/machines -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/machines", "auth": "permission:machines.create", "params": "body: JSON (fields not yet documented)", "purpose": "Create new machine (creates both Asset and Machine records).", "example": "curl -X POST http://localhost:5001/api/machines -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/machines/", "auth": "permission:machines.delete", "params": "path: machine_id (int)", "purpose": "Delete (soft delete) machine.", "example": "curl -X DELETE http://localhost:5001/api/machines/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/machines/", "auth": "permission:machines.view", "params": "path: machine_id (int)", "purpose": "Get a single machine item with full details.", "example": "curl http://localhost:5001/api/machines/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/machines/", "auth": "permission:machines.edit", "params": "path: machine_id (int); body: JSON (fields not yet documented)", "purpose": "Update machine (both Asset and Machine records).", "example": "curl -X PUT http://localhost:5001/api/machines/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/machines/by-asset/", "auth": "permission:machines.view", "params": "path: asset_id (int)", "purpose": "Get machine data by asset ID.", "example": "curl http://localhost:5001/api/machines/by-asset/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/machines/dashboard/outofservice", "auth": "permission:machines.view", "params": "not documented", "purpose": "Machines whose status says they are not running.", "example": "curl http://localhost:5001/api/machines/dashboard/outofservice -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/machines/dashboard/summary", "auth": "permission:machines.view", "params": "not documented", "purpose": "Get machine dashboard summary data.", "example": "curl http://localhost:5001/api/machines/dashboard/summary -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/machines/types", "auth": "permission:machines.view", "params": "not documented", "purpose": "List all machine types.", "example": "curl http://localhost:5001/api/machines/types -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/machines/types", "auth": "permission:machines.create", "params": "body: JSON (fields not yet documented)", "purpose": "Create a new machine type.", "example": "curl -X POST http://localhost:5001/api/machines/types -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/machines/types/", "auth": "permission:machines.delete", "params": "path: type_id (int)", "purpose": "Delete a machine type. Refused if any asset still uses it.", "example": "curl -X DELETE http://localhost:5001/api/machines/types/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/machines/types/", "auth": "permission:machines.view", "params": "path: type_id (int)", "purpose": "Get a single machine type.", "example": "curl http://localhost:5001/api/machines/types/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/machines/types/", "auth": "permission:machines.edit", "params": "path: type_id (int); body: JSON (fields not yet documented)", "purpose": "Update a machine type.", "example": "curl -X PUT http://localhost:5001/api/machines/types/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" } ] }, { "surface": "plugin-measuringtools", "endpoints": [ { "method": "GET", "path": "/api/measuringtools", "auth": "permission:measuringtools.view", "params": "not documented", "purpose": "List measuring tools with filters + pagination.", "example": "curl http://localhost:5001/api/measuringtools -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/measuringtools", "auth": "permission:measuringtools.create", "params": "body: JSON (fields not yet documented)", "purpose": "Create a measuring tool: one Asset core row + one extension row.", "example": "curl -X POST http://localhost:5001/api/measuringtools -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/measuringtools/", "auth": "permission:measuringtools.delete", "params": "path: tool_id (int)", "purpose": "Soft delete a measuring tool (deactivates its asset).", "example": "curl -X DELETE http://localhost:5001/api/measuringtools/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/measuringtools/", "auth": "permission:measuringtools.view", "params": "path: tool_id (int)", "purpose": "Get one measuring tool (asset core merged with the extension).", "example": "curl http://localhost:5001/api/measuringtools/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/measuringtools/", "auth": "permission:measuringtools.edit", "params": "path: tool_id (int); body: JSON (fields not yet documented)", "purpose": "Update a measuring tool (asset core fields + extension in one payload).", "example": "curl -X PUT http://localhost:5001/api/measuringtools/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/measuringtools/by-asset/", "auth": "permission:measuringtools.view", "params": "path: asset_id (int)", "purpose": "Get a measuring tool by its core asset id.", "example": "curl http://localhost:5001/api/measuringtools/by-asset/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/measuringtools/map-overlay", "auth": "permission:measuringtools.view", "params": "not documented", "purpose": "Calibration-status overlay for active measuring tools.", "example": "curl http://localhost:5001/api/measuringtools/map-overlay -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/measuringtools/report/calibration", "auth": "permission:measuringtools.view", "params": "not documented", "purpose": "Counts + lists bucketed by derived calibration status.", "example": "curl http://localhost:5001/api/measuringtools/report/calibration -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/measuringtools/types", "auth": "permission:measuringtools.view", "params": "not documented", "purpose": "List measuring-tool types.", "example": "curl http://localhost:5001/api/measuringtools/types -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/measuringtools/types", "auth": "permission:measuringtools.create", "params": "body: JSON (fields not yet documented)", "purpose": "Create a measuring-tool type (reactivates a soft-deleted same-named one).", "example": "curl -X POST http://localhost:5001/api/measuringtools/types -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/measuringtools/types/", "auth": "permission:measuringtools.delete", "params": "path: type_id (int)", "purpose": "Delete a measuring-tool type. Refused if any tool still uses it.", "example": "curl -X DELETE http://localhost:5001/api/measuringtools/types/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/measuringtools/types/", "auth": "permission:measuringtools.view", "params": "path: type_id (int)", "purpose": "Get one measuring-tool type.", "example": "curl http://localhost:5001/api/measuringtools/types/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/measuringtools/types/", "auth": "permission:measuringtools.edit", "params": "path: type_id (int); body: JSON (fields not yet documented)", "purpose": "Update a measuring-tool type.", "example": "curl -X PUT http://localhost:5001/api/measuringtools/types/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" } ] }, { "surface": "plugin-network", "endpoints": [ { "method": "GET", "path": "/api/network", "auth": "permission:network.view", "params": "not documented", "purpose": "List all network devices with filtering and pagination.", "example": "curl http://localhost:5001/api/network -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/network", "auth": "permission:network.create", "params": "body: JSON (fields not yet documented)", "purpose": "Create new network device (creates both Asset and NetworkDevice records).", "example": "curl -X POST http://localhost:5001/api/network -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/network/", "auth": "permission:network.delete", "params": "path: device_id (int)", "purpose": "Delete (soft delete) network device.", "example": "curl -X DELETE http://localhost:5001/api/network/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/network/", "auth": "permission:network.view", "params": "path: device_id (int)", "purpose": "Get a single network device with full details.", "example": "curl http://localhost:5001/api/network/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/network/", "auth": "permission:network.edit", "params": "path: device_id (int); body: JSON (fields not yet documented)", "purpose": "Update network device (both Asset and NetworkDevice records).", "example": "curl -X PUT http://localhost:5001/api/network/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/network/by-asset/", "auth": "permission:network.view", "params": "path: asset_id (int)", "purpose": "Get network device data by asset ID.", "example": "curl http://localhost:5001/api/network/by-asset/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/network/by-hostname/", "auth": "permission:network.view", "params": "path: hostname (string)", "purpose": "Get network device by hostname.", "example": "curl http://localhost:5001/api/network/by-hostname/x -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/network/dashboard/summary", "auth": "permission:network.view", "params": "not documented", "purpose": "Get network device dashboard summary data.", "example": "curl http://localhost:5001/api/network/dashboard/summary -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/network/subnets", "auth": "permission:network.view", "params": "not documented", "purpose": "List all subnets with filtering and pagination.", "example": "curl http://localhost:5001/api/network/subnets -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/network/subnets", "auth": "permission:network.create", "params": "body: JSON (fields not yet documented)", "purpose": "Create a new subnet.", "example": "curl -X POST http://localhost:5001/api/network/subnets -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/network/subnets/", "auth": "permission:network.delete", "params": "path: subnet_id (int)", "purpose": "Delete (soft delete) a subnet.", "example": "curl -X DELETE http://localhost:5001/api/network/subnets/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/network/subnets/", "auth": "permission:network.view", "params": "path: subnet_id (int)", "purpose": "Get a single subnet plus the network devices whose primary IP falls in its CIDR range.", "example": "curl http://localhost:5001/api/network/subnets/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/network/subnets/", "auth": "permission:network.edit", "params": "path: subnet_id (int); body: JSON (fields not yet documented)", "purpose": "Update a subnet.", "example": "curl -X PUT http://localhost:5001/api/network/subnets/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/network/types", "auth": "permission:network.view", "params": "not documented", "purpose": "List all network device types.", "example": "curl http://localhost:5001/api/network/types -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/network/types", "auth": "permission:network.create", "params": "body: JSON (fields not yet documented)", "purpose": "Create a new network device type.", "example": "curl -X POST http://localhost:5001/api/network/types -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/network/types/", "auth": "permission:network.delete", "params": "path: type_id (int)", "purpose": "Delete a network device type. Refused if any device still uses it.", "example": "curl -X DELETE http://localhost:5001/api/network/types/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/network/types/", "auth": "permission:network.view", "params": "path: type_id (int)", "purpose": "Get a single network device type.", "example": "curl http://localhost:5001/api/network/types/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/network/types/", "auth": "permission:network.edit", "params": "path: type_id (int); body: JSON (fields not yet documented)", "purpose": "Update a network device type.", "example": "curl -X PUT http://localhost:5001/api/network/types/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/network/vlans", "auth": "permission:network.view", "params": "not documented", "purpose": "List all VLANs with filtering and pagination.", "example": "curl http://localhost:5001/api/network/vlans -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/network/vlans", "auth": "permission:network.create", "params": "body: JSON (fields not yet documented)", "purpose": "Create a new VLAN.", "example": "curl -X POST http://localhost:5001/api/network/vlans -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/network/vlans/", "auth": "permission:network.delete", "params": "path: vlan_id (int)", "purpose": "Delete (soft delete) a VLAN.", "example": "curl -X DELETE http://localhost:5001/api/network/vlans/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/network/vlans/", "auth": "permission:network.view", "params": "path: vlan_id (int)", "purpose": "Get a single VLAN with its subnets.", "example": "curl http://localhost:5001/api/network/vlans/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/network/vlans/", "auth": "permission:network.edit", "params": "path: vlan_id (int); body: JSON (fields not yet documented)", "purpose": "Update a VLAN.", "example": "curl -X PUT http://localhost:5001/api/network/vlans/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" } ] }, { "surface": "plugin-notifications", "endpoints": [ { "method": "GET", "path": "/api/notifications", "auth": "permission:notifications.view", "params": "not documented", "purpose": "List all notifications with filtering and pagination.", "example": "curl http://localhost:5001/api/notifications -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/notifications", "auth": "permission:notifications.create", "params": "body: JSON (fields not yet documented)", "purpose": "Create a new notification.", "example": "curl -X POST http://localhost:5001/api/notifications -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/notifications/", "auth": "permission:notifications.delete", "params": "path: notification_id (int)", "purpose": "Delete (soft delete) a notification.", "example": "curl -X DELETE http://localhost:5001/api/notifications/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/notifications/", "auth": "permission:notifications.view", "params": "path: notification_id (int)", "purpose": "Get a single notification.", "example": "curl http://localhost:5001/api/notifications/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/notifications/", "auth": "permission:notifications.edit", "params": "path: notification_id (int); body: JSON (fields not yet documented)", "purpose": "Update a notification.", "example": "curl -X PUT http://localhost:5001/api/notifications/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/notifications/active", "auth": "permission:notifications.view", "params": "not documented", "purpose": "Get currently active notifications for display.", "example": "curl http://localhost:5001/api/notifications/active -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/notifications/calendar", "auth": "permission:notifications.view", "params": "not documented", "purpose": "Get notifications in FullCalendar event format.", "example": "curl http://localhost:5001/api/notifications/calendar -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/notifications/dashboard/active", "auth": "permission:notifications.view", "params": "not documented", "purpose": "Notifications currently showing on the floor.", "example": "curl http://localhost:5001/api/notifications/dashboard/active -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/notifications/dashboard/summary", "auth": "permission:notifications.view", "params": "not documented", "purpose": "Get notifications dashboard summary.", "example": "curl http://localhost:5001/api/notifications/dashboard/summary -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/notifications/employee/", "auth": "none (reviewed: named in the public-read or mutation sweep)", "params": "path: sso (string)", "purpose": "Get recognitions for a specific employee by SSO.", "example": "curl http://localhost:5001/api/notifications/employee/x" }, { "method": "GET", "path": "/api/notifications/shopfloor", "auth": "none (reviewed: named in the public-read or mutation sweep)", "params": "not documented", "purpose": "Get notifications for shopfloor TV dashboard.", "example": "curl http://localhost:5001/api/notifications/shopfloor" }, { "method": "GET", "path": "/api/notifications/types", "auth": "permission:notifications.view", "params": "not documented", "purpose": "List all notification types.", "example": "curl http://localhost:5001/api/notifications/types -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/notifications/types", "auth": "permission:notifications.create", "params": "body: JSON (fields not yet documented)", "purpose": "Create a new notification type.", "example": "curl -X POST http://localhost:5001/api/notifications/types -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "PATCH|PUT", "path": "/api/notifications/types/", "auth": "permission:notifications.create", "params": "path: type_id (int); body: JSON (fields not yet documented)", "purpose": "Update a notification type, including its auto-expiry rule.", "example": "curl -X PATCH http://localhost:5001/api/notifications/types/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" } ] }, { "surface": "plugin-printedparts", "endpoints": [ { "method": "DELETE", "path": "/api/printedparts/files/", "auth": "permission:printedparts.delete", "params": "path: file_id (int)", "purpose": "Remove a bad revision (wrong file uploaded). History otherwise stays.", "example": "curl -X DELETE http://localhost:5001/api/printedparts/files/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/printedparts/files//download", "auth": "permission:printedparts.view", "params": "path: file_id (int)", "purpose": "Download a revision under its original filename.", "example": "curl http://localhost:5001/api/printedparts/files/1/download -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/printedparts/image/", "auth": "none (reviewed: named in the public-read or mutation sweep)", "params": "path: filename (path)", "purpose": "Serve an uploaded item image (public - kiosk and list read it).", "example": "curl http://localhost:5001/api/printedparts/image/example.png" }, { "method": "GET", "path": "/api/printedparts/items", "auth": "permission:printedparts.view", "params": "not documented", "purpose": "List printed items, paginated; search + low-stock filter.", "example": "curl http://localhost:5001/api/printedparts/items -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/printedparts/items", "auth": "permission:printedparts.create", "params": "body: JSON (fields not yet documented)", "purpose": "Create a printed item.", "example": "curl -X POST http://localhost:5001/api/printedparts/items -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/printedparts/items/", "auth": "permission:printedparts.delete", "params": "path: item_id (int)", "purpose": "Soft-retire an item; its ledger history stays.", "example": "curl -X DELETE http://localhost:5001/api/printedparts/items/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/printedparts/items/", "auth": "permission:printedparts.view", "params": "path: item_id (int)", "purpose": "Get one printed item with its recent transactions.", "example": "curl http://localhost:5001/api/printedparts/items/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/printedparts/items/", "auth": "permission:printedparts.edit", "params": "path: item_id (int); body: JSON (fields not yet documented)", "purpose": "Update catalog fields. Quantity moves ONLY through the ledger.", "example": "curl -X PUT http://localhost:5001/api/printedparts/items/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/printedparts/items//adjust", "auth": "permission:printedparts.restock", "params": "path: item_id (int); body: JSON (fields not yet documented)", "purpose": "Correct the count (damage, recount). Body: {quantitychange, reason, badge}.", "example": "curl -X POST http://localhost:5001/api/printedparts/items/1/adjust -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/printedparts/items//files", "auth": "permission:printedparts.view", "params": "path: item_id (int)", "purpose": "Revision history, newest first.", "example": "curl http://localhost:5001/api/printedparts/items/1/files -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/printedparts/items//files", "auth": "permission:printedparts.edit", "params": "path: item_id (int); body: JSON (fields not yet documented)", "purpose": "Upload the next revision of the item's print file.", "example": "curl -X POST http://localhost:5001/api/printedparts/items/1/files -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/printedparts/items//image", "auth": "permission:printedparts.delete", "params": "path: item_id (int)", "purpose": "Clear an item image; delete the file only if this plugin owns it.", "example": "curl -X DELETE http://localhost:5001/api/printedparts/items/1/image -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/printedparts/items//image", "auth": "permission:printedparts.edit", "params": "path: item_id (int); body: JSON (fields not yet documented)", "purpose": "Upload (or replace) the photo for an item (multipart file=).", "example": "curl -X POST http://localhost:5001/api/printedparts/items/1/image -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/printedparts/items//restock", "auth": "permission:printedparts.restock", "params": "path: item_id (int); body: JSON (fields not yet documented)", "purpose": "Add freshly printed stock. Body: {quantity, badge}.", "example": "curl -X POST http://localhost:5001/api/printedparts/items/1/restock -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/printedparts/items//restore", "auth": "permission:printedparts.delete", "params": "path: item_id (int); body: JSON (fields not yet documented)", "purpose": "Bring a retired item back; code, photo, and history are intact.", "example": "curl -X POST http://localhost:5001/api/printedparts/items/1/restore -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/printedparts/kiosk/item/", "auth": "api-key-optional (kiosk: the per-device token in the X-Kiosk-Token header, OR a caller address inside the site's kiosk CIDR allowlist - an allowlisted caller sends no credential; 404 while the site's kiosk flag is off)", "params": "path: itemcode (string)", "purpose": "Item summary for a scanned bin barcode. Kiosk-token gated.", "example": "curl http://localhost:5001/api/printedparts/kiosk/item/x" }, { "method": "GET", "path": "/api/printedparts/kiosk/provisioning-link", "auth": "permission:settings.edit", "params": "not documented", "purpose": "The URL that provisions a screen, token included, for an administrator.", "example": "curl http://localhost:5001/api/printedparts/kiosk/provisioning-link -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/printedparts/kiosk/take", "auth": "api-key-optional (kiosk: the per-device token in the X-Kiosk-Token header, OR a caller address inside the site's kiosk CIDR allowlist - an allowlisted caller sends no credential; 404 while the site's kiosk flag is off)", "params": "body: JSON (fields not yet documented)", "purpose": "Take parts from a bin. Body: {itemcode, badge, quantity}.", "example": "curl -X POST http://localhost:5001/api/printedparts/kiosk/take -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/printedparts/reports/by-person", "auth": "permission:printedparts.view", "params": "not documented", "purpose": "Takes grouped by employee, optionally bounded by ?days= (default 30).", "example": "curl http://localhost:5001/api/printedparts/reports/by-person -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/printedparts/reports/consumption", "auth": "permission:printedparts.view", "params": "not documented", "purpose": "Takes per item, optionally bounded by ?days= (default 30).", "example": "curl http://localhost:5001/api/printedparts/reports/consumption -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/printedparts/reports/stock", "auth": "permission:printedparts.view", "params": "not documented", "purpose": "Stock levels with low-stock flags and the cache-vs-ledger reconcile.", "example": "curl http://localhost:5001/api/printedparts/reports/stock -H \"Authorization: Bearer $TOK\"" } ] }, { "surface": "plugin-printers", "endpoints": [ { "method": "GET", "path": "/api/printers", "auth": "permission:printers.view", "params": "not documented", "purpose": "List all printers with filtering and pagination.", "example": "curl http://localhost:5001/api/printers -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/printers", "auth": "permission:printers.create", "params": "body: JSON (fields not yet documented)", "purpose": "Create new printer (creates both Asset and Printer records).", "example": "curl -X POST http://localhost:5001/api/printers -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/printers/", "auth": "permission:printers.delete", "params": "path: printer_id (int)", "purpose": "Delete (soft delete) printer.", "example": "curl -X DELETE http://localhost:5001/api/printers/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/printers/", "auth": "permission:printers.view", "params": "path: printer_id (int)", "purpose": "Get a single printer with full details.", "example": "curl http://localhost:5001/api/printers/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/printers/", "auth": "permission:printers.edit", "params": "path: printer_id (int); body: JSON (fields not yet documented)", "purpose": "Update printer (both Asset and Printer records).", "example": "curl -X PUT http://localhost:5001/api/printers/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/printers//supplies", "auth": "permission:printers.view", "params": "path: printer_id (int)", "purpose": "Get supply levels from Zabbix (real-time lookup).", "example": "curl http://localhost:5001/api/printers/1/supplies -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/printers/assignments/for-asset/", "auth": "permission:printers.view", "params": "path: asset_id (int)", "purpose": "What THIS asset is assigned, without inheritance.", "example": "curl http://localhost:5001/api/printers/assignments/for-asset/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/printers/assignments/for-asset/", "auth": "permission:printers.edit", "params": "path: asset_id (int); body: JSON (fields not yet documented)", "purpose": "Reconcile one asset's whole printer assignment in a single call.", "example": "curl -X PUT http://localhost:5001/api/printers/assignments/for-asset/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/printers/assignments/seed-from-observed/", "auth": "permission:printers.edit", "params": "path: asset_id (int); body: JSON (fields not yet documented)", "purpose": "Write what a PC observed as the assignment of the asset in the path.", "example": "curl -X POST http://localhost:5001/api/printers/assignments/seed-from-observed/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/printers/by-asset/", "auth": "permission:printers.view", "params": "path: asset_id (int)", "purpose": "Get printer data by asset ID.", "example": "curl http://localhost:5001/api/printers/by-asset/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/printers/dashboard/summary", "auth": "permission:printers.view", "params": "not documented", "purpose": "Get printer dashboard summary data.", "example": "curl http://localhost:5001/api/printers/dashboard/summary -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/printers/dashboard/supplies", "auth": "permission:printers.view", "params": "not documented", "purpose": "Printers needing a cartridge, flattened to one row per printer.", "example": "curl http://localhost:5001/api/printers/dashboard/supplies -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/printers/drivers", "auth": "permission:printers.view", "params": "not documented", "purpose": "List printer drivers. ?active=false includes inactive ones.", "example": "curl http://localhost:5001/api/printers/drivers -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/printers/drivers", "auth": "permission:printers.create", "params": "body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: printers_asset.create_driver has no docstring.", "example": "curl -X POST http://localhost:5001/api/printers/drivers -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/printers/drivers/", "auth": "permission:printers.delete", "params": "path: driver_id (int)", "purpose": "UNDOCUMENTED: printers_asset.delete_driver has no docstring.", "example": "curl -X DELETE http://localhost:5001/api/printers/drivers/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/printers/drivers/", "auth": "permission:printers.edit", "params": "path: driver_id (int); body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: printers_asset.update_driver has no docstring.", "example": "curl -X PUT http://localhost:5001/api/printers/drivers/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/printers/for-host/", "auth": "jwt-optional (works signed out; the handler decides what shows)", "params": "path: hostname (string)", "purpose": "Printers assigned to a PC, by hostname, with what it takes to install one.", "example": "curl http://localhost:5001/api/printers/for-host/x -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/printers/install-batch", "auth": "jwt-optional (works signed out; the handler decides what shows)", "params": "not documented", "purpose": "Generate a Windows .bat that installs the selected printers.", "example": "curl http://localhost:5001/api/printers/install-batch -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/printers/install-list", "auth": "jwt-optional (works signed out; the handler decides what shows)", "params": "not documented", "purpose": "Flat, unpaginated list of network printers for the printer installer.", "example": "curl http://localhost:5001/api/printers/install-list -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/printers/lookup", "auth": "permission:printers.view", "params": "not documented", "purpose": "Find a printer by IP or FQDN. Parity with the classic printerlookup.asp.", "example": "curl http://localhost:5001/api/printers/lookup -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/printers/lowsupplies", "auth": "permission:printers.view", "params": "not documented", "purpose": "Get printers with low or critical supply levels.", "example": "curl http://localhost:5001/api/printers/lowsupplies -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/printers/models", "auth": "permission:printers.view", "params": "not documented", "purpose": "List models with a supply count, for the supply-management picker.", "example": "curl http://localhost:5001/api/printers/models -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/printers/models//supplies", "auth": "permission:printers.view", "params": "path: modelnumberid (int)", "purpose": "List all supplies mapped to a model.", "example": "curl http://localhost:5001/api/printers/models/1/supplies -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/printers/models//supplies", "auth": "permission:printers.create", "params": "path: modelnumberid (int); body: JSON (fields not yet documented)", "purpose": "Add a supply to a model.", "example": "curl -X POST http://localhost:5001/api/printers/models/1/supplies -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/printers/observed/", "auth": "permission:printers.view", "params": "path: hostname (string)", "purpose": "What a host last reported, each queue judged against what it is assigned.", "example": "curl http://localhost:5001/api/printers/observed/x -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/printers/observed/for-asset/", "auth": "permission:printers.view", "params": "path: asset_id (int)", "purpose": "The same comparison, reached from an asset page: one block per host.", "example": "curl http://localhost:5001/api/printers/observed/for-asset/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/printers/pc-default", "auth": "jwt-optional (works signed out; the handler decides what shows)", "params": "not documented", "purpose": "Default printer for a PC, by machine (asset) number.", "example": "curl http://localhost:5001/api/printers/pc-default -H \"Authorization: Bearer $TOK\"" }, { "method": "DELETE", "path": "/api/printers/supplies/", "auth": "permission:printers.delete", "params": "path: modelsupplyid (int)", "purpose": "Delete a model supply.", "example": "curl -X DELETE http://localhost:5001/api/printers/supplies/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/printers/supplies/", "auth": "permission:printers.edit", "params": "path: modelsupplyid (int); body: JSON (fields not yet documented)", "purpose": "Update a model supply.", "example": "curl -X PUT http://localhost:5001/api/printers/supplies/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/printers/supplies/forecast", "auth": "permission:printers.view", "params": "not documented", "purpose": "Days-to-empty and replacement counts per printer.", "example": "curl http://localhost:5001/api/printers/supplies/forecast -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/printers/supplies/meta", "auth": "permission:printers.view", "params": "not documented", "purpose": "Allowed values for supply type, color, and capacity tier (for the UI).", "example": "curl http://localhost:5001/api/printers/supplies/meta -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/printers/supplies/refresh", "auth": "permission:printers.create", "params": "body: JSON (fields not yet documented)", "purpose": "Clear cached Zabbix supply data so the next read pulls fresh values.", "example": "curl -X POST http://localhost:5001/api/printers/supplies/refresh -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/printers/types", "auth": "permission:printers.view", "params": "not documented", "purpose": "List all printer types.", "example": "curl http://localhost:5001/api/printers/types -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/printers/types", "auth": "permission:printers.create", "params": "body: JSON (fields not yet documented)", "purpose": "Create a new printer type.", "example": "curl -X POST http://localhost:5001/api/printers/types -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/printers/types/", "auth": "permission:printers.delete", "params": "path: type_id (int)", "purpose": "Delete a printer type. Refused if any printer still uses it.", "example": "curl -X DELETE http://localhost:5001/api/printers/types/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/printers/types/", "auth": "permission:printers.view", "params": "path: type_id (int)", "purpose": "Get a single printer type.", "example": "curl http://localhost:5001/api/printers/types/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/printers/types/", "auth": "permission:printers.edit", "params": "path: type_id (int); body: JSON (fields not yet documented)", "purpose": "Update a printer type.", "example": "curl -X PUT http://localhost:5001/api/printers/types/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" } ] }, { "surface": "plugin-slides", "endpoints": [ { "method": "GET", "path": "/api/slides/", "auth": "permission:slides.view or slides.manage", "params": "path: surface (string)", "purpose": "UNDOCUMENTED: slides.list_slides has no docstring.", "example": "curl http://localhost:5001/api/slides/x -H \"Authorization: Bearer $TOK\"" }, { "method": "PATCH", "path": "/api/slides//", "auth": "permission:slides.manage", "params": "path: surface (string), slideid (int); body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: slides.update_slide has no docstring.", "example": "curl -X PATCH http://localhost:5001/api/slides/x/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/slides//delete", "auth": "permission:slides.manage", "params": "path: surface (string); body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: slides.delete_slides has no docstring.", "example": "curl -X POST http://localhost:5001/api/slides/x/delete -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/slides//order", "auth": "permission:slides.manage", "params": "path: surface (string); body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: slides.reorder_slides has no docstring.", "example": "curl -X POST http://localhost:5001/api/slides/x/order -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/slides//upload", "auth": "permission:slides.manage", "params": "path: surface (string); body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: slides.upload_slides has no docstring.", "example": "curl -X POST http://localhost:5001/api/slides/x/upload -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/slides/feed", "auth": "none (reviewed: named in the public-read or mutation sweep)", "params": "not documented", "purpose": "Flat playlist for a surface. NOT wrapped in the success_response envelope so the screensaver's existing parser needs no change.", "example": "curl http://localhost:5001/api/slides/feed" }, { "method": "GET", "path": "/api/slides/img//", "auth": "none (reviewed: named in the public-read or mutation sweep)", "params": "path: surface (string), filename (path)", "purpose": "Serve a slide image with a path-traversal guard.", "example": "curl http://localhost:5001/api/slides/img/x/example.png" } ] }, { "surface": "plugin-tools", "endpoints": [ { "method": "POST", "path": "/api/tools/secrets", "auth": "jwt-optional (works signed out; the handler decides what shows)", "params": "body: JSON (fields not yet documented)", "purpose": "Store an already-encrypted secret and return its token.", "example": "curl -X POST http://localhost:5001/api/tools/secrets -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/tools/secrets/", "auth": "none (the unguessable token in the path is the authorisation)", "params": "path: token (string)", "purpose": "Whether a link is still live, WITHOUT spending it.", "example": "curl http://localhost:5001/api/tools/secrets/x" }, { "method": "POST", "path": "/api/tools/secrets/", "auth": "none (the unguessable token in the path is the authorisation; redeeming spends the secret)", "params": "path: token (string); body: JSON (fields not yet documented)", "purpose": "Hand over the ciphertext once, then spend the view.", "example": "curl -X POST http://localhost:5001/api/tools/secrets/x -H 'Content-Type: application/json' -d '{}'" } ] }, { "surface": "plugin-usb", "endpoints": [ { "method": "GET", "path": "/api/usb", "auth": "permission:usb.view", "params": "not documented", "purpose": "List USB devices with checkout status.", "example": "curl http://localhost:5001/api/usb -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/usb", "auth": "permission:usb.create", "params": "body: JSON (fields not yet documented)", "purpose": "Add a device (starts checked-in).", "example": "curl -X POST http://localhost:5001/api/usb -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/usb/", "auth": "permission:usb.view", "params": "path: device_id (string)", "purpose": "Get a single device plus its last 20 check-in/out log rows.", "example": "curl http://localhost:5001/api/usb/x -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/usb/", "auth": "permission:usb.edit", "params": "path: device_id (string); body: JSON (fields not yet documented)", "purpose": "Edit device_desc / device_owner / locker_location / status.", "example": "curl -X PUT http://localhost:5001/api/usb/x -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/usb//checkin", "auth": "permission:usb.create", "params": "path: device_id (string); body: JSON (fields not yet documented)", "purpose": "Check a device back in from a badge.", "example": "curl -X POST http://localhost:5001/api/usb/x/checkin -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/usb//checkout", "auth": "permission:usb.create", "params": "path: device_id (string); body: JSON (fields not yet documented)", "purpose": "Check a device out to a badge.", "example": "curl -X POST http://localhost:5001/api/usb/x/checkout -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/usb//history", "auth": "permission:usb.view", "params": "path: device_id (string)", "purpose": "Paginated check-in/out log for one device.", "example": "curl http://localhost:5001/api/usb/x/history -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/usb//retire", "auth": "permission:usb.edit", "params": "path: device_id (string); body: JSON (fields not yet documented)", "purpose": "Retire a device (status -> retired).", "example": "curl -X POST http://localhost:5001/api/usb/x/retire -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/usb/checkouts", "auth": "permission:usb.view", "params": "not documented", "purpose": "List check-out log rows.", "example": "curl http://localhost:5001/api/usb/checkouts -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/usb/checkouts/active", "auth": "permission:usb.view", "params": "not documented", "purpose": "List the latest check-out log row for every currently checked-out device.", "example": "curl http://localhost:5001/api/usb/checkouts/active -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/usb/kiosk/checkin", "auth": "api-key-optional (kiosk: the per-device token in the X-Kiosk-Token header, OR a caller address inside the site's kiosk CIDR allowlist - an allowlisted caller sends no credential; 404 while the site's kiosk flag is off)", "params": "body: JSON (fields not yet documented)", "purpose": "Check a device in at the kiosk. Body: {device_id, badge, forsomeoneelse}.", "example": "curl -X POST http://localhost:5001/api/usb/kiosk/checkin -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/usb/kiosk/checkout", "auth": "api-key-optional (kiosk: the per-device token in the X-Kiosk-Token header, OR a caller address inside the site's kiosk CIDR allowlist - an allowlisted caller sends no credential; 404 while the site's kiosk flag is off)", "params": "body: JSON (fields not yet documented)", "purpose": "Check a device out at the kiosk. Body: {device_id, badge}.", "example": "curl -X POST http://localhost:5001/api/usb/kiosk/checkout -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/usb/kiosk/device/", "auth": "api-key-optional (kiosk: the per-device token in the X-Kiosk-Token header, OR a caller address inside the site's kiosk CIDR allowlist - an allowlisted caller sends no credential; 404 while the site's kiosk flag is off)", "params": "path: device_id (string)", "purpose": "What the kiosk shows after a device is scanned.", "example": "curl http://localhost:5001/api/usb/kiosk/device/x" }, { "method": "POST", "path": "/api/usb/kiosk/others", "auth": "api-key-optional (kiosk: the per-device token in the X-Kiosk-Token header, OR a caller address inside the site's kiosk CIDR allowlist - an allowlisted caller sends no credential; 404 while the site's kiosk flag is off)", "params": "body: JSON (fields not yet documented)", "purpose": "Drives checked out to OTHER people, with holder names. Body: {badge}.", "example": "curl -X POST http://localhost:5001/api/usb/kiosk/others -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/usb/kiosk/provisioning-link", "auth": "permission:settings.edit", "params": "not documented", "purpose": "The URL that provisions a screen, token included, for an administrator.", "example": "curl http://localhost:5001/api/usb/kiosk/provisioning-link -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/usb/kiosk/session", "auth": "api-key-optional (kiosk: the per-device token in the X-Kiosk-Token header, OR a caller address inside the site's kiosk CIDR allowlist - an allowlisted caller sends no credential; 404 while the site's kiosk flag is off)", "params": "body: JSON (fields not yet documented)", "purpose": "What one badge may do right now. Body: {badge}.", "example": "curl -X POST http://localhost:5001/api/usb/kiosk/session -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/usb/kiosk/setup", "auth": "setup-code (single-use kiosk setup code in ?code=, issued by the permission-gated provisioning link; spent on any attempt, 410 once used or expired)", "params": "not documented", "purpose": "Trade a setup code for this browser's kiosk cookie, then open the kiosk.", "example": "curl http://localhost:5001/api/usb/kiosk/setup" }, { "method": "GET", "path": "/api/usb/reports/audit", "auth": "permission:usb.view", "params": "not documented", "purpose": "Every check-out and check-in in the window, newest first.", "example": "curl http://localhost:5001/api/usb/reports/audit -H \"Authorization: Bearer $TOK\"" } ] }, { "surface": "plugin-warranty", "endpoints": [ { "method": "GET", "path": "/api/warranty", "auth": "permission:warranty.view", "params": "not documented", "purpose": "List warranties. Filters: ?status=, ?assetid=, ?active=false.", "example": "curl http://localhost:5001/api/warranty -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/warranty", "auth": "permission:warranty.create", "params": "body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: warranty.create_warranty has no docstring.", "example": "curl -X POST http://localhost:5001/api/warranty -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/warranty/", "auth": "permission:warranty.delete", "params": "path: warrantyid (int)", "purpose": "UNDOCUMENTED: warranty.delete_warranty has no docstring.", "example": "curl -X DELETE http://localhost:5001/api/warranty/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/warranty/", "auth": "permission:warranty.view", "params": "path: warrantyid (int)", "purpose": "UNDOCUMENTED: warranty.get_warranty has no docstring.", "example": "curl http://localhost:5001/api/warranty/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "PUT", "path": "/api/warranty/", "auth": "permission:warranty.edit", "params": "path: warrantyid (int); body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: warranty.update_warranty has no docstring.", "example": "curl -X PUT http://localhost:5001/api/warranty/1 -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "DELETE", "path": "/api/warranty//proof", "auth": "permission:warranty.edit", "params": "path: warrantyid (int)", "purpose": "Remove a warranty's proof document.", "example": "curl -X DELETE http://localhost:5001/api/warranty/1/proof -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/warranty//proof", "auth": "permission:warranty.edit", "params": "path: warrantyid (int); body: JSON (fields not yet documented)", "purpose": "Upload (or replace) the proof-of-cover document for a warranty.", "example": "curl -X POST http://localhost:5001/api/warranty/1/proof -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "POST", "path": "/api/warranty//refresh", "auth": "permission:warranty.edit", "params": "path: warrantyid (int); body: JSON (fields not yet documented)", "purpose": "UNDOCUMENTED: warranty.refresh_warranty has no docstring.", "example": "curl -X POST http://localhost:5001/api/warranty/1/refresh -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" }, { "method": "GET", "path": "/api/warranty/asset/", "auth": "permission:warranty.view", "params": "path: assetid (int)", "purpose": "Warranties covering one asset (for the asset-detail panel).", "example": "curl http://localhost:5001/api/warranty/asset/1 -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/warranty/dashboard/expiring", "auth": "permission:warranty.view", "params": "not documented", "purpose": "Warranties running out, and ones that already have.", "example": "curl http://localhost:5001/api/warranty/dashboard/expiring -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/warranty/proof/", "auth": "permission:warranty.view", "params": "path: filename (path)", "purpose": "Download a proof document.", "example": "curl http://localhost:5001/api/warranty/proof/example.png -H \"Authorization: Bearer $TOK\"" }, { "method": "GET", "path": "/api/warranty/report", "auth": "permission:warranty.view", "params": "not documented", "purpose": "Counts + lists bucketed by derived status.", "example": "curl http://localhost:5001/api/warranty/report -H \"Authorization: Bearer $TOK\"" }, { "method": "POST", "path": "/api/warranty/sync/dell", "auth": "permission:warranty.edit", "params": "body: JSON (fields not yet documented)", "purpose": "Look up every asset serial (= Dell service tag) that has no warranty yet and create warranties for the ones Dell recognizes.", "example": "curl -X POST http://localhost:5001/api/warranty/sync/dell -H \"Authorization: Bearer $TOK\" -H 'Content-Type: application/json' -d '{}'" } ] } ]