{"openapi":"3.1.0","info":{"title":"Autonomous Policy Engine","description":"\n        Enterprise-grade policy enforcement system with natural language policy parsing,\n        real-time enforcement, blockchain audit trails, and comprehensive monitoring.\n        \n        ## Features\n        \n        - **Natural Language Policies**: Define policies in plain English\n        - **Multi-Layer Enforcement**: Network, data, access, and industrial control\n        - **Blockchain Audit**: Immutable audit trail with cryptographic verification\n        - **Real-Time Monitoring**: Prometheus metrics and health checks\n        - **Enterprise Auth**: JWT authentication with role-based access control\n        - **Multi-Tenant**: Isolated policy namespaces per tenant\n        \n        ## Authentication\n        \n        Use the `/auth/login` endpoint to obtain a JWT token, then include it\n        in the `Authorization: Bearer <token>` header for authenticated requests.\n        \n        On first boot an admin account is seeded from the APE_ADMIN_USERNAME /\n        APE_ADMIN_PASSWORD environment variables (defaults: `admin` / `admin123456!`).\n        Change the password immediately after first login.\n        ","version":"1.0.0"},"paths":{"/api/v1/auth/login":{"post":{"tags":["Authentication"],"summary":"Login","description":"Authenticate user and return JWT tokens.\n\nLooks the user up in the users table and verifies the submitted password\nagainst the stored PBKDF2 hash.","operationId":"login_api_v1_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/refresh":{"post":{"tags":["Authentication"],"summary":"Refresh Token","description":"Refresh an access token using a refresh token.\n\nSECURITY: the new access token is minted from the user's *stored* record,\nso the role always comes from the database — never from a hardcoded value\nand never from client-supplied claims. (Previously this hardcoded ADMIN,\nwhich let any viewer escalate to admin by refreshing.)","operationId":"refresh_token_api_v1_auth_refresh_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/logout":{"post":{"tags":["Authentication"],"summary":"Logout","description":"Logout user: revoke the presented access token so it can no longer\nbe used (AuthService keeps a revocation set checked on every verify).","operationId":"logout_api_v1_auth_logout_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/register":{"post":{"tags":["Authentication"],"summary":"Register User","description":"Register a new user (admin only).","operationId":"register_user_api_v1_auth_register_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/me":{"get":{"tags":["Authentication"],"summary":"Get Current User Info","description":"Get current user's information from the stored user record.","operationId":"get_current_user_info_api_v1_auth_me_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/change-password":{"post":{"tags":["Authentication"],"summary":"Change Password","description":"Change the current user's password: verify the current password against\nthe stored hash, validate the new one, and persist the new PBKDF2 hash.","operationId":"change_password_api_v1_auth_change_password_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/policies/":{"post":{"tags":["Policies"],"summary":"Create Policy","description":"Create a new policy from natural language.\nThe policy will be parsed by the LLM and stored.","operationId":"create_policy_api_v1_policies__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Tenant-ID","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Policies"],"summary":"List Policies","description":"List policies with optional filters and pagination","operationId":"list_policies_api_v1_policies__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PolicyStatus"},{"type":"null"}],"title":"Status"}},{"name":"framework","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ComplianceFramework"},{"type":"null"}],"title":"Framework"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Tenant-ID","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/policies/{policy_id}":{"get":{"tags":["Policies"],"summary":"Get Policy","description":"Get a specific policy by ID","operationId":"get_policy_api_v1_policies__policy_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Policy Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Tenant-ID","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Policies"],"summary":"Update Policy","description":"Update a policy","operationId":"update_policy_api_v1_policies__policy_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Policy Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Tenant-ID","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Policies"],"summary":"Delete Policy","description":"Delete (archive) a policy","operationId":"delete_policy_api_v1_policies__policy_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Policy Id"}},{"name":"hard_delete","in":"query","required":false,"schema":{"type":"boolean","description":"Permanently delete instead of archive","default":false,"title":"Hard Delete"},"description":"Permanently delete instead of archive"},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Tenant-ID","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/policies/{policy_id}/activate":{"post":{"tags":["Policies"],"summary":"Activate Policy","description":"Activate a policy for enforcement","operationId":"activate_policy_api_v1_policies__policy_id__activate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Policy Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Tenant-ID","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/policies/{policy_id}/suspend":{"post":{"tags":["Policies"],"summary":"Suspend Policy","description":"Suspend a policy (stop enforcement)","operationId":"suspend_policy_api_v1_policies__policy_id__suspend_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Policy Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Tenant-ID","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/policies/test":{"post":{"tags":["Policies"],"summary":"Test Policies","description":"Test enforcement against all active policies.\n\nThe engine's decision is authoritative. When wired (Phase 2), the WASM\nsandbox layer is also consulted and the platform layer reports whether\nsynced firewall actions would block the traffic — both advisory — and\nthe check is written to the audit trail.","operationId":"test_policies_api_v1_policies_test_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"scope","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PolicyScope"},{"type":"null"}],"title":"Scope"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Tenant-ID","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestPolicyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestPolicyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/policies/{policy_id}/test":{"post":{"tags":["Policies"],"summary":"Test Single Policy","description":"Test ONE policy in isolation (Phase 5, for the Python SDK).\n\nThe policy is loaded from the database and evaluated on its own —\nincluding while it is still a draft — against the flat request body\n(same shape as POST /policies/test). The check is audited like any\nother enforcement test.","operationId":"test_single_policy_api_v1_policies__policy_id__test_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Policy Id"}},{"name":"scope","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PolicyScope"},{"type":"null"}],"title":"Scope"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Tenant-ID","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestPolicyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnforceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/policies/conflicts/check":{"get":{"tags":["Policies"],"summary":"Check Conflicts","description":"Check for conflicts between active policies","operationId":"check_conflicts_api_v1_policies_conflicts_check_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/audit/events":{"get":{"tags":["Audit"],"summary":"List Audit Events","description":"List audit events with optional filters","operationId":"list_audit_events_api_v1_audit_events_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AuditEventType"},{"type":"null"}],"title":"Event Type"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/SeverityLevel"},{"type":"null"}],"title":"Severity"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Tenant-ID","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditEventListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/audit/events/{event_id}":{"get":{"tags":["Audit"],"summary":"Get Audit Event","description":"Get one audit event by ID (Phase 5, for the Python SDK).","operationId":"get_audit_event_api_v1_audit_events__event_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Event Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Tenant-ID","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditEventResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/audit/blockchain/status":{"get":{"tags":["Audit"],"summary":"Get Blockchain Status","description":"Get blockchain status and health","operationId":"get_blockchain_status_api_v1_audit_blockchain_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockchainStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/audit/blockchain/verify":{"post":{"tags":["Audit"],"summary":"Verify Blockchain","description":"Verify the audit blockchain's integrity (Phase 5, for the SDK).\n\nRecomputes every event/block hash and checks the chain links; a\nsingle tampered event makes ``valid`` false.","operationId":"verify_blockchain_api_v1_audit_blockchain_verify_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockchainVerifyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/audit/blockchain/blocks":{"get":{"tags":["Audit"],"summary":"List Blocks","description":"List blockchain blocks","operationId":"list_blocks_api_v1_audit_blockchain_blocks_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BlockResponse"},"title":"Response List Blocks Api V1 Audit Blockchain Blocks Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/audit/blockchain/mine":{"post":{"tags":["Audit"],"summary":"Mine Block","description":"Manually trigger block mining","operationId":"mine_block_api_v1_audit_blockchain_mine_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/audit/export":{"post":{"tags":["Audit"],"summary":"Export Audit","description":"Export audit data in requested format","operationId":"export_audit_api_v1_audit_export_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"export_format","in":"query","required":false,"schema":{"type":"string","pattern":"^(json|csv|pdf)$","default":"json","title":"Export Format"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date"}},{"name":"event_types","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/AuditEventType"}},{"type":"null"}],"title":"Event Types"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/audit/export/{filename}":{"get":{"tags":["Audit"],"summary":"Download Export","description":"Download an exported file","operationId":"download_export_api_v1_audit_export__filename__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"filename","in":"path","required":true,"schema":{"type":"string","title":"Filename"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/metrics/":{"get":{"tags":["Metrics"],"summary":"Get System Metrics","description":"Get comprehensive system metrics","operationId":"get_system_metrics_api_v1_metrics__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemMetrics"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/metrics/prometheus":{"get":{"tags":["Metrics"],"summary":"Prometheus Metrics","description":"Export metrics in Prometheus format.\nRequires authentication with the metrics:read permission.\nCan be scraped by Prometheus for monitoring (configure the scraper\nwith a bearer token).","operationId":"prometheus_metrics_api_v1_metrics_prometheus_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/metrics/health":{"get":{"tags":["Metrics"],"summary":"Health Check","description":"Health check endpoint for load balancers","operationId":"health_check_api_v1_metrics_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/notifications/configs":{"get":{"tags":["Notifications"],"summary":"List Notification Configs","description":"List notification configurations","operationId":"list_notification_configs_api_v1_notifications_configs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"channel","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"}},{"name":"enabled_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Enabled Only"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationConfigListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Notifications"],"summary":"Create Notification Config","description":"Create a new notification configuration","operationId":"create_notification_config_api_v1_notifications_configs_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Tenant-ID","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationConfigCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notifications/configs/{config_id}":{"get":{"tags":["Notifications"],"summary":"Get Notification Config","description":"Get a notification configuration","operationId":"get_notification_config_api_v1_notifications_configs__config_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Config Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Notifications"],"summary":"Update Notification Config","description":"Update a notification configuration","operationId":"update_notification_config_api_v1_notifications_configs__config_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Config Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationConfigCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Notifications"],"summary":"Delete Notification Config","description":"Delete a notification configuration","operationId":"delete_notification_config_api_v1_notifications_configs__config_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Config Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notifications/test":{"post":{"tags":["Notifications"],"summary":"Test Notification","description":"Test a notification channel","operationId":"test_notification_api_v1_notifications_test_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestNotificationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestNotificationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notifications/channels/{channel}/test":{"post":{"tags":["Notifications"],"summary":"Test Channel Connection","description":"Test connection to a notification channel","operationId":"test_channel_connection_api_v1_notifications_channels__channel__test_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"channel","in":"path","required":true,"schema":{"type":"string","title":"Channel"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestNotificationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/notifications/stats":{"get":{"tags":["Notifications"],"summary":"Get Notification Stats","description":"Get notification statistics","operationId":"get_notification_stats_api_v1_notifications_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/layers/":{"get":{"tags":["Layers"],"summary":"List Layers","description":"List all enforcement layers and their live status","operationId":"list_layers_api_v1_layers__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/layers/platform":{"get":{"tags":["Layers"],"summary":"Platform Status","description":"Platform (OS firewall) layer status and sync records","operationId":"platform_status_api_v1_layers_platform_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/layers/platform/sync":{"post":{"tags":["Layers"],"summary":"Platform Sync","description":"Sync active policies to the platform layer.\n\nIn the default dry-run mode this only *plans* the firewall actions the\nactive policies imply, logs them, records them as simulated, and writes\nan audit event — the host firewall is NOT modified. Real application\nrequires APE_LAYER_ENFORCE=true and APE_ALLOW_SYSTEM_CHANGES=true.","operationId":"platform_sync_api_v1_layers_platform_sync_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Tenant-ID","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/LayerSyncRequest"},{"type":"null"}],"title":"Sync Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayerSyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/layers/sandbox":{"get":{"tags":["Layers"],"summary":"Sandbox Status","description":"WASM sandbox layer status and runtime statistics","operationId":"sandbox_status_api_v1_layers_sandbox_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/templates/":{"get":{"tags":["Templates"],"summary":"Get Templates","description":"List curated policy templates, optionally by compliance framework.","operationId":"get_templates_api_v1_templates__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"framework","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ComplianceFramework"},{"type":"null"}],"description":"Optional framework filter, e.g. HIPAA, PCI-DSS, GDPR, SOC2, NIST-CSF","title":"Framework"},"description":"Optional framework filter, e.g. HIPAA, PCI-DSS, GDPR, SOC2, NIST-CSF"},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/enforce/":{"post":{"tags":["Enforcement"],"summary":"Enforce","description":"Evaluate one access request against all active policies.","operationId":"enforce_api_v1_enforce__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"scope","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PolicyScope"},{"type":"null"}],"title":"Scope"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Tenant-ID","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnforceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnforceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/enforce/batch":{"post":{"tags":["Enforcement"],"summary":"Enforce Batch","description":"Evaluate several access requests in one call.","operationId":"enforce_batch_api_v1_enforce_batch_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"scope","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PolicyScope"},{"type":"null"}],"title":"Scope"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}},{"name":"X-Tenant-ID","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Tenant-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchEnforceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchEnforceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1":{"get":{"summary":"Api Info","operationId":"api_info_api_v1_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AuditEventListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AuditEventResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"blockchain_valid":{"type":"boolean","title":"Blockchain Valid"}},"type":"object","required":["items","total","blockchain_valid"],"title":"AuditEventListResponse","description":"Audit event list response"},"AuditEventResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"event_type":{"$ref":"#/components/schemas/AuditEventType"},"severity":{"$ref":"#/components/schemas/SeverityLevel"},"action":{"type":"string","title":"Action"},"actor_username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Username"},"resource_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource Type"},"resource_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Resource Id"},"details":{"additionalProperties":true,"type":"object","title":"Details"},"hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hash"},"block_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Block Number"}},"type":"object","required":["id","timestamp","event_type","severity","action","actor_username","resource_type","resource_id","details","hash","block_number"],"title":"AuditEventResponse","description":"Audit event response"},"AuditEventType":{"type":"string","enum":["policy_created","policy_updated","policy_deleted","policy_activated","policy_suspended","enforcement_allow","enforcement_deny","enforcement_error","conflict_detected","conflict_resolved","user_login","user_logout","config_change","system_start","system_stop","alert_triggered","export_created"],"title":"AuditEventType","description":"Types of audit events"},"AuthRole":{"type":"string","enum":["viewer","analyst","operator","admin","super_admin"],"title":"AuthRole","description":"User authorization roles"},"BatchEnforceRequest":{"properties":{"requests":{"items":{"$ref":"#/components/schemas/EnforceRequest"},"type":"array","maxItems":100,"title":"Requests"}},"type":"object","required":["requests"],"title":"BatchEnforceRequest","description":"Batch of access requests (max 100 per call)."},"BatchEnforceResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/EnforceResponse"},"type":"array","title":"Results"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["results","total"],"title":"BatchEnforceResponse"},"BlockResponse":{"properties":{"block_number":{"type":"integer","title":"Block Number"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"event_count":{"type":"integer","title":"Event Count"},"previous_hash":{"type":"string","title":"Previous Hash"},"hash":{"type":"string","title":"Hash"},"nonce":{"type":"integer","title":"Nonce"}},"type":"object","required":["block_number","timestamp","event_count","previous_hash","hash","nonce"],"title":"BlockResponse","description":"Blockchain block response"},"BlockchainStatusResponse":{"properties":{"chain_length":{"type":"integer","title":"Chain Length"},"total_events":{"type":"integer","title":"Total Events"},"pending_events":{"type":"integer","title":"Pending Events"},"is_valid":{"type":"boolean","title":"Is Valid"},"latest_block":{"anyOf":[{"$ref":"#/components/schemas/BlockResponse"},{"type":"null"}]}},"type":"object","required":["chain_length","total_events","pending_events","is_valid","latest_block"],"title":"BlockchainStatusResponse","description":"Blockchain status response"},"BlockchainVerifyResponse":{"properties":{"valid":{"type":"boolean","title":"Valid"},"chain_length":{"type":"integer","title":"Chain Length"},"total_events":{"type":"integer","title":"Total Events"},"latest_block_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Latest Block Hash"}},"type":"object","required":["valid","chain_length","total_events"],"title":"BlockchainVerifyResponse","description":"Blockchain verification result"},"ChangePasswordRequest":{"properties":{"current_password":{"type":"string","title":"Current Password"},"new_password":{"type":"string","minLength":12,"title":"New Password"},"confirm_password":{"type":"string","title":"Confirm Password"}},"type":"object","required":["current_password","new_password","confirm_password"],"title":"ChangePasswordRequest","description":"Password change request"},"ComplianceFramework":{"type":"string","enum":["DORA","GDPR","HIPAA","PCI-DSS","SOC2","SOX","CCPA","ISO27001","NIST-800-53","NIST-CSF","FedRAMP","CMMC","ITAR","EAR","NERC-CIP","IEC62443"],"title":"ComplianceFramework","description":"Supported regulatory frameworks"},"ConflictResponse":{"properties":{"conflicts":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Conflicts"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["conflicts","total"],"title":"ConflictResponse","description":"Conflict detection response"},"EnforceRequest":{"properties":{"user":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User"},"resource":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource"},"action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action"},"source_ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Ip"},"destination_ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination Ip"},"port":{"anyOf":[{"type":"integer","maximum":65535.0,"minimum":0.0},{"type":"null"}],"title":"Port"},"context":{"additionalProperties":true,"type":"object","title":"Context"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"}},"type":"object","title":"EnforceRequest","description":"One access request to evaluate against all active policies."},"EnforceResponse":{"properties":{"allowed":{"type":"boolean","title":"Allowed"},"intent":{"type":"string","title":"Intent"},"reason":{"type":"string","title":"Reason"},"policy_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Policy Id"},"matched_policies":{"type":"integer","title":"Matched Policies","default":0},"matched_conditions":{"items":{"type":"string"},"type":"array","title":"Matched Conditions"},"enforcement_layer":{"type":"string","title":"Enforcement Layer","default":"application"},"latency_ms":{"type":"number","title":"Latency Ms","default":0.0},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"sandbox":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Sandbox"},"layer":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Layer"}},"type":"object","required":["allowed","intent","reason"],"title":"EnforceResponse","description":"Enforcement decision in the shape the Python SDK's\nEnforcementResult consumes (Phase 5): a superset of TestPolicyResponse\nwith the deciding policy, matched-rule descriptions and a timestamp."},"ExportResponse":{"properties":{"format":{"type":"string","title":"Format"},"filename":{"type":"string","title":"Filename"},"size_bytes":{"type":"integer","title":"Size Bytes"},"download_url":{"type":"string","title":"Download Url"}},"type":"object","required":["format","filename","size_bytes","download_url"],"title":"ExportResponse","description":"Export response"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"LayerActionRecord":{"properties":{"policy_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Policy Id"},"policy_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Policy Name"},"action":{"type":"string","title":"Action"},"target":{"type":"string","title":"Target"},"detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Detail"},"mode":{"type":"string","title":"Mode"},"status":{"type":"string","title":"Status"},"timestamp":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Timestamp"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["action","target","mode","status"],"title":"LayerActionRecord","description":"One planned/applied platform action"},"LayerSyncRequest":{"properties":{"policy_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Policy Ids","description":"If given, only sync these policies"}},"type":"object","title":"LayerSyncRequest","description":"Sync request: optionally restrict to specific policies"},"LayerSyncResponse":{"properties":{"layer":{"type":"string","title":"Layer"},"mode":{"type":"string","title":"Mode"},"enforce_enabled":{"type":"boolean","title":"Enforce Enabled"},"system_changes_permitted":{"type":"boolean","title":"System Changes Permitted"},"policies_considered":{"type":"integer","title":"Policies Considered"},"planned":{"type":"integer","title":"Planned"},"simulated":{"type":"integer","title":"Simulated"},"applied":{"type":"integer","title":"Applied"},"failed":{"type":"integer","title":"Failed"},"actions":{"items":{"$ref":"#/components/schemas/LayerActionRecord"},"type":"array","title":"Actions"}},"type":"object","required":["layer","mode","enforce_enabled","system_changes_permitted","policies_considered","planned","simulated","applied","failed","actions"],"title":"LayerSyncResponse","description":"Result of a platform layer sync"},"LoginRequest":{"properties":{"username":{"type":"string","maxLength":100,"minLength":3,"title":"Username"},"password":{"type":"string","minLength":8,"title":"Password"}},"type":"object","required":["username","password"],"title":"LoginRequest","description":"Login request"},"LoginResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"refresh_token":{"type":"string","title":"Refresh Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"expires_in":{"type":"integer","title":"Expires In"},"user":{"$ref":"#/components/schemas/UserResponse"}},"type":"object","required":["access_token","refresh_token","expires_in","user"],"title":"LoginResponse","description":"Login response with tokens"},"NotificationConfigCreate":{"properties":{"channel":{"type":"string","pattern":"^(email|slack|webhook|pagerduty|teams)$","title":"Channel"},"endpoint":{"type":"string","maxLength":500,"minLength":1,"title":"Endpoint"},"events":{"items":{"$ref":"#/components/schemas/AuditEventType"},"type":"array","title":"Events"},"min_severity":{"$ref":"#/components/schemas/SeverityLevel","default":"warning"},"enabled":{"type":"boolean","title":"Enabled","default":true}},"type":"object","required":["channel","endpoint"],"title":"NotificationConfigCreate","description":"Create notification config request"},"NotificationConfigListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/NotificationConfigResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"NotificationConfigListResponse","description":"Notification config list response"},"NotificationConfigResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"channel":{"type":"string","title":"Channel"},"endpoint":{"type":"string","title":"Endpoint"},"events":{"items":{"$ref":"#/components/schemas/AuditEventType"},"type":"array","title":"Events"},"min_severity":{"$ref":"#/components/schemas/SeverityLevel"},"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["id","channel","endpoint","events","min_severity","enabled"],"title":"NotificationConfigResponse","description":"Notification config response"},"NotificationStatsResponse":{"properties":{"sent":{"type":"integer","title":"Sent"},"failed":{"type":"integer","title":"Failed"},"queued":{"type":"integer","title":"Queued"}},"type":"object","required":["sent","failed","queued"],"title":"NotificationStatsResponse","description":"Notification statistics response"},"PolicyCreate":{"properties":{"natural_language":{"type":"string","maxLength":10000,"minLength":10,"title":"Natural Language"},"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description"},"frameworks":{"items":{"$ref":"#/components/schemas/ComplianceFramework"},"type":"array","title":"Frameworks"},"tags":{"items":{"type":"string"},"type":"array","maxItems":20,"title":"Tags"},"priority":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Priority","default":50}},"type":"object","required":["natural_language"],"title":"PolicyCreate","description":"Input model for creating a policy"},"PolicyListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PolicyResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["items","total","page","page_size","has_more"],"title":"PolicyListResponse","description":"Paginated policy list response"},"PolicyResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"name":{"type":"string","title":"Name"},"natural_language":{"type":"string","title":"Natural Language"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"status":{"$ref":"#/components/schemas/PolicyStatus"},"frameworks":{"items":{"$ref":"#/components/schemas/ComplianceFramework"},"type":"array","title":"Frameworks"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"priority":{"type":"integer","title":"Priority"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"version":{"type":"integer","title":"Version"},"enforcement_count":{"type":"integer","title":"Enforcement Count"},"allow_count":{"type":"integer","title":"Allow Count"},"deny_count":{"type":"integer","title":"Deny Count"}},"type":"object","required":["id","name","natural_language","description","status","frameworks","tags","priority","created_at","updated_at","version","enforcement_count","allow_count","deny_count"],"title":"PolicyResponse","description":"Policy response model"},"PolicyScope":{"type":"string","enum":["network","data","access","resource","system","industrial","api","database","file","process","compliance"],"title":"PolicyScope","description":"What the policy applies to"},"PolicyStatus":{"type":"string","enum":["draft","pending_review","active","suspended","deprecated","archived"],"title":"PolicyStatus","description":"Policy lifecycle status"},"PolicyTemplate":{"properties":{"id":{"type":"string","title":"Id","description":"Stable catalog identifier"},"framework":{"$ref":"#/components/schemas/ComplianceFramework"},"name":{"type":"string","title":"Name"},"natural_language":{"type":"string","title":"Natural Language","description":"Policy text accepted by POST /api/v1/policies/"},"priority":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Priority","description":"Suggested policy priority"},"control":{"type":"string","title":"Control","description":"Public framework control or safeguard reference"},"rationale":{"type":"string","title":"Rationale","description":"Why this maps to the cited control"}},"type":"object","required":["id","framework","name","natural_language","priority","control","rationale"],"title":"PolicyTemplate","description":"A reusable, framework-mapped policy statement."},"PolicyUpdate":{"properties":{"natural_language":{"anyOf":[{"type":"string","maxLength":10000,"minLength":10},{"type":"null"}],"title":"Natural Language"},"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description"},"status":{"anyOf":[{"$ref":"#/components/schemas/PolicyStatus"},{"type":"null"}]},"frameworks":{"anyOf":[{"items":{"$ref":"#/components/schemas/ComplianceFramework"},"type":"array"},{"type":"null"}],"title":"Frameworks"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":20},{"type":"null"}],"title":"Tags"},"priority":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Priority"}},"type":"object","title":"PolicyUpdate","description":"Input model for updating a policy"},"RefreshRequest":{"properties":{"refresh_token":{"type":"string","title":"Refresh Token"}},"type":"object","required":["refresh_token"],"title":"RefreshRequest","description":"Token refresh request"},"RefreshResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"expires_in":{"type":"integer","title":"Expires In"}},"type":"object","required":["access_token","expires_in"],"title":"RefreshResponse","description":"Token refresh response"},"RegisterRequest":{"properties":{"username":{"type":"string","maxLength":100,"minLength":3,"title":"Username"},"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","minLength":12,"title":"Password"},"confirm_password":{"type":"string","title":"Confirm Password"}},"type":"object","required":["username","email","password","confirm_password"],"title":"RegisterRequest","description":"User registration request"},"SeverityLevel":{"type":"string","enum":["debug","info","warning","error","critical","emergency"],"title":"SeverityLevel","description":"Event/alert severity levels"},"SystemMetrics":{"properties":{"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"total_policies":{"type":"integer","title":"Total Policies","default":0},"active_policies":{"type":"integer","title":"Active Policies","default":0},"policies_by_status":{"additionalProperties":{"type":"integer"},"type":"object","title":"Policies By Status"},"total_enforcements":{"type":"integer","title":"Total Enforcements","default":0},"enforcements_last_hour":{"type":"integer","title":"Enforcements Last Hour","default":0},"allow_rate":{"type":"number","title":"Allow Rate","default":0.0},"deny_rate":{"type":"number","title":"Deny Rate","default":0.0},"avg_latency_ms":{"type":"number","title":"Avg Latency Ms","default":0.0},"p99_latency_ms":{"type":"number","title":"P99 Latency Ms","default":0.0},"total_audit_events":{"type":"integer","title":"Total Audit Events","default":0},"blockchain_length":{"type":"integer","title":"Blockchain Length","default":0},"blockchain_valid":{"type":"boolean","title":"Blockchain Valid","default":true},"llm_available":{"type":"boolean","title":"Llm Available","default":false},"llm_provider":{"type":"string","title":"Llm Provider","default":"fallback"},"llm_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Llm Model"},"db_connected":{"type":"boolean","title":"Db Connected","default":true},"cache_hit_rate":{"type":"number","title":"Cache Hit Rate","default":0.0},"active_conflicts":{"type":"integer","title":"Active Conflicts","default":0},"conflicts_last_24h":{"type":"integer","title":"Conflicts Last 24H","default":0}},"type":"object","title":"SystemMetrics","description":"System health and performance metrics"},"TemplateListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PolicyTemplate"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"counts_by_framework":{"additionalProperties":{"type":"integer"},"type":"object","title":"Counts By Framework"}},"type":"object","required":["items","total","counts_by_framework"],"title":"TemplateListResponse","description":"Template catalog response."},"TestNotificationRequest":{"properties":{"channel":{"type":"string","pattern":"^(email|slack|webhook|pagerduty|teams)$","title":"Channel"},"endpoint":{"type":"string","title":"Endpoint"}},"type":"object","required":["channel","endpoint"],"title":"TestNotificationRequest","description":"Test notification request"},"TestNotificationResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","message"],"title":"TestNotificationResponse","description":"Test notification response"},"TestPolicyRequest":{"properties":{"user":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User"},"resource":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource"},"action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action"},"source_ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Ip"},"destination_ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination Ip"},"port":{"anyOf":[{"type":"integer","maximum":65535.0,"minimum":0.0},{"type":"null"}],"title":"Port"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"}},"type":"object","title":"TestPolicyRequest","description":"Request to test a policy"},"TestPolicyResponse":{"properties":{"allowed":{"type":"boolean","title":"Allowed"},"intent":{"type":"string","title":"Intent"},"reason":{"type":"string","title":"Reason"},"matched_policies":{"type":"integer","title":"Matched Policies"},"latency_ms":{"type":"number","title":"Latency Ms"},"sandbox":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Sandbox"},"layer":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Layer"}},"type":"object","required":["allowed","intent","reason","matched_policies","latency_ms"],"title":"TestPolicyResponse","description":"Response from policy test"},"UserResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"username":{"type":"string","title":"Username"},"email":{"type":"string","title":"Email"},"role":{"$ref":"#/components/schemas/AuthRole"},"tenant_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tenant Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_login":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login"},"is_active":{"type":"boolean","title":"Is Active"}},"type":"object","required":["id","username","email","role","tenant_id","created_at","last_login","is_active"],"title":"UserResponse","description":"User response model (excludes sensitive fields)"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}