{"openapi":"3.1.0","info":{"title":"Tensor Dynamics Watch API","description":"Headless edge video inference, structured events, immutable evidence, and durable signed webhooks. Legacy /api routes are not part of this contract.","version":"1.0.0"},"paths":{"/v1/system":{"get":{"tags":["System"],"summary":"Get System","operationId":"getSystem","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemResource"},"example":{"object":"system","node_id":"node_example1234","application_version":"1.0.0","public_contract_version":"1.0.0","started_at":"2026-08-29T12:00:00Z","ready":true,"auth_mode":"api_key","database":{"ok":true,"integrity":"ok"},"deployment":{},"integration_isolation":{"active":true,"legacy_automation":"available","quarantined_connectors":1,"quarantined_deliveries":1,"quarantined_actions":1},"sources":{"desired":1,"running":1},"monitors":{"desired":1,"running":1,"failed":1},"event_types":["monitor.alert.raised"]}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"object":"system","node_id":"node_example1234","application_version":"1.0.0","public_contract_version":"1.0.0","started_at":"2026-08-29T12:00:00Z","ready":true,"auth_mode":"api_key","database":{"ok":true,"integrity":"ok"},"deployment":{},"integration_isolation":{"active":true,"legacy_automation":"available","quarantined_connectors":1,"quarantined_deliveries":1,"quarantined_actions":1},"sources":{"desired":1,"running":1},"monitors":{"desired":1,"running":1,"failed":1},"event_types":["monitor.alert.raised"]}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"security":[{"BearerAuth":[]}],"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"object":"system","node_id":"node_example1234","application_version":"1.0.0","public_contract_version":"1.0.0","started_at":"2026-08-29T12:00:00Z","ready":true,"auth_mode":"api_key","database":{"ok":true,"integrity":"ok"},"deployment":{},"integration_isolation":{"active":true,"legacy_automation":"available","quarantined_connectors":1,"quarantined_deliveries":1,"quarantined_actions":1},"sources":{"desired":1,"running":1},"monitors":{"desired":1,"running":1,"failed":1},"event_types":["monitor.alert.raised"]}}}},"/v1/system/resources":{"get":{"tags":["System"],"summary":"Get System Resources","operationId":"getSystemResources","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemResourcesResource"},"example":{"cpu":{"logical_cores":8,"load_average":[0.25,0.1,0.05]},"memory":{},"gpu":{"providers":["CPUExecutionProvider"]},"disk":{"path":"/data","total_bytes":1,"used_bytes":1,"free_bytes":1},"inference":{"active":1,"queue_depth":1},"webhooks":{"pending":1,"dead_letter":1,"dns_preflight":{},"dns_delivery":{}},"commands":{"pending":1,"dead_letter":1,"pending_payload_bytes":1},"idempotency":{"total_rows":1,"completed_rows":1,"pending_rows":1,"frame_rows":1,"response_bytes":1,"max_rows":1,"frame_max_rows":1,"principal_max_rows":1,"principal_frame_max_rows":1,"max_bytes":1,"principal_max_bytes":1,"retention_seconds":1,"frame_retention_seconds":1,"cleanup_batch":1,"row_pressure":0.95,"byte_pressure":0.95,"near_capacity":true},"controls":{"sources":{"count":1,"max":1},"api_keys":{"count":1,"max":1},"pressure":0.95,"near_capacity":true},"database":{"counts":{},"bytes":{},"max":{},"pressure":{}},"sdk_storage":{"events":{"count":1,"max":1,"payload_bytes":1,"max_payload_bytes":1,"live_row_reserve":1,"live_payload_reserve_bytes":1,"test_count":1,"max_test_events":1,"test_payload_bytes":1,"max_test_payload_bytes":1,"retention_seconds":1},"connectors":{"count":1,"max":1,"public_count":1,"quarantined_count":1},"deliveries":{"count":1,"pending_count":1,"dead_letter_count":1,"max":1,"max_pending":1,"rendered_bytes":1,"max_rendered_bytes":1,"public_rendered_bytes":1,"quarantined_rendered_bytes":1,"public_count":1,"public_pending_count":1,"public_dead_letter_count":1,"quarantined_count":1,"quarantined_pending_count":1,"quarantined_dead_letter_count":1,"terminal_retention_seconds":1},"delivery_attempts":{"count":1,"max_per_delivery":1},"acknowledgements":{"count":1,"max":1,"max_per_event":1},"publishing":{"failed_total":1},"history_cleanup_batch":1},"operations":{"activity_rows":1,"max_activity_rows":1,"max_activity_per_incident":1,"essential_reserve":1,"essential_reserve_per_incident":1,"safety_reserve":0,"safety_reserve_per_incident":0,"active_incidents":1,"historical_incidents":1,"active_pinned_events":1,"pressure":0.95,"near_capacity":true},"hardware_actions":{"active_actions":1,"historical_actions":1,"active_event_pins":1,"total_actions":1,"max_actions":1,"audit_rows":1,"max_audit_rows":1,"max_audit_per_action":1,"safety_audit_reserve":1,"safety_audit_reserve_per_action":0,"terminal_audit_reserve":0,"terminal_audit_reserve_per_action":0,"terminal_retention_seconds":1,"cleanup_batch":1,"pressure":0.95,"near_capacity":true},"sse":{"current":{},"max":{},"available":{},"pressure":{},"expiry":{}},"rtsp":{"policy":{},"probes":{}},"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"cpu":{"logical_cores":8,"load_average":[0.25,0.1,0.05]},"memory":{},"gpu":{"providers":["CPUExecutionProvider"]},"disk":{"path":"/data","total_bytes":1,"used_bytes":1,"free_bytes":1},"inference":{"active":1,"queue_depth":1},"webhooks":{"pending":1,"dead_letter":1,"dns_preflight":{},"dns_delivery":{}},"commands":{"pending":1,"dead_letter":1,"pending_payload_bytes":1},"idempotency":{"total_rows":1,"completed_rows":1,"pending_rows":1,"frame_rows":1,"response_bytes":1,"max_rows":1,"frame_max_rows":1,"principal_max_rows":1,"principal_frame_max_rows":1,"max_bytes":1,"principal_max_bytes":1,"retention_seconds":1,"frame_retention_seconds":1,"cleanup_batch":1,"row_pressure":0.95,"byte_pressure":0.95,"near_capacity":true},"controls":{"sources":{"count":1,"max":1},"api_keys":{"count":1,"max":1},"pressure":0.95,"near_capacity":true},"database":{"counts":{},"bytes":{},"max":{},"pressure":{}},"sdk_storage":{"events":{"count":1,"max":1,"payload_bytes":1,"max_payload_bytes":1,"live_row_reserve":1,"live_payload_reserve_bytes":1,"test_count":1,"max_test_events":1,"test_payload_bytes":1,"max_test_payload_bytes":1,"retention_seconds":1},"connectors":{"count":1,"max":1,"public_count":1,"quarantined_count":1},"deliveries":{"count":1,"pending_count":1,"dead_letter_count":1,"max":1,"max_pending":1,"rendered_bytes":1,"max_rendered_bytes":1,"public_rendered_bytes":1,"quarantined_rendered_bytes":1,"public_count":1,"public_pending_count":1,"public_dead_letter_count":1,"quarantined_count":1,"quarantined_pending_count":1,"quarantined_dead_letter_count":1,"terminal_retention_seconds":1},"delivery_attempts":{"count":1,"max_per_delivery":1},"acknowledgements":{"count":1,"max":1,"max_per_event":1},"publishing":{"failed_total":1},"history_cleanup_batch":1},"operations":{"activity_rows":1,"max_activity_rows":1,"max_activity_per_incident":1,"essential_reserve":1,"essential_reserve_per_incident":1,"safety_reserve":0,"safety_reserve_per_incident":0,"active_incidents":1,"historical_incidents":1,"active_pinned_events":1,"pressure":0.95,"near_capacity":true},"hardware_actions":{"active_actions":1,"historical_actions":1,"active_event_pins":1,"total_actions":1,"max_actions":1,"audit_rows":1,"max_audit_rows":1,"max_audit_per_action":1,"safety_audit_reserve":1,"safety_audit_reserve_per_action":0,"terminal_audit_reserve":0,"terminal_audit_reserve_per_action":0,"terminal_retention_seconds":1,"cleanup_batch":1,"pressure":0.95,"near_capacity":true},"sse":{"current":{},"max":{},"available":{},"pressure":{},"expiry":{}},"rtsp":{"policy":{},"probes":{}},"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"security":[{"BearerAuth":[]}],"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"cpu":{"logical_cores":8,"load_average":[0.25,0.1,0.05]},"memory":{},"gpu":{"providers":["CPUExecutionProvider"]},"disk":{"path":"/data","total_bytes":1,"used_bytes":1,"free_bytes":1},"inference":{"active":1,"queue_depth":1},"webhooks":{"pending":1,"dead_letter":1,"dns_preflight":{},"dns_delivery":{}},"commands":{"pending":1,"dead_letter":1,"pending_payload_bytes":1},"idempotency":{"total_rows":1,"completed_rows":1,"pending_rows":1,"frame_rows":1,"response_bytes":1,"max_rows":1,"frame_max_rows":1,"principal_max_rows":1,"principal_frame_max_rows":1,"max_bytes":1,"principal_max_bytes":1,"retention_seconds":1,"frame_retention_seconds":1,"cleanup_batch":1,"row_pressure":0.95,"byte_pressure":0.95,"near_capacity":true},"controls":{"sources":{"count":1,"max":1},"api_keys":{"count":1,"max":1},"pressure":0.95,"near_capacity":true},"database":{"counts":{},"bytes":{},"max":{},"pressure":{}},"sdk_storage":{"events":{"count":1,"max":1,"payload_bytes":1,"max_payload_bytes":1,"live_row_reserve":1,"live_payload_reserve_bytes":1,"test_count":1,"max_test_events":1,"test_payload_bytes":1,"max_test_payload_bytes":1,"retention_seconds":1},"connectors":{"count":1,"max":1,"public_count":1,"quarantined_count":1},"deliveries":{"count":1,"pending_count":1,"dead_letter_count":1,"max":1,"max_pending":1,"rendered_bytes":1,"max_rendered_bytes":1,"public_rendered_bytes":1,"quarantined_rendered_bytes":1,"public_count":1,"public_pending_count":1,"public_dead_letter_count":1,"quarantined_count":1,"quarantined_pending_count":1,"quarantined_dead_letter_count":1,"terminal_retention_seconds":1},"delivery_attempts":{"count":1,"max_per_delivery":1},"acknowledgements":{"count":1,"max":1,"max_per_event":1},"publishing":{"failed_total":1},"history_cleanup_batch":1},"operations":{"activity_rows":1,"max_activity_rows":1,"max_activity_per_incident":1,"essential_reserve":1,"essential_reserve_per_incident":1,"safety_reserve":0,"safety_reserve_per_incident":0,"active_incidents":1,"historical_incidents":1,"active_pinned_events":1,"pressure":0.95,"near_capacity":true},"hardware_actions":{"active_actions":1,"historical_actions":1,"active_event_pins":1,"total_actions":1,"max_actions":1,"audit_rows":1,"max_audit_rows":1,"max_audit_per_action":1,"safety_audit_reserve":1,"safety_audit_reserve_per_action":0,"terminal_audit_reserve":0,"terminal_audit_reserve_per_action":0,"terminal_retention_seconds":1,"cleanup_batch":1,"pressure":0.95,"near_capacity":true},"sse":{"current":{},"max":{},"available":{},"pressure":{},"expiry":{}},"rtsp":{"policy":{},"probes":{}},"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}}},"/v1/system/models":{"get":{"tags":["System"],"summary":"Get System Models","operationId":"listSystemModels","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemModelList"},"example":{"object":"list","data":[{"id":"default","profile":"local_balanced","provider":"vllm","target":"http://model:8080","credential_configured":true,"data_boundary":"edge_or_customer_private"}]}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"object":"list","data":[{"id":"default","profile":"local_balanced","provider":"vllm","target":"http://model:8080","credential_configured":true,"data_boundary":"edge_or_customer_private"}]}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"security":[{"BearerAuth":[]}],"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"object":"list","data":[{"id":"default","profile":"local_balanced","provider":"vllm","target":"http://model:8080","credential_configured":true,"data_boundary":"edge_or_customer_private"}]}}}},"/v1/system/models/test":{"post":{"tags":["System"],"summary":"Test System Model","operationId":"testSystemModel","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemModelTestResource"},"example":{"ok":true}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"ok":true}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"security":[{"BearerAuth":[]}],"x-sentinel-request-example":{"method":"POST","path":"/v1/system/models/test","body":null},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"ok":true}}}},"/v1/settings/alert-policy":{"get":{"tags":["Settings"],"summary":"Get Alert Policy","operationId":"getAlertPolicy","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertPolicyResource"},"example":{"critical":{"criteria":"Confirmed after-hours entry.","notify":["webhook"],"sound":"alarm","visual":"fullscreen"},"notify_local_candidates":false,"suspicious":{"criteria":"","notify":[],"sound":"none","visual":"tile"}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"critical":{"criteria":"Confirmed after-hours entry.","notify":["webhook"],"sound":"alarm","visual":"fullscreen"},"notify_local_candidates":false,"suspicious":{"criteria":"","notify":[],"sound":"none","visual":"tile"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"critical":{"criteria":"Confirmed after-hours entry.","notify":["webhook"],"sound":"alarm","visual":"fullscreen"},"notify_local_candidates":false,"suspicious":{"criteria":"","notify":[],"sound":"none","visual":"tile"}}}},"put":{"tags":["Settings"],"summary":"Update Alert Policy","operationId":"updateAlertPolicy","security":[{"BearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertPolicyResource"},"example":{"critical":{"criteria":"Confirmed after-hours entry.","notify":["webhook"],"sound":"alarm","visual":"fullscreen"},"notify_local_candidates":false,"suspicious":{"criteria":"","notify":[],"sound":"none","visual":"tile"}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertPolicyResource"},"example":{"critical":{"criteria":"Confirmed after-hours entry.","notify":["webhook"],"sound":"alarm","visual":"fullscreen"},"notify_local_candidates":false,"suspicious":{"criteria":"","notify":[],"sound":"none","visual":"tile"}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"critical":{"criteria":"Confirmed after-hours entry.","notify":["webhook"],"sound":"alarm","visual":"fullscreen"},"notify_local_candidates":false,"suspicious":{"criteria":"","notify":[],"sound":"none","visual":"tile"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"PUT","path":"/v1/settings/alert-policy","body":{"critical":{"criteria":"Confirmed after-hours entry.","notify":["webhook"],"sound":"alarm","visual":"fullscreen"},"notify_local_candidates":false,"suspicious":{"criteria":"","notify":[],"sound":"none","visual":"tile"}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"critical":{"criteria":"Confirmed after-hours entry.","notify":["webhook"],"sound":"alarm","visual":"fullscreen"},"notify_local_candidates":false,"suspicious":{"criteria":"","notify":[],"sound":"none","visual":"tile"}}}}},"/v1/settings/prompt-map":{"get":{"tags":["Settings"],"summary":"Get Prompt Map","operationId":"getPromptMap","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptMapResource"},"example":{"channels":{"1":{"brief":"","preset_id":"after_hours","vacant_brief":"Alert on any person in this area."}},"mode":"per_channel"}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"channels":{"1":{"brief":"","preset_id":"after_hours","vacant_brief":"Alert on any person in this area."}},"mode":"per_channel"}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"channels":{"1":{"brief":"","preset_id":"after_hours","vacant_brief":"Alert on any person in this area."}},"mode":"per_channel"}}},"put":{"tags":["Settings"],"summary":"Update Prompt Map","operationId":"updatePromptMap","security":[{"BearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptMapResource"},"example":{"channels":{"1":{"brief":"","preset_id":"after_hours","vacant_brief":"Alert on any person in this area."}},"mode":"per_channel"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromptMapResource"},"example":{"channels":{"1":{"brief":"","preset_id":"after_hours","vacant_brief":"Alert on any person in this area."}},"mode":"per_channel"}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"channels":{"1":{"brief":"","preset_id":"after_hours","vacant_brief":"Alert on any person in this area."}},"mode":"per_channel"}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"PUT","path":"/v1/settings/prompt-map","body":{"channels":{"1":{"brief":"","preset_id":"after_hours","vacant_brief":"Alert on any person in this area."}},"mode":"per_channel"}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"channels":{"1":{"brief":"","preset_id":"after_hours","vacant_brief":"Alert on any person in this area."}},"mode":"per_channel"}}}},"/v1/api-keys":{"get":{"tags":["API keys"],"summary":"List Api Keys","operationId":"listApiKeys","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyList"},"example":{"object":"list","data":[{"id":"key_example1234","object":"api_key","name":"Example resource","scopes":["events:read"],"enabled":true,"created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}],"has_more":false}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"object":"list","data":[{"id":"key_example1234","object":"api_key","name":"Example resource","scopes":["events:read"],"enabled":true,"created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}],"has_more":false}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"object":"list","data":[{"id":"key_example1234","object":"api_key","name":"Example resource","scopes":["events:read"],"enabled":true,"created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}],"has_more":false}}},"post":{"tags":["API keys"],"summary":"Create Api Key","operationId":"createApiKey","security":[{"BearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreate"},"example":{"name":"Warehouse SIEM reader","scopes":["events:read","incidents:read"],"expires_in_days":365}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreatedResource"},"example":{"id":"key_example1234","object":"api_key","name":"Example resource","token":"sk_sentinel_example_replace_me","scopes":["events:read"],"enabled":true,"created_at":"2026-08-29T12:00:00Z"}}},"x-sentinel-success-example":{"status":201,"media_type":"application/json","body":{"id":"key_example1234","object":"api_key","name":"Example resource","token":"sk_sentinel_example_replace_me","scopes":["events:read"],"enabled":true,"created_at":"2026-08-29T12:00:00Z"}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"POST","path":"/v1/api-keys","body":{"name":"Warehouse SIEM reader","scopes":["events:read","incidents:read"],"expires_in_days":365}},"x-sentinel-success-example":{"status":201,"media_type":"application/json","body":{"id":"key_example1234","object":"api_key","name":"Example resource","token":"sk_sentinel_example_replace_me","scopes":["events:read"],"enabled":true,"created_at":"2026-08-29T12:00:00Z"}}}},"/v1/api-keys/{key_id}":{"delete":{"tags":["API keys"],"summary":"Revoke Api Key","operationId":"revokeApiKey","security":[{"BearerAuth":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"},"example":"key_example1234"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"responses":{"204":{"description":"Successful Response","x-sentinel-success-example":{"status":204,"media_type":null,"body":null}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"DELETE","path":"/v1/api-keys/{key_id}","body":null},"x-sentinel-success-example":{"status":204,"media_type":null,"body":null}}},"/v1/sources":{"get":{"tags":["Sources"],"summary":"List Sources","operationId":"listSources","security":[{"BearerAuth":[]}],"parameters":[{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor returned by the previous sources page.","examples":["cur_opaque_encrypted_cursor"],"title":"After"},"description":"Opaque cursor returned by the previous sources page.","example":"cur_opaque_cursor_from_previous_response"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Maximum resources to return (default 100, maximum 500).","default":100,"title":"Limit"},"description":"Maximum resources to return (default 100, maximum 500).","example":100}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceList"},"example":{"object":"list","data":[{"id":"src_example1234","object":"source","name":"Example resource","input":{"type":"frame"},"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}],"has_more":false}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"object":"list","data":[{"id":"src_example1234","object":"source","name":"Example resource","input":{"type":"frame"},"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}],"has_more":false}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"object":"list","data":[{"id":"src_example1234","object":"source","name":"Example resource","input":{"type":"frame"},"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}],"has_more":false}}},"post":{"tags":["Sources"],"summary":"Create Source","operationId":"createSource","security":[{"BearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceCreate"},"example":{"enabled":true,"input":{"type":"frame"},"name":"Loading dock test source","site_id":"warehouse-01"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceResource"},"example":{"id":"src_example1234","object":"source","name":"Example resource","input":{"type":"frame"},"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"x-sentinel-success-example":{"status":201,"media_type":"application/json","body":{"id":"src_example1234","object":"source","name":"Example resource","input":{"type":"frame"},"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"POST","path":"/v1/sources","body":{"enabled":true,"input":{"type":"frame"},"name":"Loading dock test source","site_id":"warehouse-01"}},"x-sentinel-success-example":{"status":201,"media_type":"application/json","body":{"id":"src_example1234","object":"source","name":"Example resource","input":{"type":"frame"},"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}}},"/v1/sources/{source_id}":{"get":{"tags":["Sources"],"summary":"Get Source","operationId":"getSource","security":[{"BearerAuth":[]}],"parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"string","title":"Source Id"},"example":"src_example1234"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceResource"},"example":{"id":"src_example1234","object":"source","name":"Example resource","input":{"type":"frame"},"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"src_example1234","object":"source","name":"Example resource","input":{"type":"frame"},"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"src_example1234","object":"source","name":"Example resource","input":{"type":"frame"},"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"patch":{"tags":["Sources"],"summary":"Update Source","operationId":"updateSource","security":[{"BearerAuth":[]}],"parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"string","title":"Source Id"},"example":"src_example1234"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourcePatch"},"example":{"name":"Loading dock east","enabled":true}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceResource"},"example":{"id":"src_example1234","object":"source","name":"Example resource","input":{"type":"frame"},"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"src_example1234","object":"source","name":"Example resource","input":{"type":"frame"},"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"PATCH","path":"/v1/sources/{source_id}","body":{"name":"Loading dock east","enabled":true}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"src_example1234","object":"source","name":"Example resource","input":{"type":"frame"},"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"delete":{"tags":["Sources"],"summary":"Delete Source","operationId":"deleteSource","security":[{"BearerAuth":[]}],"parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"string","title":"Source Id"},"example":"src_example1234"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"responses":{"204":{"description":"Successful Response","x-sentinel-success-example":{"status":204,"media_type":null,"body":null}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"DELETE","path":"/v1/sources/{source_id}","body":null},"x-sentinel-success-example":{"status":204,"media_type":null,"body":null}}},"/v1/sources/{source_id}/test":{"post":{"tags":["Sources"],"summary":"Test Source","operationId":"testSource","security":[{"BearerAuth":[]}],"parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"string","title":"Source Id"},"example":"src_example1234"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceTestResult"},"example":{"ok":true,"source_id":"src_example1234"}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"ok":true,"source_id":"src_example1234"}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"POST","path":"/v1/sources/{source_id}/test","body":null},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"ok":true,"source_id":"src_example1234"}}}},"/v1/sources/{source_id}/frames":{"post":{"tags":["Sources"],"summary":"Ingest Source Frame","operationId":"ingestSourceFrame","security":[{"BearerAuth":[]}],"parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"string","title":"Source Id"},"example":"src_example1234"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FrameIngestResponse"},"example":{"accepted":true,"source_id":"src_example1234","width":1920,"height":1080,"content_type":"image/jpeg","image_url":"example"}}},"x-sentinel-success-example":{"status":202,"media_type":"application/json","body":{"accepted":true,"source_id":"src_example1234","width":1920,"height":1080,"content_type":"image/jpeg","image_url":"example"}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Request Entity Too Large"},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Unsupported Media Type"}},"requestBody":{"required":true,"content":{"image/jpeg":{"schema":{"type":"string","format":"binary"},"example":"<binary JPEG frame>"},"application/json":{"schema":{"type":"object","required":["image_base64"],"properties":{"image_base64":{"type":"string"}}},"example":{"image_base64":"/9j/4AAQSkZJRg..."}}}},"x-sentinel-request-example":{"method":"POST","path":"/v1/sources/{source_id}/frames","body":"<binary JPEG frame>"},"x-sentinel-success-example":{"status":202,"media_type":"application/json","body":{"accepted":true,"source_id":"src_example1234","width":1920,"height":1080,"content_type":"image/jpeg","image_url":"example"}}}},"/v1/sources/{source_id}/image":{"get":{"tags":["Sources"],"summary":"Get Source Image","operationId":"getSourceImage","security":[{"BearerAuth":[]}],"parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"string","title":"Source Id"},"example":"src_example1234"},{"name":"view","in":"query","required":false,"schema":{"enum":["preview","inference"],"type":"string","default":"preview","title":"View"},"example":"preview"}],"responses":{"200":{"description":"Current source JPEG frame","content":{"image/jpeg":{"schema":{"type":"string","format":"binary"},"example":"<binary JPEG frame>"}},"x-sentinel-success-example":{"status":200,"media_type":"image/jpeg","body":"<binary JPEG frame>"}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-success-example":{"status":200,"media_type":"image/jpeg","body":"<binary JPEG frame>"}}},"/v1/sources/{source_id}/stream":{"get":{"tags":["Sources"],"summary":"Stream Source Preview","operationId":"streamSourcePreview","security":[{"BearerAuth":[]}],"parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"string","title":"Source Id"},"example":"src_example1234"},{"name":"max_fps","in":"query","required":false,"schema":{"type":"number","maximum":30.0,"minimum":1.0,"description":"Maximum preview frame rate for this consumer.","default":15.0,"title":"Max Fps"},"description":"Maximum preview frame rate for this consumer.","example":"example"},{"name":"max_height","in":"query","required":false,"schema":{"type":"integer","maximum":2160,"minimum":0,"description":"Optional display height; 0 keeps the source preview size.","default":0,"title":"Max Height"},"description":"Optional display height; 0 keeps the source preview size.","example":"example"}],"responses":{"200":{"description":"Bounded live MJPEG preview for the source","content":{"multipart/x-mixed-replace":{"schema":{"type":"string","format":"binary"},"example":"<multipart JPEG stream>"}},"x-sentinel-success-example":{"status":200,"media_type":"multipart/x-mixed-replace","body":"<multipart JPEG stream>"}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-success-example":{"status":200,"media_type":"multipart/x-mixed-replace","body":"<multipart JPEG stream>"}}},"/v1/analyses":{"get":{"tags":["Analyses"],"summary":"List Latest Analyses","operationId":"listLatestAnalyses","security":[{"BearerAuth":[]}],"parameters":[{"name":"source_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Id"},"example":"src_example1234"},{"name":"monitor_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Monitor Id"},"example":"mon_example1234"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"},"example":100}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalysisList"},"example":{"object":"list","data":[{"id":"res_example1234","object":"analysis","schema":"sentinel.analysis.v1","contract_version":1,"node_id":"node_example1234","sequence":42,"created_at":"2026-08-29T12:00:00Z","source_id":"src_example1234","monitor_id":"mon_example1234","status":"safe","severity":"safe","text":"example"}],"has_more":false}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"object":"list","data":[{"id":"res_example1234","object":"analysis","schema":"sentinel.analysis.v1","contract_version":1,"node_id":"node_example1234","sequence":42,"created_at":"2026-08-29T12:00:00Z","source_id":"src_example1234","monitor_id":"mon_example1234","status":"safe","severity":"safe","text":"example"}],"has_more":false}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"object":"list","data":[{"id":"res_example1234","object":"analysis","schema":"sentinel.analysis.v1","contract_version":1,"node_id":"node_example1234","sequence":42,"created_at":"2026-08-29T12:00:00Z","source_id":"src_example1234","monitor_id":"mon_example1234","status":"safe","severity":"safe","text":"example"}],"has_more":false}}}},"/v1/analyses/stream":{"get":{"tags":["Analyses"],"summary":"Stream Analyses","operationId":"streamAnalyses","security":[{"BearerAuth":[]}],"parameters":[{"name":"source_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Id"},"example":"src_example1234"},{"name":"monitor_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Monitor Id"},"example":"mon_example1234"}],"responses":{"200":{"description":"Live ordinary inference text stream","content":{"text/event-stream":{"schema":{"type":"string"},"example":"id: 42\nevent: analysis\ndata: {\"schema\":\"sentinel.analysis.v1\",\"status\":\"safe\",\"text\":\"No anomaly detected.\"}\n\n"}},"x-sentinel-success-example":{"status":200,"media_type":"text/event-stream","body":"id: 42\nevent: analysis\ndata: {\"schema\":\"sentinel.analysis.v1\",\"status\":\"safe\",\"text\":\"No anomaly detected.\"}\n\n"}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-success-example":{"status":200,"media_type":"text/event-stream","body":"id: 42\nevent: analysis\ndata: {\"schema\":\"sentinel.analysis.v1\",\"status\":\"safe\",\"text\":\"No anomaly detected.\"}\n\n"}}},"/v1/monitors":{"get":{"tags":["Monitors"],"summary":"List Monitors","operationId":"listMonitors","security":[{"BearerAuth":[]}],"parameters":[{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor returned by the previous monitors page.","examples":["cur_opaque_encrypted_cursor"],"title":"After"},"description":"Opaque cursor returned by the previous monitors page.","example":"cur_opaque_cursor_from_previous_response"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Maximum resources to return (default 100, maximum 500).","default":100,"title":"Limit"},"description":"Maximum resources to return (default 100, maximum 500).","example":100}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorList"},"example":{"object":"list","data":[{"id":"mon_example1234","object":"monitor","source_id":"src_example1234","name":"Example resource","prompt":"Alert when a person enters after business hours.","inference_window_ms":1,"inference_frames_per_window":1,"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}],"has_more":false}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"object":"list","data":[{"id":"mon_example1234","object":"monitor","source_id":"src_example1234","name":"Example resource","prompt":"Alert when a person enters after business hours.","inference_window_ms":1,"inference_frames_per_window":1,"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}],"has_more":false}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"object":"list","data":[{"id":"mon_example1234","object":"monitor","source_id":"src_example1234","name":"Example resource","prompt":"Alert when a person enters after business hours.","inference_window_ms":1,"inference_frames_per_window":1,"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}],"has_more":false}}},"post":{"tags":["Monitors"],"summary":"Create Monitor","operationId":"createMonitor","security":[{"BearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorCreate"},"example":{"enabled":true,"language":"en","name":"After-hours entry","prompt":"Alert when a person enters after business hours.","source_id":"src_example1234"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorResource"},"example":{"id":"mon_example1234","object":"monitor","source_id":"src_example1234","name":"Example resource","prompt":"Alert when a person enters after business hours.","inference_window_ms":1,"inference_frames_per_window":1,"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"x-sentinel-success-example":{"status":201,"media_type":"application/json","body":{"id":"mon_example1234","object":"monitor","source_id":"src_example1234","name":"Example resource","prompt":"Alert when a person enters after business hours.","inference_window_ms":1,"inference_frames_per_window":1,"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"POST","path":"/v1/monitors","body":{"enabled":true,"language":"en","name":"After-hours entry","prompt":"Alert when a person enters after business hours.","source_id":"src_example1234"}},"x-sentinel-success-example":{"status":201,"media_type":"application/json","body":{"id":"mon_example1234","object":"monitor","source_id":"src_example1234","name":"Example resource","prompt":"Alert when a person enters after business hours.","inference_window_ms":1,"inference_frames_per_window":1,"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}}},"/v1/monitors/{monitor_id}":{"get":{"tags":["Monitors"],"summary":"Get Monitor","operationId":"getMonitor","security":[{"BearerAuth":[]}],"parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"string","title":"Monitor Id"},"example":"mon_example1234"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorResource"},"example":{"id":"mon_example1234","object":"monitor","source_id":"src_example1234","name":"Example resource","prompt":"Alert when a person enters after business hours.","inference_window_ms":1,"inference_frames_per_window":1,"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"mon_example1234","object":"monitor","source_id":"src_example1234","name":"Example resource","prompt":"Alert when a person enters after business hours.","inference_window_ms":1,"inference_frames_per_window":1,"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"mon_example1234","object":"monitor","source_id":"src_example1234","name":"Example resource","prompt":"Alert when a person enters after business hours.","inference_window_ms":1,"inference_frames_per_window":1,"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"patch":{"tags":["Monitors"],"summary":"Update Monitor","operationId":"updateMonitor","security":[{"BearerAuth":[]}],"parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"string","title":"Monitor Id"},"example":"mon_example1234"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorPatch"},"example":{"prompt":"Alert when a person enters after business hours.","enabled":true}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorResource"},"example":{"id":"mon_example1234","object":"monitor","source_id":"src_example1234","name":"Example resource","prompt":"Alert when a person enters after business hours.","inference_window_ms":1,"inference_frames_per_window":1,"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"mon_example1234","object":"monitor","source_id":"src_example1234","name":"Example resource","prompt":"Alert when a person enters after business hours.","inference_window_ms":1,"inference_frames_per_window":1,"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"PATCH","path":"/v1/monitors/{monitor_id}","body":{"prompt":"Alert when a person enters after business hours.","enabled":true}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"mon_example1234","object":"monitor","source_id":"src_example1234","name":"Example resource","prompt":"Alert when a person enters after business hours.","inference_window_ms":1,"inference_frames_per_window":1,"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"delete":{"tags":["Monitors"],"summary":"Delete Monitor","operationId":"deleteMonitor","security":[{"BearerAuth":[]}],"parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"string","title":"Monitor Id"},"example":"mon_example1234"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"responses":{"204":{"description":"Successful Response","x-sentinel-success-example":{"status":204,"media_type":null,"body":null}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"DELETE","path":"/v1/monitors/{monitor_id}","body":null},"x-sentinel-success-example":{"status":204,"media_type":null,"body":null}}},"/v1/monitors/{monitor_id}/start":{"post":{"tags":["Monitors"],"summary":"Start Monitor","operationId":"startMonitor","security":[{"BearerAuth":[]}],"parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"string","title":"Monitor Id"},"example":"mon_example1234"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorResource"},"example":{"id":"mon_example1234","object":"monitor","source_id":"src_example1234","name":"Example resource","prompt":"Alert when a person enters after business hours.","inference_window_ms":1,"inference_frames_per_window":1,"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"mon_example1234","object":"monitor","source_id":"src_example1234","name":"Example resource","prompt":"Alert when a person enters after business hours.","inference_window_ms":1,"inference_frames_per_window":1,"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"POST","path":"/v1/monitors/{monitor_id}/start","body":null},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"mon_example1234","object":"monitor","source_id":"src_example1234","name":"Example resource","prompt":"Alert when a person enters after business hours.","inference_window_ms":1,"inference_frames_per_window":1,"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}}},"/v1/monitors/{monitor_id}/stop":{"post":{"tags":["Monitors"],"summary":"Stop Monitor","operationId":"stopMonitor","security":[{"BearerAuth":[]}],"parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"string","title":"Monitor Id"},"example":"mon_example1234"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorResource"},"example":{"id":"mon_example1234","object":"monitor","source_id":"src_example1234","name":"Example resource","prompt":"Alert when a person enters after business hours.","inference_window_ms":1,"inference_frames_per_window":1,"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"mon_example1234","object":"monitor","source_id":"src_example1234","name":"Example resource","prompt":"Alert when a person enters after business hours.","inference_window_ms":1,"inference_frames_per_window":1,"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"POST","path":"/v1/monitors/{monitor_id}/stop","body":null},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"mon_example1234","object":"monitor","source_id":"src_example1234","name":"Example resource","prompt":"Alert when a person enters after business hours.","inference_window_ms":1,"inference_frames_per_window":1,"enabled":true,"desired_state":"running","runtime_state":"running","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}}},"/v1/monitors/{monitor_id}/test":{"post":{"tags":["Monitors"],"summary":"Test Monitor","operationId":"testMonitor","security":[{"BearerAuth":[]}],"parameters":[{"name":"monitor_id","in":"path","required":true,"schema":{"type":"string","title":"Monitor Id"},"example":"mon_example1234"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorTestResource"},"example":{"ok":true,"monitor_id":"mon_example1234","source_id":"src_example1234","queued":true}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"ok":true,"monitor_id":"mon_example1234","source_id":"src_example1234","queued":true}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"POST","path":"/v1/monitors/{monitor_id}/test","body":null},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"ok":true,"monitor_id":"mon_example1234","source_id":"src_example1234","queued":true}}}},"/v1/events":{"get":{"tags":["Events"],"summary":"List Events","operationId":"listEvents","security":[{"BearerAuth":[]}],"parameters":[{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque encrypted cursor from next_cursor. Legacy plaintext/base64 sequence cursors are rejected.","examples":["cur_opaque_encrypted_cursor"],"title":"After"},"description":"Opaque encrypted cursor from next_cursor. Legacy plaintext/base64 sequence cursors are rejected.","example":"cur_opaque_cursor_from_previous_response"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"},"example":100}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventList"},"example":{"object":"list","data":[{"id":"evt_example1234","object":"event","schema":"sentinel.event.v1","contract_version":1,"node_id":"node_example1234","sequence":42,"type":"monitor.alert.raised","state":"raised","severity":"critical","created_at":"2026-08-29T12:00:00Z","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","correlation_id":"camera:1:after-hours-entry","evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}],"has_more":true}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"object":"list","data":[{"id":"evt_example1234","object":"event","schema":"sentinel.event.v1","contract_version":1,"node_id":"node_example1234","sequence":42,"type":"monitor.alert.raised","state":"raised","severity":"critical","created_at":"2026-08-29T12:00:00Z","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","correlation_id":"camera:1:after-hours-entry","evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}],"has_more":true}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"object":"list","data":[{"id":"evt_example1234","object":"event","schema":"sentinel.event.v1","contract_version":1,"node_id":"node_example1234","sequence":42,"type":"monitor.alert.raised","state":"raised","severity":"critical","created_at":"2026-08-29T12:00:00Z","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","correlation_id":"camera:1:after-hours-entry","evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}],"has_more":true}}}},"/v1/events/stream":{"get":{"tags":["Events"],"summary":"Stream Events","operationId":"streamEvents","security":[{"BearerAuth":[]}],"parameters":[{"name":"after_sequence","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"After Sequence"},"example":0}],"responses":{"200":{"description":"Server-sent public Event stream","content":{"text/event-stream":{"schema":{"type":"string"},"example":"id: 42\nevent: monitor.alert.raised\ndata: {\"id\":\"evt_example\",\"schema\":\"sentinel.event.v1\"}\n\n"}},"x-sentinel-success-example":{"status":200,"media_type":"text/event-stream","body":"id: 42\nevent: monitor.alert.raised\ndata: {\"id\":\"evt_example\",\"schema\":\"sentinel.event.v1\"}\n\n"}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-success-example":{"status":200,"media_type":"text/event-stream","body":"id: 42\nevent: monitor.alert.raised\ndata: {\"id\":\"evt_example\",\"schema\":\"sentinel.event.v1\"}\n\n"}}},"/v1/events/test":{"post":{"tags":["Events"],"summary":"Create Test Event","operationId":"createTestEvent","security":[{"BearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestEventCreate"},"example":{"severity":"critical","source_id":"src_example1234","summary":"A deterministic test event from the public API.","title":"Integration test","type":"sdk.test"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventResource"},"example":{"id":"evt_example1234","object":"event","schema":"sentinel.event.v1","contract_version":1,"node_id":"node_example1234","sequence":42,"type":"monitor.alert.raised","state":"raised","severity":"critical","created_at":"2026-08-29T12:00:00Z","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","correlation_id":"camera:1:after-hours-entry","evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}},"x-sentinel-success-example":{"status":201,"media_type":"application/json","body":{"id":"evt_example1234","object":"event","schema":"sentinel.event.v1","contract_version":1,"node_id":"node_example1234","sequence":42,"type":"monitor.alert.raised","state":"raised","severity":"critical","created_at":"2026-08-29T12:00:00Z","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","correlation_id":"camera:1:after-hours-entry","evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"POST","path":"/v1/events/test","body":{"severity":"critical","source_id":"src_example1234","summary":"A deterministic test event from the public API.","title":"Integration test","type":"sdk.test"}},"x-sentinel-success-example":{"status":201,"media_type":"application/json","body":{"id":"evt_example1234","object":"event","schema":"sentinel.event.v1","contract_version":1,"node_id":"node_example1234","sequence":42,"type":"monitor.alert.raised","state":"raised","severity":"critical","created_at":"2026-08-29T12:00:00Z","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","correlation_id":"camera:1:after-hours-entry","evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}}},"/v1/events/{event_id}":{"get":{"tags":["Events"],"summary":"Get Event","operationId":"getEvent","security":[{"BearerAuth":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"},"example":"evt_example1234"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventResource"},"example":{"id":"evt_example1234","object":"event","schema":"sentinel.event.v1","contract_version":1,"node_id":"node_example1234","sequence":42,"type":"monitor.alert.raised","state":"raised","severity":"critical","created_at":"2026-08-29T12:00:00Z","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","correlation_id":"camera:1:after-hours-entry","evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"evt_example1234","object":"event","schema":"sentinel.event.v1","contract_version":1,"node_id":"node_example1234","sequence":42,"type":"monitor.alert.raised","state":"raised","severity":"critical","created_at":"2026-08-29T12:00:00Z","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","correlation_id":"camera:1:after-hours-entry","evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"evt_example1234","object":"event","schema":"sentinel.event.v1","contract_version":1,"node_id":"node_example1234","sequence":42,"type":"monitor.alert.raised","state":"raised","severity":"critical","created_at":"2026-08-29T12:00:00Z","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","correlation_id":"camera:1:after-hours-entry","evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}}},"/v1/events/{event_id}/image":{"get":{"tags":["Events"],"summary":"Get Event Image","operationId":"getEventImage","security":[{"BearerAuth":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"},"example":"evt_example1234"}],"responses":{"200":{"description":"Immutable retained Event JPEG evidence","content":{"image/jpeg":{"schema":{"type":"string","format":"binary"},"example":"<binary JPEG evidence>"}},"x-sentinel-success-example":{"status":200,"media_type":"image/jpeg","body":"<binary JPEG evidence>"}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"304":{"description":"ETag matched"}},"x-sentinel-success-example":{"status":200,"media_type":"image/jpeg","body":"<binary JPEG evidence>"}}},"/v1/events/{event_id}/clip":{"get":{"tags":["Events"],"summary":"Get Event Clip","operationId":"getEventClip","security":[{"BearerAuth":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"},"example":"evt_example1234"}],"responses":{"200":{"description":"Retained Event video clip when available","content":{"video/mp4":{"schema":{"type":"string","format":"binary"},"example":"<binary MP4 clip>"}},"x-sentinel-success-example":{"status":200,"media_type":"video/mp4","body":"<binary MP4 clip>"}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-success-example":{"status":200,"media_type":"video/mp4","body":"<binary MP4 clip>"}}},"/v1/events/{event_id}/acknowledge":{"post":{"tags":["Events"],"summary":"Acknowledge Event","operationId":"acknowledgeEvent","security":[{"BearerAuth":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"string","title":"Event Id"},"example":"evt_example1234"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventAcknowledge"},"example":{"action":"acknowledged","note":"Security operator is reviewing the event."}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventResource"},"example":{"id":"evt_example1234","object":"event","schema":"sentinel.event.v1","contract_version":1,"node_id":"node_example1234","sequence":42,"type":"monitor.alert.raised","state":"raised","severity":"critical","created_at":"2026-08-29T12:00:00Z","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","correlation_id":"camera:1:after-hours-entry","evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"evt_example1234","object":"event","schema":"sentinel.event.v1","contract_version":1,"node_id":"node_example1234","sequence":42,"type":"monitor.alert.raised","state":"raised","severity":"critical","created_at":"2026-08-29T12:00:00Z","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","correlation_id":"camera:1:after-hours-entry","evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"POST","path":"/v1/events/{event_id}/acknowledge","body":{"action":"acknowledged","note":"Security operator is reviewing the event."}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"evt_example1234","object":"event","schema":"sentinel.event.v1","contract_version":1,"node_id":"node_example1234","sequence":42,"type":"monitor.alert.raised","state":"raised","severity":"critical","created_at":"2026-08-29T12:00:00Z","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","correlation_id":"camera:1:after-hours-entry","evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}}},"/v1/incidents":{"get":{"tags":["Incidents"],"summary":"List Incidents","operationId":"listIncidents","security":[{"BearerAuth":[]}],"parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"example":"raised"},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"},"example":"critical"},{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor returned by the previous incidents page.","examples":["cur_opaque_encrypted_cursor"],"title":"After"},"description":"Opaque cursor returned by the previous incidents page.","example":"cur_opaque_cursor_from_previous_response"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Maximum resources to return (default 100, maximum 500).","default":100,"title":"Limit"},"description":"Maximum resources to return (default 100, maximum 500).","example":100}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncidentList"},"example":{"object":"list","data":[{"id":"inc_example1234567890","object":"incident","uid":"INC-2026-000001","state":"unclaimed","severity":"critical","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","first_seen_at":"2026-08-29T12:00:00Z","last_seen_at":"2026-08-29T12:00:00Z","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z","occurrence_count":1,"claim":{"claimed":true},"resolution":"","notes_total":0,"notes_has_more":false,"activity_total":0,"activity_has_more":false,"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}],"has_more":true}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"object":"list","data":[{"id":"inc_example1234567890","object":"incident","uid":"INC-2026-000001","state":"unclaimed","severity":"critical","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","first_seen_at":"2026-08-29T12:00:00Z","last_seen_at":"2026-08-29T12:00:00Z","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z","occurrence_count":1,"claim":{"claimed":true},"resolution":"","notes_total":0,"notes_has_more":false,"activity_total":0,"activity_has_more":false,"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}],"has_more":true}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"object":"list","data":[{"id":"inc_example1234567890","object":"incident","uid":"INC-2026-000001","state":"unclaimed","severity":"critical","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","first_seen_at":"2026-08-29T12:00:00Z","last_seen_at":"2026-08-29T12:00:00Z","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z","occurrence_count":1,"claim":{"claimed":true},"resolution":"","notes_total":0,"notes_has_more":false,"activity_total":0,"activity_has_more":false,"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}],"has_more":true}}}},"/v1/incidents/{incident_id}":{"get":{"tags":["Incidents"],"summary":"Get Incident","operationId":"getIncident","security":[{"BearerAuth":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"},"example":"inc_example1234567890"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncidentResource"},"example":{"id":"inc_example1234567890","object":"incident","uid":"INC-2026-000001","state":"unclaimed","severity":"critical","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","first_seen_at":"2026-08-29T12:00:00Z","last_seen_at":"2026-08-29T12:00:00Z","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z","occurrence_count":1,"claim":{"claimed":true},"resolution":"","notes_total":0,"notes_has_more":false,"activity_total":0,"activity_has_more":false,"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"inc_example1234567890","object":"incident","uid":"INC-2026-000001","state":"unclaimed","severity":"critical","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","first_seen_at":"2026-08-29T12:00:00Z","last_seen_at":"2026-08-29T12:00:00Z","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z","occurrence_count":1,"claim":{"claimed":true},"resolution":"","notes_total":0,"notes_has_more":false,"activity_total":0,"activity_has_more":false,"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"inc_example1234567890","object":"incident","uid":"INC-2026-000001","state":"unclaimed","severity":"critical","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","first_seen_at":"2026-08-29T12:00:00Z","last_seen_at":"2026-08-29T12:00:00Z","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z","occurrence_count":1,"claim":{"claimed":true},"resolution":"","notes_total":0,"notes_has_more":false,"activity_total":0,"activity_has_more":false,"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}}},"/v1/incidents/{incident_id}/activity":{"get":{"tags":["Incidents"],"summary":"List Incident Activity","operationId":"listIncidentActivity","security":[{"BearerAuth":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"},"example":"inc_example1234567890"},{"name":"kind","in":"query","required":false,"schema":{"enum":["all","notes"],"type":"string","default":"all","title":"Kind"},"example":"example"},{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor returned by the previous activity page.","title":"After"},"description":"Opaque cursor returned by the previous activity page.","example":"cur_opaque_cursor_from_previous_response"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"},"example":100}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncidentActivityList"},"example":{"object":"list","data":[{"sequence":42,"category":"example","created_at":"2026-08-29T12:00:00Z"}],"has_more":true}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"object":"list","data":[{"sequence":42,"category":"example","created_at":"2026-08-29T12:00:00Z"}],"has_more":true}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"object":"list","data":[{"sequence":42,"category":"example","created_at":"2026-08-29T12:00:00Z"}],"has_more":true}}}},"/v1/incidents/{incident_id}/export":{"get":{"tags":["Incidents"],"summary":"Export Incident","operationId":"exportIncident","security":[{"BearerAuth":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"},"example":"inc_example1234567890"}],"responses":{"200":{"description":"Signed incident evidence bundle","content":{"application/zip":{"schema":{"type":"string","format":"binary"},"example":"<binary ZIP evidence bundle>"}},"x-sentinel-success-example":{"status":200,"media_type":"application/zip","body":"<binary ZIP evidence bundle>"}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/zip","body":"<binary ZIP evidence bundle>"}}},"/v1/incidents/{incident_id}/claim":{"post":{"tags":["Incidents"],"summary":"Claim Incident","operationId":"claimIncident","security":[{"BearerAuth":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"},"example":"inc_example1234567890"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncidentResource"},"example":{"id":"inc_example1234567890","object":"incident","uid":"INC-2026-000001","state":"unclaimed","severity":"critical","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","first_seen_at":"2026-08-29T12:00:00Z","last_seen_at":"2026-08-29T12:00:00Z","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z","occurrence_count":1,"claim":{"claimed":true},"resolution":"","notes_total":0,"notes_has_more":false,"activity_total":0,"activity_has_more":false,"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"inc_example1234567890","object":"incident","uid":"INC-2026-000001","state":"unclaimed","severity":"critical","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","first_seen_at":"2026-08-29T12:00:00Z","last_seen_at":"2026-08-29T12:00:00Z","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z","occurrence_count":1,"claim":{"claimed":true},"resolution":"","notes_total":0,"notes_has_more":false,"activity_total":0,"activity_has_more":false,"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"POST","path":"/v1/incidents/{incident_id}/claim","body":null},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"inc_example1234567890","object":"incident","uid":"INC-2026-000001","state":"unclaimed","severity":"critical","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","first_seen_at":"2026-08-29T12:00:00Z","last_seen_at":"2026-08-29T12:00:00Z","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z","occurrence_count":1,"claim":{"claimed":true},"resolution":"","notes_total":0,"notes_has_more":false,"activity_total":0,"activity_has_more":false,"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}}},"/v1/incidents/{incident_id}/release":{"post":{"tags":["Incidents"],"summary":"Release Incident","operationId":"releaseIncident","security":[{"BearerAuth":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"},"example":"inc_example1234567890"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncidentResource"},"example":{"id":"inc_example1234567890","object":"incident","uid":"INC-2026-000001","state":"unclaimed","severity":"critical","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","first_seen_at":"2026-08-29T12:00:00Z","last_seen_at":"2026-08-29T12:00:00Z","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z","occurrence_count":1,"claim":{"claimed":true},"resolution":"","notes_total":0,"notes_has_more":false,"activity_total":0,"activity_has_more":false,"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"inc_example1234567890","object":"incident","uid":"INC-2026-000001","state":"unclaimed","severity":"critical","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","first_seen_at":"2026-08-29T12:00:00Z","last_seen_at":"2026-08-29T12:00:00Z","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z","occurrence_count":1,"claim":{"claimed":true},"resolution":"","notes_total":0,"notes_has_more":false,"activity_total":0,"activity_has_more":false,"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"POST","path":"/v1/incidents/{incident_id}/release","body":null},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"inc_example1234567890","object":"incident","uid":"INC-2026-000001","state":"unclaimed","severity":"critical","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","first_seen_at":"2026-08-29T12:00:00Z","last_seen_at":"2026-08-29T12:00:00Z","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z","occurrence_count":1,"claim":{"claimed":true},"resolution":"","notes_total":0,"notes_has_more":false,"activity_total":0,"activity_has_more":false,"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}}},"/v1/incidents/{incident_id}/close":{"post":{"tags":["Incidents"],"summary":"Close Incident","operationId":"closeIncident","security":[{"BearerAuth":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"},"example":"inc_example1234567890"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncidentClose"},"example":{"disposition":"resolved","resolution":"Operator verified the site and closed the incident."}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncidentResource"},"example":{"id":"inc_example1234567890","object":"incident","uid":"INC-2026-000001","state":"unclaimed","severity":"critical","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","first_seen_at":"2026-08-29T12:00:00Z","last_seen_at":"2026-08-29T12:00:00Z","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z","occurrence_count":1,"claim":{"claimed":true},"resolution":"","notes_total":0,"notes_has_more":false,"activity_total":0,"activity_has_more":false,"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"inc_example1234567890","object":"incident","uid":"INC-2026-000001","state":"unclaimed","severity":"critical","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","first_seen_at":"2026-08-29T12:00:00Z","last_seen_at":"2026-08-29T12:00:00Z","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z","occurrence_count":1,"claim":{"claimed":true},"resolution":"","notes_total":0,"notes_has_more":false,"activity_total":0,"activity_has_more":false,"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"POST","path":"/v1/incidents/{incident_id}/close","body":{"disposition":"resolved","resolution":"Operator verified the site and closed the incident."}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"inc_example1234567890","object":"incident","uid":"INC-2026-000001","state":"unclaimed","severity":"critical","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","first_seen_at":"2026-08-29T12:00:00Z","last_seen_at":"2026-08-29T12:00:00Z","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z","occurrence_count":1,"claim":{"claimed":true},"resolution":"","notes_total":0,"notes_has_more":false,"activity_total":0,"activity_has_more":false,"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}}},"/v1/incidents/{incident_id}/reopen":{"post":{"tags":["Incidents"],"summary":"Reopen Incident","operationId":"reopenIncident","security":[{"BearerAuth":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"},"example":"inc_example1234567890"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncidentResource"},"example":{"id":"inc_example1234567890","object":"incident","uid":"INC-2026-000001","state":"unclaimed","severity":"critical","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","first_seen_at":"2026-08-29T12:00:00Z","last_seen_at":"2026-08-29T12:00:00Z","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z","occurrence_count":1,"claim":{"claimed":true},"resolution":"","notes_total":0,"notes_has_more":false,"activity_total":0,"activity_has_more":false,"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"inc_example1234567890","object":"incident","uid":"INC-2026-000001","state":"unclaimed","severity":"critical","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","first_seen_at":"2026-08-29T12:00:00Z","last_seen_at":"2026-08-29T12:00:00Z","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z","occurrence_count":1,"claim":{"claimed":true},"resolution":"","notes_total":0,"notes_has_more":false,"activity_total":0,"activity_has_more":false,"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"POST","path":"/v1/incidents/{incident_id}/reopen","body":null},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"inc_example1234567890","object":"incident","uid":"INC-2026-000001","state":"unclaimed","severity":"critical","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","first_seen_at":"2026-08-29T12:00:00Z","last_seen_at":"2026-08-29T12:00:00Z","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z","occurrence_count":1,"claim":{"claimed":true},"resolution":"","notes_total":0,"notes_has_more":false,"activity_total":0,"activity_has_more":false,"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}}},"/v1/incidents/{incident_id}/notes":{"post":{"tags":["Incidents"],"summary":"Add Incident Note","operationId":"addIncidentNote","security":[{"BearerAuth":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"},"example":"inc_example1234567890"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncidentNote"},"example":{"note":"Guard dispatched to the loading dock."}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncidentResource"},"example":{"id":"inc_example1234567890","object":"incident","uid":"INC-2026-000001","state":"unclaimed","severity":"critical","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","first_seen_at":"2026-08-29T12:00:00Z","last_seen_at":"2026-08-29T12:00:00Z","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z","occurrence_count":1,"claim":{"claimed":true},"resolution":"","notes_total":0,"notes_has_more":false,"activity_total":0,"activity_has_more":false,"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"inc_example1234567890","object":"incident","uid":"INC-2026-000001","state":"unclaimed","severity":"critical","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","first_seen_at":"2026-08-29T12:00:00Z","last_seen_at":"2026-08-29T12:00:00Z","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z","occurrence_count":1,"claim":{"claimed":true},"resolution":"","notes_total":0,"notes_has_more":false,"activity_total":0,"activity_has_more":false,"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"POST","path":"/v1/incidents/{incident_id}/notes","body":{"note":"Guard dispatched to the loading dock."}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"inc_example1234567890","object":"incident","uid":"INC-2026-000001","state":"unclaimed","severity":"critical","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","first_seen_at":"2026-08-29T12:00:00Z","last_seen_at":"2026-08-29T12:00:00Z","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z","occurrence_count":1,"claim":{"claimed":true},"resolution":"","notes_total":0,"notes_has_more":false,"activity_total":0,"activity_has_more":false,"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}}},"/v1/incidents/{incident_id}/tags":{"put":{"tags":["Incidents"],"summary":"Set Incident Tags","operationId":"setIncidentTags","security":[{"BearerAuth":[]}],"parameters":[{"name":"incident_id","in":"path","required":true,"schema":{"type":"string","title":"Incident Id"},"example":"inc_example1234567890"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncidentTags"},"example":{"tags":["after-hours","reviewed"]}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncidentResource"},"example":{"id":"inc_example1234567890","object":"incident","uid":"INC-2026-000001","state":"unclaimed","severity":"critical","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","first_seen_at":"2026-08-29T12:00:00Z","last_seen_at":"2026-08-29T12:00:00Z","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z","occurrence_count":1,"claim":{"claimed":true},"resolution":"","notes_total":0,"notes_has_more":false,"activity_total":0,"activity_has_more":false,"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"inc_example1234567890","object":"incident","uid":"INC-2026-000001","state":"unclaimed","severity":"critical","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","first_seen_at":"2026-08-29T12:00:00Z","last_seen_at":"2026-08-29T12:00:00Z","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z","occurrence_count":1,"claim":{"claimed":true},"resolution":"","notes_total":0,"notes_has_more":false,"activity_total":0,"activity_has_more":false,"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"PUT","path":"/v1/incidents/{incident_id}/tags","body":{"tags":["after-hours","reviewed"]}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"inc_example1234567890","object":"incident","uid":"INC-2026-000001","state":"unclaimed","severity":"critical","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","first_seen_at":"2026-08-29T12:00:00Z","last_seen_at":"2026-08-29T12:00:00Z","created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z","occurrence_count":1,"claim":{"claimed":true},"resolution":"","notes_total":0,"notes_has_more":false,"activity_total":0,"activity_has_more":false,"evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}}}},"/v1/webhook-endpoints":{"get":{"tags":["Webhooks"],"summary":"List Webhook Endpoints","operationId":"listWebhookEndpoints","security":[{"BearerAuth":[]}],"parameters":[{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor returned by the previous webhook endpoints page.","examples":["cur_opaque_encrypted_cursor"],"title":"After"},"description":"Opaque cursor returned by the previous webhook endpoints page.","example":"cur_opaque_cursor_from_previous_response"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Maximum resources to return (default 100, maximum 500).","default":100,"title":"Limit"},"description":"Maximum resources to return (default 100, maximum 500).","example":100}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointList"},"example":{"object":"list","data":[{"id":"wh_example1234","object":"webhook_endpoint","name":"Example resource","url":"https://partner.example/sentinel/events","enabled":true,"dry_run":true,"filters_valid":true,"event_schema":"sentinel.event.v1","secret_configured":true,"pending_count":1,"dead_letter_count":1,"created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}],"has_more":true}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"object":"list","data":[{"id":"wh_example1234","object":"webhook_endpoint","name":"Example resource","url":"https://partner.example/sentinel/events","enabled":true,"dry_run":true,"filters_valid":true,"event_schema":"sentinel.event.v1","secret_configured":true,"pending_count":1,"dead_letter_count":1,"created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}],"has_more":true}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"object":"list","data":[{"id":"wh_example1234","object":"webhook_endpoint","name":"Example resource","url":"https://partner.example/sentinel/events","enabled":true,"dry_run":true,"filters_valid":true,"event_schema":"sentinel.event.v1","secret_configured":true,"pending_count":1,"dead_letter_count":1,"created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}],"has_more":true}}},"post":{"tags":["Webhooks"],"summary":"Create Webhook Endpoint","operationId":"createWebhookEndpoint","security":[{"BearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointCreate"},"example":{"enabled":true,"filters":{"severities":["critical"]},"name":"Partner event receiver","secret_env":"SENTINEL_PARTNER_WEBHOOK_SECRET","url":"https://partner.example/sentinel/events"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointResource"},"example":{"id":"wh_example1234","object":"webhook_endpoint","name":"Example resource","url":"https://partner.example/sentinel/events","enabled":true,"dry_run":true,"filters_valid":true,"event_schema":"sentinel.event.v1","secret_configured":true,"pending_count":1,"dead_letter_count":1,"created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"x-sentinel-success-example":{"status":201,"media_type":"application/json","body":{"id":"wh_example1234","object":"webhook_endpoint","name":"Example resource","url":"https://partner.example/sentinel/events","enabled":true,"dry_run":true,"filters_valid":true,"event_schema":"sentinel.event.v1","secret_configured":true,"pending_count":1,"dead_letter_count":1,"created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"POST","path":"/v1/webhook-endpoints","body":{"enabled":true,"filters":{"severities":["critical"]},"name":"Partner event receiver","secret_env":"SENTINEL_PARTNER_WEBHOOK_SECRET","url":"https://partner.example/sentinel/events"}},"x-sentinel-success-example":{"status":201,"media_type":"application/json","body":{"id":"wh_example1234","object":"webhook_endpoint","name":"Example resource","url":"https://partner.example/sentinel/events","enabled":true,"dry_run":true,"filters_valid":true,"event_schema":"sentinel.event.v1","secret_configured":true,"pending_count":1,"dead_letter_count":1,"created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}}},"/v1/webhook-endpoints/{endpoint_id}":{"patch":{"tags":["Webhooks"],"summary":"Update Webhook Endpoint","operationId":"updateWebhookEndpoint","security":[{"BearerAuth":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"},"example":"wh_example1234"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointPatch"},"example":{"name":"Primary SOC receiver","filters":{"severities":["critical"]}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointResource"},"example":{"id":"wh_example1234","object":"webhook_endpoint","name":"Example resource","url":"https://partner.example/sentinel/events","enabled":true,"dry_run":true,"filters_valid":true,"event_schema":"sentinel.event.v1","secret_configured":true,"pending_count":1,"dead_letter_count":1,"created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"wh_example1234","object":"webhook_endpoint","name":"Example resource","url":"https://partner.example/sentinel/events","enabled":true,"dry_run":true,"filters_valid":true,"event_schema":"sentinel.event.v1","secret_configured":true,"pending_count":1,"dead_letter_count":1,"created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"PATCH","path":"/v1/webhook-endpoints/{endpoint_id}","body":{"name":"Primary SOC receiver","filters":{"severities":["critical"]}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"wh_example1234","object":"webhook_endpoint","name":"Example resource","url":"https://partner.example/sentinel/events","enabled":true,"dry_run":true,"filters_valid":true,"event_schema":"sentinel.event.v1","secret_configured":true,"pending_count":1,"dead_letter_count":1,"created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"delete":{"tags":["Webhooks"],"summary":"Delete Webhook Endpoint","operationId":"deleteWebhookEndpoint","security":[{"BearerAuth":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"},"example":"wh_example1234"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"responses":{"204":{"description":"Successful Response","x-sentinel-success-example":{"status":204,"media_type":null,"body":null}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"DELETE","path":"/v1/webhook-endpoints/{endpoint_id}","body":null},"x-sentinel-success-example":{"status":204,"media_type":null,"body":null}}},"/v1/webhook-endpoints/{endpoint_id}/test":{"post":{"tags":["Webhooks"],"summary":"Test Webhook Endpoint","operationId":"testWebhookEndpoint","security":[{"BearerAuth":[]}],"parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string","title":"Endpoint Id"},"example":"wh_example1234"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestEventCreate"},"example":{"severity":"critical","source_id":"src_example1234","summary":"A deterministic test event from the public API.","title":"Integration test","type":"sdk.test"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookTestResource"},"example":{"accepted":true,"event":{"id":"evt_example1234","object":"event","schema":"sentinel.event.v1","contract_version":1,"node_id":"node_example1234","sequence":42,"type":"monitor.alert.raised","state":"raised","severity":"critical","created_at":"2026-08-29T12:00:00Z","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","correlation_id":"camera:1:after-hours-entry","evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}},"deliveries":[{"kind":"connector","connector_id":"wh_example1234","status":"ready"}]}}},"x-sentinel-success-example":{"status":202,"media_type":"application/json","body":{"accepted":true,"event":{"id":"evt_example1234","object":"event","schema":"sentinel.event.v1","contract_version":1,"node_id":"node_example1234","sequence":42,"type":"monitor.alert.raised","state":"raised","severity":"critical","created_at":"2026-08-29T12:00:00Z","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","correlation_id":"camera:1:after-hours-entry","evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}},"deliveries":[{"kind":"connector","connector_id":"wh_example1234","status":"ready"}]}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"POST","path":"/v1/webhook-endpoints/{endpoint_id}/test","body":{"severity":"critical","source_id":"src_example1234","summary":"A deterministic test event from the public API.","title":"Integration test","type":"sdk.test"}},"x-sentinel-success-example":{"status":202,"media_type":"application/json","body":{"accepted":true,"event":{"id":"evt_example1234","object":"event","schema":"sentinel.event.v1","contract_version":1,"node_id":"node_example1234","sequence":42,"type":"monitor.alert.raised","state":"raised","severity":"critical","created_at":"2026-08-29T12:00:00Z","title":"After-hours entry detected","summary":"A person entered the loading area after business hours.","correlation_id":"camera:1:after-hours-entry","evidence":{"image_url":"/v1/events/evt_example1234/image","clip_url":null,"content_type":"image/jpeg","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}},"deliveries":[{"kind":"connector","connector_id":"wh_example1234","status":"ready"}]}}}},"/v1/webhook-deliveries":{"get":{"tags":["Webhooks"],"summary":"List Webhook Deliveries","operationId":"listWebhookDeliveries","security":[{"BearerAuth":[]}],"parameters":[{"name":"endpoint_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Endpoint Id"},"example":"wh_example1234"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"example":"delivered"},{"name":"after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque cursor returned by the previous webhook deliveries page.","examples":["cur_opaque_encrypted_cursor"],"title":"After"},"description":"Opaque cursor returned by the previous webhook deliveries page.","example":"cur_opaque_cursor_from_previous_response"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Maximum resources to return (default 100, maximum 500).","default":100,"title":"Limit"},"description":"Maximum resources to return (default 100, maximum 500).","example":100}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDeliveryList"},"example":{"object":"list","data":[{"id":"whd_example1234","alert_id":"evt_example1234","sequence":42,"connector_id":"wh_example1234","connector_name":"example","status":"delivered","attempts":1,"next_attempt_at":"2026-08-29T12:01:00Z","replay_count":1,"created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}],"has_more":true}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"object":"list","data":[{"id":"whd_example1234","alert_id":"evt_example1234","sequence":42,"connector_id":"wh_example1234","connector_name":"example","status":"delivered","attempts":1,"next_attempt_at":"2026-08-29T12:01:00Z","replay_count":1,"created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}],"has_more":true}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"object":"list","data":[{"id":"whd_example1234","alert_id":"evt_example1234","sequence":42,"connector_id":"wh_example1234","connector_name":"example","status":"delivered","attempts":1,"next_attempt_at":"2026-08-29T12:01:00Z","replay_count":1,"created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}],"has_more":true}}}},"/v1/webhook-deliveries/{delivery_id}":{"get":{"tags":["Webhooks"],"summary":"Get Webhook Delivery","operationId":"getWebhookDelivery","security":[{"BearerAuth":[]}],"parameters":[{"name":"delivery_id","in":"path","required":true,"schema":{"type":"string","title":"Delivery Id"},"example":"whd_example1234"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDeliveryResource"},"example":{"id":"whd_example1234","alert_id":"evt_example1234","sequence":42,"connector_id":"wh_example1234","connector_name":"example","status":"delivered","attempts":1,"next_attempt_at":"2026-08-29T12:01:00Z","replay_count":1,"created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"whd_example1234","alert_id":"evt_example1234","sequence":42,"connector_id":"wh_example1234","connector_name":"example","status":"delivered","attempts":1,"next_attempt_at":"2026-08-29T12:01:00Z","replay_count":1,"created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"id":"whd_example1234","alert_id":"evt_example1234","sequence":42,"connector_id":"wh_example1234","connector_name":"example","status":"delivered","attempts":1,"next_attempt_at":"2026-08-29T12:01:00Z","replay_count":1,"created_at":"2026-08-29T12:00:00Z","updated_at":"2026-08-29T12:00:00Z"}}}},"/v1/webhook-deliveries/{delivery_id}/retry":{"post":{"tags":["Webhooks"],"summary":"Retry Webhook Delivery","operationId":"retryWebhookDelivery","security":[{"BearerAuth":[]}],"parameters":[{"name":"delivery_id","in":"path","required":true,"schema":{"type":"string","title":"Delivery Id"},"example":"whd_example1234"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"example":"idem_example_request_001"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDeliveryRetryResource"},"example":{"ok":true,"delivery_id":"whd_example1234","status":"replayed","replay_count":1}}},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"ok":true,"delivery_id":"whd_example1234","status":"replayed","replay_count":1}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Insufficient API-key scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"Resource state conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Request body exceeds the public limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"422":{"description":"Request validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Configured capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Runtime dependency unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"507":{"description":"Evidence storage capacity exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-sentinel-request-example":{"method":"POST","path":"/v1/webhook-deliveries/{delivery_id}/retry","body":null},"x-sentinel-success-example":{"status":200,"media_type":"application/json","body":{"ok":true,"delivery_id":"whd_example1234","status":"replayed","replay_count":1}}}}},"components":{"schemas":{"AlertPolicyLevelResource":{"properties":{"visual":{"type":"string","enum":["none","dot","tile","banner","fullscreen"],"title":"Visual"},"notify":{"items":{"type":"string","enum":["telegram","gchat","slack","webhook","line","email","discord","teams"]},"type":"array","maxItems":8,"title":"Notify"},"criteria":{"type":"string","maxLength":2000,"title":"Criteria","default":""},"sound":{"type":"string","enum":["none","chime","alarm"],"title":"Sound","default":"none"}},"additionalProperties":false,"type":"object","required":["visual"],"title":"AlertPolicyLevelResource","description":"One operator-controlled response level.\n\nDetection remains owned by the Monitor prompt. This policy only controls\nhow a finding is presented and which configured notification lanes receive\nit, so changing it never changes the invariant VLM system prompt."},"AlertPolicyResource":{"properties":{"object":{"type":"string","const":"alert_policy","title":"Object","default":"alert_policy"},"suspicious":{"$ref":"#/components/schemas/AlertPolicyLevelResource"},"critical":{"$ref":"#/components/schemas/AlertPolicyLevelResource"},"notify_local_candidates":{"type":"boolean","title":"Notify Local Candidates","default":true}},"additionalProperties":false,"type":"object","required":["suspicious","critical"],"title":"AlertPolicyResource","example":{"critical":{"criteria":"Confirmed after-hours entry.","notify":["webhook"],"sound":"alarm","visual":"fullscreen"},"notify_local_candidates":false,"suspicious":{"criteria":"","notify":[],"sound":"none","visual":"tile"}}},"AnalysisList":{"properties":{"object":{"type":"string","const":"list","title":"Object","default":"list"},"data":{"items":{"$ref":"#/components/schemas/AnalysisResource"},"type":"array","title":"Data"},"has_more":{"type":"boolean","const":false,"title":"Has More","default":false},"next_cursor":{"type":"null","title":"Next Cursor"}},"type":"object","required":["data"],"title":"AnalysisList"},"AnalysisResource":{"properties":{"id":{"type":"string","title":"Id"},"object":{"type":"string","const":"analysis","title":"Object","default":"analysis"},"schema":{"type":"string","const":"sentinel.analysis.v1","title":"Schema","default":"sentinel.analysis.v1"},"contract_version":{"type":"integer","title":"Contract Version","default":1},"node_id":{"type":"string","title":"Node Id"},"sequence":{"type":"integer","title":"Sequence"},"created_at":{"type":"string","title":"Created At"},"source_id":{"type":"string","title":"Source Id"},"monitor_id":{"type":"string","title":"Monitor Id"},"frame_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Frame Id"},"captured_at_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Captured At Ms"},"video_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Video Time Ms"},"source_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Source Time Ms"},"status":{"type":"string","enum":["safe","suspicious","critical"],"title":"Status"},"severity":{"type":"string","enum":["safe","suspicious","critical"],"title":"Severity"},"text":{"type":"string","title":"Text"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"objects":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Objects"}},"type":"object","required":["id","node_id","sequence","created_at","source_id","monitor_id","status","severity","text"],"title":"AnalysisResource","description":"The latest ordinary VLM result for one public Monitor.\n\nAnalyses are intentionally separate from durable alert Events. A Monitor\ncan produce a normal/safe result every inference window; persisting all of\nthose as alert rows would overwhelm the Event ledger at camera scale."},"ApiKeyCreate":{"properties":{"name":{"type":"string","maxLength":160,"minLength":1,"title":"Name"},"scopes":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Scopes"},"expires_in_days":{"type":"integer","maximum":3650.0,"minimum":1.0,"title":"Expires In Days","default":365}},"type":"object","required":["name","scopes"],"title":"ApiKeyCreate"},"ApiKeyCreatedResource":{"properties":{"id":{"type":"string","title":"Id"},"object":{"type":"string","const":"api_key","title":"Object","default":"api_key"},"name":{"type":"string","title":"Name"},"token":{"type":"string","title":"Token","description":"One-time API-key secret. It is never returned by list operations."},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"enabled":{"type":"boolean","title":"Enabled"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","name","token","scopes","enabled","created_at"],"title":"ApiKeyCreatedResource"},"ApiKeyList":{"properties":{"object":{"type":"string","const":"list","title":"Object","default":"list"},"data":{"items":{"$ref":"#/components/schemas/ApiKeyResource"},"type":"array","title":"Data"},"has_more":{"type":"boolean","const":false,"title":"Has More","default":false}},"type":"object","required":["data"],"title":"ApiKeyList"},"ApiKeyResource":{"properties":{"id":{"type":"string","title":"Id"},"object":{"type":"string","const":"api_key","title":"Object","default":"api_key"},"name":{"type":"string","title":"Name"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"enabled":{"type":"boolean","title":"Enabled"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"},"last_used_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used At"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["id","name","scopes","enabled","created_at","updated_at"],"title":"ApiKeyResource"},"ErrorDetail":{"properties":{"type":{"type":"string","title":"Type"},"code":{"type":"string","title":"Code"},"message":{"type":"string","title":"Message"},"param":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Param"},"details":{"anyOf":[{},{"type":"null"}],"title":"Details"}},"type":"object","required":["type","code","message"],"title":"ErrorDetail"},"ErrorEnvelope":{"properties":{"error":{"$ref":"#/components/schemas/ErrorDetail"},"request_id":{"type":"string","title":"Request Id"}},"type":"object","required":["error","request_id"],"title":"ErrorEnvelope"},"EventAcknowledge":{"properties":{"action":{"type":"string","maxLength":80,"minLength":1,"title":"Action","default":"acknowledged"},"note":{"type":"string","maxLength":2000,"title":"Note","default":""}},"type":"object","title":"EventAcknowledge"},"EventList":{"properties":{"object":{"type":"string","const":"list","title":"Object","default":"list"},"data":{"items":{"$ref":"#/components/schemas/EventResource"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["data","has_more"],"title":"EventList"},"EventResource":{"properties":{"id":{"type":"string","title":"Id"},"object":{"type":"string","const":"event","title":"Object","default":"event"},"schema":{"type":"string","const":"sentinel.event.v1","title":"Schema","default":"sentinel.event.v1"},"contract_version":{"type":"integer","title":"Contract Version","default":1},"node_id":{"type":"string","title":"Node Id"},"sequence":{"type":"integer","title":"Sequence"},"type":{"type":"string","title":"Type"},"state":{"type":"string","enum":["raised","updated","cleared"],"title":"State"},"severity":{"type":"string","title":"Severity"},"created_at":{"type":"string","title":"Created At"},"source_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Id"},"monitor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Monitor Id"},"source_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Source Time Ms"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence"},"title":{"type":"string","title":"Title"},"summary":{"type":"string","title":"Summary"},"correlation_id":{"type":"string","title":"Correlation Id"},"attributes":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Attributes"},"objects":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Objects"},"evidence":{"additionalProperties":true,"type":"object","title":"Evidence"},"acknowledgement":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Acknowledgement"}},"type":"object","required":["id","node_id","sequence","type","state","severity","created_at","title","summary","correlation_id","evidence"],"title":"EventResource"},"FrameIngestResponse":{"properties":{"accepted":{"type":"boolean","title":"Accepted","default":true},"source_id":{"type":"string","title":"Source Id"},"width":{"type":"integer","title":"Width"},"height":{"type":"integer","title":"Height"},"content_type":{"type":"string","const":"image/jpeg","title":"Content Type","default":"image/jpeg"},"image_url":{"type":"string","title":"Image Url"}},"type":"object","required":["source_id","width","height","image_url"],"title":"FrameIngestResponse"},"FrameInput":{"properties":{"type":{"type":"string","const":"frame","title":"Type","default":"frame"}},"type":"object","title":"FrameInput"},"IncidentActivityDetailResource":{"properties":{"sequence":{"type":"integer","title":"Sequence"},"category":{"type":"string","title":"Category"},"created_at":{"type":"string","title":"Created At"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","required":["sequence","category","created_at"],"title":"IncidentActivityDetailResource"},"IncidentActivityList":{"properties":{"object":{"type":"string","const":"list","title":"Object","default":"list"},"data":{"items":{"$ref":"#/components/schemas/IncidentActivityDetailResource"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Opaque cursor for the next activity page."}},"type":"object","required":["data","has_more"],"title":"IncidentActivityList"},"IncidentActivityResource":{"properties":{"sequence":{"type":"integer","title":"Sequence"},"category":{"type":"string","title":"Category"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["sequence","category","created_at"],"title":"IncidentActivityResource"},"IncidentClaimResource":{"properties":{"claimed":{"type":"boolean","title":"Claimed"},"claimed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Claimed At"}},"type":"object","required":["claimed"],"title":"IncidentClaimResource"},"IncidentClose":{"properties":{"disposition":{"type":"string","maxLength":80,"title":"Disposition","default":"resolved"},"resolution":{"type":"string","maxLength":4000,"title":"Resolution","default":""}},"type":"object","title":"IncidentClose"},"IncidentEvidenceResource":{"properties":{"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"clip_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Clip Url"}},"type":"object","title":"IncidentEvidenceResource"},"IncidentList":{"properties":{"object":{"type":"string","const":"list","title":"Object","default":"list"},"data":{"items":{"$ref":"#/components/schemas/IncidentResource"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Opaque cursor for the next page; never construct or modify it.","examples":["cur_opaque_encrypted_cursor"]}},"type":"object","required":["data","has_more"],"title":"IncidentList"},"IncidentNote":{"properties":{"note":{"type":"string","maxLength":4000,"minLength":1,"title":"Note"}},"type":"object","required":["note"],"title":"IncidentNote"},"IncidentNoteResource":{"properties":{"sequence":{"type":"integer","title":"Sequence"},"text":{"type":"string","title":"Text"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["sequence","text","created_at"],"title":"IncidentNoteResource"},"IncidentResource":{"properties":{"id":{"type":"string","pattern":"^inc_[A-Za-z0-9_-]{16,96}$","title":"Id"},"object":{"type":"string","const":"incident","title":"Object","default":"incident"},"uid":{"type":"string","title":"Uid"},"state":{"type":"string","title":"State"},"severity":{"type":"string","title":"Severity"},"title":{"type":"string","title":"Title"},"summary":{"type":"string","title":"Summary"},"event_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Id"},"event_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Url"},"source_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Id"},"monitor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Monitor Id"},"first_seen_at":{"type":"string","title":"First Seen At"},"last_seen_at":{"type":"string","title":"Last Seen At"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"},"occurrence_count":{"type":"integer","title":"Occurrence Count","default":1},"claim":{"$ref":"#/components/schemas/IncidentClaimResource"},"closed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Closed At"},"disposition":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Disposition"},"resolution":{"type":"string","title":"Resolution","default":""},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"notes":{"items":{"$ref":"#/components/schemas/IncidentNoteResource"},"type":"array","title":"Notes"},"notes_total":{"type":"integer","title":"Notes Total","default":0},"notes_has_more":{"type":"boolean","title":"Notes Has More","default":false},"activity":{"items":{"$ref":"#/components/schemas/IncidentActivityResource"},"type":"array","title":"Activity"},"activity_total":{"type":"integer","title":"Activity Total","default":0},"activity_has_more":{"type":"boolean","title":"Activity Has More","default":false},"evidence":{"$ref":"#/components/schemas/IncidentEvidenceResource"}},"type":"object","required":["id","uid","state","severity","title","summary","first_seen_at","last_seen_at","created_at","updated_at","claim","evidence"],"title":"IncidentResource"},"IncidentTags":{"properties":{"tags":{"items":{"type":"string"},"type":"array","maxItems":30,"title":"Tags"}},"type":"object","required":["tags"],"title":"IncidentTags"},"MonitorCreate":{"properties":{"source_id":{"type":"string","title":"Source Id"},"name":{"type":"string","maxLength":160,"minLength":1,"title":"Name","default":"AI monitor"},"prompt":{"type":"string","maxLength":12000,"minLength":1,"title":"Prompt"},"language":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Language"},"inference_window_ms":{"type":"integer","maximum":600000.0,"minimum":250.0,"title":"Inference Window Ms","default":5000},"inference_frames_per_window":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Inference Frames Per Window","default":1},"analytics":{"$ref":"#/components/schemas/VisionAnalyticsConfig-Input","description":"Optional local detector, tracking, ROI, and tripwire settings."},"enabled":{"type":"boolean","title":"Enabled","default":true},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"}},"type":"object","required":["source_id","prompt"],"title":"MonitorCreate","example":{"enabled":true,"language":"en","name":"After-hours entry","prompt":"Alert when a person enters after business hours.","source_id":"src_example1234"}},"MonitorList":{"properties":{"object":{"type":"string","const":"list","title":"Object","default":"list"},"data":{"items":{"$ref":"#/components/schemas/MonitorResource"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More","default":false},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Opaque cursor for the next page; never construct or modify it.","examples":["cur_opaque_encrypted_cursor"]}},"type":"object","required":["data"],"title":"MonitorList"},"MonitorPatch":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":160,"minLength":1},{"type":"null"}],"title":"Name"},"prompt":{"anyOf":[{"type":"string","maxLength":12000,"minLength":1},{"type":"null"}],"title":"Prompt"},"language":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Language"},"inference_window_ms":{"anyOf":[{"type":"integer","maximum":600000.0,"minimum":250.0},{"type":"null"}],"title":"Inference Window Ms"},"inference_frames_per_window":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Inference Frames Per Window"},"analytics":{"anyOf":[{"$ref":"#/components/schemas/VisionAnalyticsConfig-Input"},{"type":"null"}],"description":"Replace the local detector/tracking configuration."},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","title":"MonitorPatch"},"MonitorResource":{"properties":{"id":{"type":"string","title":"Id"},"object":{"type":"string","const":"monitor","title":"Object","default":"monitor"},"source_id":{"type":"string","title":"Source Id"},"name":{"type":"string","title":"Name"},"prompt":{"type":"string","title":"Prompt"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"inference_window_ms":{"type":"integer","title":"Inference Window Ms"},"inference_frames_per_window":{"type":"integer","title":"Inference Frames Per Window"},"analytics":{"$ref":"#/components/schemas/VisionAnalyticsConfig-Output"},"enabled":{"type":"boolean","title":"Enabled"},"desired_state":{"type":"string","enum":["running","stopped"],"title":"Desired State"},"runtime_state":{"type":"string","title":"Runtime State"},"status_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Code"},"status_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Message"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["id","source_id","name","prompt","inference_window_ms","inference_frames_per_window","enabled","desired_state","runtime_state","created_at","updated_at"],"title":"MonitorResource"},"MonitorTestResource":{"properties":{"ok":{"type":"boolean","title":"Ok"},"monitor_id":{"type":"string","title":"Monitor Id"},"source_id":{"type":"string","title":"Source Id"},"queued":{"type":"boolean","title":"Queued"}},"type":"object","required":["ok","monitor_id","source_id","queued"],"title":"MonitorTestResource"},"NormalizedPoint":{"properties":{"x":{"type":"number","maximum":1.0,"minimum":0.0,"title":"X"},"y":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Y"}},"type":"object","required":["x","y"],"title":"NormalizedPoint","description":"A frame coordinate independent of camera resolution."},"PromptMapEntryResource":{"properties":{"preset_id":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Preset Id"},"brief":{"type":"string","maxLength":4000,"title":"Brief","default":""},"vacant_preset_id":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Vacant Preset Id"},"vacant_brief":{"type":"string","maxLength":4000,"title":"Vacant Brief","default":""}},"additionalProperties":false,"type":"object","title":"PromptMapEntryResource"},"PromptMapResource":{"properties":{"object":{"type":"string","const":"prompt_map","title":"Object","default":"prompt_map"},"mode":{"type":"string","enum":["combined","per_channel"],"title":"Mode","default":"combined"},"channels":{"additionalProperties":{"$ref":"#/components/schemas/PromptMapEntryResource"},"type":"object","maxProperties":256,"title":"Channels"}},"additionalProperties":false,"type":"object","title":"PromptMapResource","example":{"channels":{"1":{"brief":"","preset_id":"after_hours","vacant_brief":"Alert on any person in this area."}},"mode":"per_channel"}},"RtspInput":{"properties":{"type":{"type":"string","const":"rtsp","title":"Type","default":"rtsp"},"url":{"type":"string","maxLength":4096,"minLength":8,"title":"Url","example":"rtsp://camera.example:554/stream"}},"type":"object","required":["url"],"title":"RtspInput"},"SourceCreate":{"properties":{"name":{"type":"string","maxLength":160,"minLength":1,"title":"Name"},"input":{"oneOf":[{"$ref":"#/components/schemas/RtspInput"},{"$ref":"#/components/schemas/FrameInput"}],"title":"Input","discriminator":{"propertyName":"type","mapping":{"frame":"#/components/schemas/FrameInput","rtsp":"#/components/schemas/RtspInput"}}},"camera_id":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Camera Id"},"site_id":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Site Id"},"space_id":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Space Id"},"enterprise_id":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Enterprise Id"},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description"},"enabled":{"type":"boolean","title":"Enabled","default":true},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"}},"type":"object","required":["name","input"],"title":"SourceCreate","example":{"enabled":true,"input":{"type":"frame"},"name":"Loading dock test source","site_id":"warehouse-01"}},"SourceList":{"properties":{"object":{"type":"string","const":"list","title":"Object","default":"list"},"data":{"items":{"$ref":"#/components/schemas/SourceResource"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More","default":false},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Opaque cursor for the next page; never construct or modify it.","examples":["cur_opaque_encrypted_cursor"]}},"type":"object","required":["data"],"title":"SourceList"},"SourcePatch":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":160,"minLength":1},{"type":"null"}],"title":"Name"},"input":{"anyOf":[{"oneOf":[{"$ref":"#/components/schemas/RtspInput"},{"$ref":"#/components/schemas/FrameInput"}],"discriminator":{"propertyName":"type","mapping":{"frame":"#/components/schemas/FrameInput","rtsp":"#/components/schemas/RtspInput"}}},{"type":"null"}],"title":"Input"},"camera_id":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Camera Id"},"site_id":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Site Id"},"space_id":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Space Id"},"enterprise_id":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Enterprise Id"},"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Description"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","title":"SourcePatch"},"SourceResource":{"properties":{"id":{"type":"string","title":"Id"},"object":{"type":"string","const":"source","title":"Object","default":"source"},"name":{"type":"string","title":"Name"},"input":{"additionalProperties":true,"type":"object","title":"Input"},"camera_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Camera Id"},"site_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Id"},"space_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Space Id"},"enterprise_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Enterprise Id"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"enabled":{"type":"boolean","title":"Enabled"},"desired_state":{"type":"string","enum":["running","stopped"],"title":"Desired State"},"runtime_state":{"type":"string","title":"Runtime State"},"status_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Code"},"status_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Message"},"last_frame_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Frame At"},"monitor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Monitor Id"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["id","name","input","enabled","desired_state","runtime_state","created_at","updated_at"],"title":"SourceResource"},"SourceTestResult":{"properties":{"ok":{"type":"boolean","title":"Ok"},"source_id":{"type":"string","title":"Source Id"},"width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Width"},"height":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Height"},"fps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fps"},"error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Code"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["ok","source_id"],"title":"SourceTestResult"},"SystemBoundedRowsResource":{"properties":{"count":{"type":"integer","title":"Count"},"max":{"type":"integer","title":"Max"}},"type":"object","required":["count","max"],"title":"SystemBoundedRowsResource"},"SystemCommandResources":{"properties":{"pending":{"type":"integer","title":"Pending"},"dead_letter":{"type":"integer","title":"Dead Letter"},"pending_payload_bytes":{"type":"integer","title":"Pending Payload Bytes"}},"type":"object","required":["pending","dead_letter","pending_payload_bytes"],"title":"SystemCommandResources"},"SystemControlStorageResources":{"properties":{"sources":{"$ref":"#/components/schemas/SystemBoundedRowsResource"},"api_keys":{"$ref":"#/components/schemas/SystemBoundedRowsResource"},"pressure":{"type":"number","title":"Pressure"},"near_capacity":{"type":"boolean","title":"Near Capacity"}},"type":"object","required":["sources","api_keys","pressure","near_capacity"],"title":"SystemControlStorageResources"},"SystemCpuResource":{"properties":{"logical_cores":{"type":"integer","title":"Logical Cores"},"load_average":{"items":{"type":"number"},"type":"array","title":"Load Average"}},"type":"object","required":["logical_cores","load_average"],"title":"SystemCpuResource"},"SystemDatabaseCapacityResources":{"properties":{"counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Counts"},"bytes":{"additionalProperties":{"type":"integer"},"type":"object","title":"Bytes"},"max":{"additionalProperties":{"anyOf":[{"type":"integer"},{"type":"null"}]},"type":"object","title":"Max"},"pressure":{"additionalProperties":{"anyOf":[{"type":"number"},{"type":"boolean"}]},"type":"object","title":"Pressure"}},"type":"object","required":["counts","bytes","max","pressure"],"title":"SystemDatabaseCapacityResources"},"SystemDatabaseResource":{"properties":{"ok":{"type":"boolean","title":"Ok"},"integrity":{"type":"string","enum":["ok","pending","checking","unknown","error"],"title":"Integrity"},"recovery_available":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Recovery Available"},"error_code":{"anyOf":[{"type":"string","const":"database_unhealthy"},{"type":"null"}],"title":"Error Code"}},"type":"object","required":["ok","integrity"],"title":"SystemDatabaseResource"},"SystemDeploymentResource":{"properties":{"profile":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile"},"ready":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ready"},"fail_closed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Fail Closed"},"issues":{"items":{"type":"string"},"type":"array","title":"Issues"}},"type":"object","title":"SystemDeploymentResource"},"SystemDiskResource":{"properties":{"path":{"type":"string","enum":["/data","configured_data_volume"],"title":"Path"},"total_bytes":{"type":"integer","title":"Total Bytes"},"used_bytes":{"type":"integer","title":"Used Bytes"},"free_bytes":{"type":"integer","title":"Free Bytes"}},"type":"object","required":["path","total_bytes","used_bytes","free_bytes"],"title":"SystemDiskResource"},"SystemEvidenceResources":{"properties":{"enabled":{"type":"boolean","title":"Enabled"},"file_count":{"type":"integer","title":"File Count"},"metadata_count":{"type":"integer","title":"Metadata Count"},"reservation_count":{"type":"integer","title":"Reservation Count"},"reserved_bytes":{"type":"integer","title":"Reserved Bytes"},"bytes_used":{"type":"integer","title":"Bytes Used"},"temp_bytes":{"type":"integer","title":"Temp Bytes"},"temp_file_count":{"type":"integer","title":"Temp File Count"},"protected_files":{"type":"integer","title":"Protected Files"},"disk_free_bytes":{"type":"integer","title":"Disk Free Bytes"},"synthetic_file_count":{"type":"integer","title":"Synthetic File Count"},"synthetic_bytes_used":{"type":"integer","title":"Synthetic Bytes Used"},"synthetic_reservation_count":{"type":"integer","title":"Synthetic Reservation Count"},"synthetic_reserved_bytes":{"type":"integer","title":"Synthetic Reserved Bytes"},"synthetic_max_files":{"type":"integer","title":"Synthetic Max Files"},"synthetic_max_bytes":{"type":"integer","title":"Synthetic Max Bytes"},"live_file_count":{"type":"integer","title":"Live File Count"},"live_bytes_used":{"type":"integer","title":"Live Bytes Used"},"live_reservation_count":{"type":"integer","title":"Live Reservation Count"},"live_reserved_bytes":{"type":"integer","title":"Live Reserved Bytes"},"live_file_reserve":{"type":"integer","title":"Live File Reserve"},"live_byte_reserve_bytes":{"type":"integer","title":"Live Byte Reserve Bytes"},"max_files":{"type":"integer","title":"Max Files"},"max_bytes":{"type":"integer","title":"Max Bytes"},"max_file_bytes":{"type":"integer","title":"Max File Bytes"},"disk_reserve_bytes":{"type":"integer","title":"Disk Reserve Bytes"},"retention_seconds":{"type":"integer","title":"Retention Seconds"},"orphan_grace_seconds":{"type":"integer","title":"Orphan Grace Seconds"},"cleanup_batch":{"type":"integer","title":"Cleanup Batch"},"degraded_total":{"type":"integer","title":"Degraded Total"},"last_error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error Code"},"last_error_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error At"}},"type":"object","required":["enabled","file_count","metadata_count","reservation_count","reserved_bytes","bytes_used","temp_bytes","temp_file_count","protected_files","disk_free_bytes","synthetic_file_count","synthetic_bytes_used","synthetic_reservation_count","synthetic_reserved_bytes","synthetic_max_files","synthetic_max_bytes","live_file_count","live_bytes_used","live_reservation_count","live_reserved_bytes","live_file_reserve","live_byte_reserve_bytes","max_files","max_bytes","max_file_bytes","disk_reserve_bytes","retention_seconds","orphan_grace_seconds","cleanup_batch","degraded_total"],"title":"SystemEvidenceResources"},"SystemGpuResource":{"properties":{"providers":{"items":{"type":"string"},"type":"array","title":"Providers"},"device":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device"},"vram_total_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Vram Total Bytes"},"vram_used_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Vram Used Bytes"}},"type":"object","required":["providers"],"title":"SystemGpuResource"},"SystemHardwareActionStorageResources":{"properties":{"active_actions":{"type":"integer","title":"Active Actions"},"historical_actions":{"type":"integer","title":"Historical Actions"},"active_event_pins":{"type":"integer","title":"Active Event Pins"},"total_actions":{"type":"integer","title":"Total Actions"},"max_actions":{"type":"integer","title":"Max Actions"},"audit_rows":{"type":"integer","title":"Audit Rows"},"max_audit_rows":{"type":"integer","title":"Max Audit Rows"},"max_audit_per_action":{"type":"integer","title":"Max Audit Per Action"},"safety_audit_reserve":{"type":"integer","title":"Safety Audit Reserve"},"safety_audit_reserve_per_action":{"type":"integer","title":"Safety Audit Reserve Per Action","default":0},"terminal_audit_reserve":{"type":"integer","title":"Terminal Audit Reserve","default":0},"terminal_audit_reserve_per_action":{"type":"integer","title":"Terminal Audit Reserve Per Action","default":0},"terminal_retention_seconds":{"type":"integer","title":"Terminal Retention Seconds"},"cleanup_batch":{"type":"integer","title":"Cleanup Batch"},"pressure":{"type":"number","title":"Pressure"},"near_capacity":{"type":"boolean","title":"Near Capacity"}},"type":"object","required":["active_actions","historical_actions","active_event_pins","total_actions","max_actions","audit_rows","max_audit_rows","max_audit_per_action","safety_audit_reserve","terminal_retention_seconds","cleanup_batch","pressure","near_capacity"],"title":"SystemHardwareActionStorageResources"},"SystemIdempotencyResources":{"properties":{"total_rows":{"type":"integer","title":"Total Rows"},"completed_rows":{"type":"integer","title":"Completed Rows"},"pending_rows":{"type":"integer","title":"Pending Rows"},"frame_rows":{"type":"integer","title":"Frame Rows"},"response_bytes":{"type":"integer","title":"Response Bytes"},"max_rows":{"type":"integer","title":"Max Rows"},"frame_max_rows":{"type":"integer","title":"Frame Max Rows"},"principal_max_rows":{"type":"integer","title":"Principal Max Rows"},"principal_frame_max_rows":{"type":"integer","title":"Principal Frame Max Rows"},"max_bytes":{"type":"integer","title":"Max Bytes"},"principal_max_bytes":{"type":"integer","title":"Principal Max Bytes"},"retention_seconds":{"type":"integer","title":"Retention Seconds"},"frame_retention_seconds":{"type":"integer","title":"Frame Retention Seconds"},"cleanup_batch":{"type":"integer","title":"Cleanup Batch"},"row_pressure":{"type":"number","title":"Row Pressure"},"byte_pressure":{"type":"number","title":"Byte Pressure"},"near_capacity":{"type":"boolean","title":"Near Capacity"}},"type":"object","required":["total_rows","completed_rows","pending_rows","frame_rows","response_bytes","max_rows","frame_max_rows","principal_max_rows","principal_frame_max_rows","max_bytes","principal_max_bytes","retention_seconds","frame_retention_seconds","cleanup_batch","row_pressure","byte_pressure","near_capacity"],"title":"SystemIdempotencyResources"},"SystemInferenceResources":{"properties":{"active":{"type":"integer","title":"Active"},"queue_depth":{"type":"integer","title":"Queue Depth"},"latency_percentiles_ms":{"anyOf":[{"$ref":"#/components/schemas/SystemLatencyPercentilesResource"},{"type":"null"}]}},"type":"object","required":["active","queue_depth"],"title":"SystemInferenceResources"},"SystemIntegrationIsolationResource":{"properties":{"active":{"type":"boolean","title":"Active"},"legacy_automation":{"type":"string","enum":["available","quarantined"],"title":"Legacy Automation"},"quarantined_connectors":{"type":"integer","title":"Quarantined Connectors"},"quarantined_deliveries":{"type":"integer","title":"Quarantined Deliveries"},"quarantined_actions":{"type":"integer","title":"Quarantined Actions"}},"type":"object","required":["active","legacy_automation","quarantined_connectors","quarantined_deliveries","quarantined_actions"],"title":"SystemIntegrationIsolationResource"},"SystemLatencyPercentilesResource":{"properties":{"p50":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"P50"},"p95":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"P95"},"p99":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"P99"}},"type":"object","title":"SystemLatencyPercentilesResource"},"SystemMemoryResource":{"properties":{"total_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Bytes"},"available_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Available Bytes"},"process_rss_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Process Rss Bytes"}},"type":"object","title":"SystemMemoryResource"},"SystemModelList":{"properties":{"object":{"type":"string","const":"list","title":"Object","default":"list"},"data":{"items":{"$ref":"#/components/schemas/SystemModelResource"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"SystemModelList"},"SystemModelResource":{"properties":{"id":{"type":"string","title":"Id"},"profile":{"type":"string","title":"Profile"},"provider":{"type":"string","title":"Provider"},"target":{"type":"string","title":"Target"},"credential_configured":{"type":"boolean","title":"Credential Configured"},"data_boundary":{"type":"string","enum":["edge_or_customer_private","selected_frames_to_cloud"],"title":"Data Boundary"},"ready":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ready"}},"type":"object","required":["id","profile","provider","target","credential_configured","data_boundary"],"title":"SystemModelResource"},"SystemModelTestResource":{"properties":{"ok":{"type":"boolean","const":true,"title":"Ok","default":true},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","title":"SystemModelTestResource"},"SystemMonitorCountsResource":{"properties":{"desired":{"type":"integer","title":"Desired"},"running":{"type":"integer","title":"Running"},"failed":{"type":"integer","title":"Failed"}},"type":"object","required":["desired","running","failed"],"title":"SystemMonitorCountsResource"},"SystemOperationsStorageResources":{"properties":{"activity_rows":{"type":"integer","title":"Activity Rows"},"max_activity_rows":{"type":"integer","title":"Max Activity Rows"},"max_activity_per_incident":{"type":"integer","title":"Max Activity Per Incident"},"essential_reserve":{"type":"integer","title":"Essential Reserve"},"essential_reserve_per_incident":{"type":"integer","title":"Essential Reserve Per Incident"},"safety_reserve":{"type":"integer","title":"Safety Reserve","default":0},"safety_reserve_per_incident":{"type":"integer","title":"Safety Reserve Per Incident","default":0},"active_incidents":{"type":"integer","title":"Active Incidents"},"historical_incidents":{"type":"integer","title":"Historical Incidents"},"active_pinned_events":{"type":"integer","title":"Active Pinned Events"},"pressure":{"type":"number","title":"Pressure"},"near_capacity":{"type":"boolean","title":"Near Capacity"}},"type":"object","required":["activity_rows","max_activity_rows","max_activity_per_incident","essential_reserve","essential_reserve_per_incident","active_incidents","historical_incidents","active_pinned_events","pressure","near_capacity"],"title":"SystemOperationsStorageResources"},"SystemResource":{"properties":{"object":{"type":"string","const":"system","title":"Object","default":"system"},"node_id":{"type":"string","title":"Node Id"},"application_version":{"type":"string","title":"Application Version"},"public_contract_version":{"type":"string","title":"Public Contract Version"},"started_at":{"type":"string","title":"Started At"},"ready":{"type":"boolean","title":"Ready"},"auth_mode":{"type":"string","enum":["api_key","loopback_bootstrap"],"title":"Auth Mode"},"database":{"$ref":"#/components/schemas/SystemDatabaseResource"},"deployment":{"$ref":"#/components/schemas/SystemDeploymentResource"},"integration_isolation":{"$ref":"#/components/schemas/SystemIntegrationIsolationResource"},"sources":{"$ref":"#/components/schemas/SystemSourceCountsResource"},"monitors":{"$ref":"#/components/schemas/SystemMonitorCountsResource"},"licensed_source_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Licensed Source Limit"},"event_types":{"items":{"type":"string"},"type":"array","title":"Event Types"}},"type":"object","required":["node_id","application_version","public_contract_version","started_at","ready","auth_mode","database","deployment","integration_isolation","sources","monitors","event_types"],"title":"SystemResource"},"SystemResourcesResource":{"properties":{"cpu":{"$ref":"#/components/schemas/SystemCpuResource"},"memory":{"$ref":"#/components/schemas/SystemMemoryResource"},"gpu":{"$ref":"#/components/schemas/SystemGpuResource"},"disk":{"$ref":"#/components/schemas/SystemDiskResource"},"inference":{"$ref":"#/components/schemas/SystemInferenceResources"},"webhooks":{"$ref":"#/components/schemas/SystemWebhookResources"},"commands":{"$ref":"#/components/schemas/SystemCommandResources"},"idempotency":{"$ref":"#/components/schemas/SystemIdempotencyResources"},"controls":{"$ref":"#/components/schemas/SystemControlStorageResources"},"database":{"$ref":"#/components/schemas/SystemDatabaseCapacityResources"},"sdk_storage":{"$ref":"#/components/schemas/SystemSdkStorageResources"},"operations":{"$ref":"#/components/schemas/SystemOperationsStorageResources"},"hardware_actions":{"$ref":"#/components/schemas/SystemHardwareActionStorageResources"},"sse":{"$ref":"#/components/schemas/SystemSseResources"},"rtsp":{"$ref":"#/components/schemas/SystemRtspResources"},"evidence":{"$ref":"#/components/schemas/SystemEvidenceResources"}},"type":"object","required":["cpu","memory","gpu","disk","inference","webhooks","commands","idempotency","controls","database","sdk_storage","operations","hardware_actions","sse","rtsp","evidence"],"title":"SystemResourcesResource"},"SystemRtspResources":{"properties":{"policy":{"additionalProperties":true,"type":"object","title":"Policy"},"probes":{"additionalProperties":{"anyOf":[{"type":"integer"},{"type":"boolean"}]},"type":"object","title":"Probes"}},"type":"object","required":["policy","probes"],"title":"SystemRtspResources"},"SystemSdkAcknowledgementStorageResources":{"properties":{"count":{"type":"integer","title":"Count"},"max":{"type":"integer","title":"Max"},"max_per_event":{"type":"integer","title":"Max Per Event"}},"type":"object","required":["count","max","max_per_event"],"title":"SystemSdkAcknowledgementStorageResources"},"SystemSdkConnectorStorageResources":{"properties":{"count":{"type":"integer","title":"Count"},"max":{"type":"integer","title":"Max"},"public_count":{"type":"integer","title":"Public Count"},"quarantined_count":{"type":"integer","title":"Quarantined Count"}},"type":"object","required":["count","max","public_count","quarantined_count"],"title":"SystemSdkConnectorStorageResources"},"SystemSdkDeliveryAttemptStorageResources":{"properties":{"count":{"type":"integer","title":"Count"},"max_per_delivery":{"type":"integer","title":"Max Per Delivery"}},"type":"object","required":["count","max_per_delivery"],"title":"SystemSdkDeliveryAttemptStorageResources"},"SystemSdkDeliveryStorageResources":{"properties":{"count":{"type":"integer","title":"Count"},"pending_count":{"type":"integer","title":"Pending Count"},"dead_letter_count":{"type":"integer","title":"Dead Letter Count"},"max":{"type":"integer","title":"Max"},"max_pending":{"type":"integer","title":"Max Pending"},"rendered_bytes":{"type":"integer","title":"Rendered Bytes"},"max_rendered_bytes":{"type":"integer","title":"Max Rendered Bytes"},"public_rendered_bytes":{"type":"integer","title":"Public Rendered Bytes"},"quarantined_rendered_bytes":{"type":"integer","title":"Quarantined Rendered Bytes"},"public_count":{"type":"integer","title":"Public Count"},"public_pending_count":{"type":"integer","title":"Public Pending Count"},"public_dead_letter_count":{"type":"integer","title":"Public Dead Letter Count"},"quarantined_count":{"type":"integer","title":"Quarantined Count"},"quarantined_pending_count":{"type":"integer","title":"Quarantined Pending Count"},"quarantined_dead_letter_count":{"type":"integer","title":"Quarantined Dead Letter Count"},"terminal_retention_seconds":{"type":"integer","title":"Terminal Retention Seconds"}},"type":"object","required":["count","pending_count","dead_letter_count","max","max_pending","rendered_bytes","max_rendered_bytes","public_rendered_bytes","quarantined_rendered_bytes","public_count","public_pending_count","public_dead_letter_count","quarantined_count","quarantined_pending_count","quarantined_dead_letter_count","terminal_retention_seconds"],"title":"SystemSdkDeliveryStorageResources"},"SystemSdkEventStorageResources":{"properties":{"count":{"type":"integer","title":"Count"},"max":{"type":"integer","title":"Max"},"payload_bytes":{"type":"integer","title":"Payload Bytes"},"max_payload_bytes":{"type":"integer","title":"Max Payload Bytes"},"live_row_reserve":{"type":"integer","title":"Live Row Reserve"},"live_payload_reserve_bytes":{"type":"integer","title":"Live Payload Reserve Bytes"},"test_count":{"type":"integer","title":"Test Count"},"max_test_events":{"type":"integer","title":"Max Test Events"},"test_payload_bytes":{"type":"integer","title":"Test Payload Bytes"},"max_test_payload_bytes":{"type":"integer","title":"Max Test Payload Bytes"},"retention_seconds":{"type":"integer","title":"Retention Seconds"}},"type":"object","required":["count","max","payload_bytes","max_payload_bytes","live_row_reserve","live_payload_reserve_bytes","test_count","max_test_events","test_payload_bytes","max_test_payload_bytes","retention_seconds"],"title":"SystemSdkEventStorageResources"},"SystemSdkPublishingResources":{"properties":{"failed_total":{"type":"integer","title":"Failed Total"},"last_error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error Code"},"last_error_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error At"}},"type":"object","required":["failed_total"],"title":"SystemSdkPublishingResources"},"SystemSdkStorageResources":{"properties":{"events":{"$ref":"#/components/schemas/SystemSdkEventStorageResources"},"connectors":{"$ref":"#/components/schemas/SystemSdkConnectorStorageResources"},"deliveries":{"$ref":"#/components/schemas/SystemSdkDeliveryStorageResources"},"delivery_attempts":{"$ref":"#/components/schemas/SystemSdkDeliveryAttemptStorageResources"},"acknowledgements":{"$ref":"#/components/schemas/SystemSdkAcknowledgementStorageResources"},"publishing":{"$ref":"#/components/schemas/SystemSdkPublishingResources"},"history_cleanup_batch":{"type":"integer","title":"History Cleanup Batch"}},"type":"object","required":["events","connectors","deliveries","delivery_attempts","acknowledgements","publishing","history_cleanup_batch"],"title":"SystemSdkStorageResources"},"SystemSourceCountsResource":{"properties":{"desired":{"type":"integer","title":"Desired"},"running":{"type":"integer","title":"Running"}},"type":"object","required":["desired","running"],"title":"SystemSourceCountsResource"},"SystemSseResources":{"properties":{"current":{"additionalProperties":{"type":"integer"},"type":"object","title":"Current"},"max":{"additionalProperties":{"type":"integer"},"type":"object","title":"Max"},"available":{"additionalProperties":{"type":"integer"},"type":"object","title":"Available"},"pressure":{"additionalProperties":{"anyOf":[{"type":"number"},{"type":"boolean"}]},"type":"object","title":"Pressure"},"expiry":{"additionalProperties":{"anyOf":[{"type":"number"},{"type":"null"}]},"type":"object","title":"Expiry"}},"type":"object","required":["current","max","available","pressure","expiry"],"title":"SystemSseResources"},"SystemWebhookResources":{"properties":{"pending":{"type":"integer","title":"Pending"},"dead_letter":{"type":"integer","title":"Dead Letter"},"dns_preflight":{"additionalProperties":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"boolean"}]},"type":"object","title":"Dns Preflight"},"dns_delivery":{"additionalProperties":{"anyOf":[{"type":"integer"},{"type":"boolean"}]},"type":"object","title":"Dns Delivery"}},"type":"object","required":["pending","dead_letter","dns_preflight","dns_delivery"],"title":"SystemWebhookResources"},"TestEventCreate":{"properties":{"type":{"type":"string","title":"Type","default":"sdk.test"},"severity":{"type":"string","enum":["safe","suspicious","critical"],"title":"Severity","default":"critical"},"title":{"type":"string","maxLength":300,"title":"Title","default":"Sentinel API test event"},"summary":{"type":"string","maxLength":4000,"title":"Summary","default":"Integration test event."},"source_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Id"},"monitor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Monitor Id"},"image_base64":{"anyOf":[{"type":"string","maxLength":16000000},{"type":"null"}],"title":"Image Base64"},"attributes":{"items":{"additionalProperties":true,"type":"object"},"type":"array","maxItems":100,"title":"Attributes"}},"type":"object","title":"TestEventCreate","example":{"severity":"critical","source_id":"src_example1234","summary":"A deterministic test event from the public API.","title":"Integration test","type":"sdk.test"}},"TrafficAnalyticsConfig-Input":{"properties":{"enabled":{"type":"boolean","title":"Enabled","default":false},"subject_labels":{"items":{"type":"string"},"type":"array","maxItems":80,"title":"Subject Labels"},"road_roi_polygons":{"items":{"$ref":"#/components/schemas/TrafficZoneConfig"},"type":"array","title":"Road Roi Polygons"},"exclusion_polygons":{"items":{"$ref":"#/components/schemas/TrafficZoneConfig"},"type":"array","title":"Exclusion Polygons"},"tripwires":{"items":{"$ref":"#/components/schemas/TrafficTripwireConfig"},"type":"array","title":"Tripwires"},"stopped_seconds_threshold":{"type":"number","maximum":600.0,"minimum":0.25,"title":"Stopped Seconds Threshold","default":5.0},"event_release_seconds":{"anyOf":[{"type":"number","maximum":600.0,"minimum":1.0},{"type":"null"}],"title":"Event Release Seconds"},"motion_threshold":{"type":"number","maximum":2.0,"minimum":0.0,"title":"Motion Threshold","default":0.015},"optical_flow_enabled":{"type":"boolean","title":"Optical Flow Enabled","default":false}},"type":"object","title":"TrafficAnalyticsConfig","description":"Portable traffic rules layered on the existing local detector/tracker.\n\nAn empty road ROI means the full frame. Geometry is normalized so the same\nconfiguration works for the RTSP stream and its downscaled analytics frame."},"TrafficAnalyticsConfig-Output":{"properties":{"enabled":{"type":"boolean","title":"Enabled","default":false},"subject_labels":{"items":{"type":"string"},"type":"array","maxItems":80,"title":"Subject Labels"},"road_roi_polygons":{"items":{"$ref":"#/components/schemas/TrafficZoneConfig"},"type":"array","title":"Road Roi Polygons"},"exclusion_polygons":{"items":{"$ref":"#/components/schemas/TrafficZoneConfig"},"type":"array","title":"Exclusion Polygons"},"tripwires":{"items":{"$ref":"#/components/schemas/TrafficTripwireConfig"},"type":"array","title":"Tripwires"},"stopped_seconds_threshold":{"type":"number","maximum":600.0,"minimum":0.25,"title":"Stopped Seconds Threshold","default":5.0},"event_release_seconds":{"anyOf":[{"type":"number","maximum":600.0,"minimum":1.0},{"type":"null"}],"title":"Event Release Seconds"},"motion_threshold":{"type":"number","maximum":2.0,"minimum":0.0,"title":"Motion Threshold","default":0.015},"optical_flow_enabled":{"type":"boolean","title":"Optical Flow Enabled","default":false}},"type":"object","title":"TrafficAnalyticsConfig","description":"Portable traffic rules layered on the existing local detector/tracker.\n\nAn empty road ROI means the full frame. Geometry is normalized so the same\nconfiguration works for the RTSP stream and its downscaled analytics frame."},"TrafficTripwireConfig":{"properties":{"id":{"type":"string","maxLength":80,"minLength":1,"title":"Id"},"name":{"type":"string","maxLength":120,"title":"Name","default":""},"start":{"$ref":"#/components/schemas/NormalizedPoint"},"end":{"$ref":"#/components/schemas/NormalizedPoint"},"direction":{"type":"string","enum":["any","a_to_b","b_to_a"],"title":"Direction","default":"any"}},"type":"object","required":["id","start","end"],"title":"TrafficTripwireConfig","description":"Optional named line used for directional crossing events."},"TrafficZoneConfig":{"properties":{"id":{"type":"string","maxLength":80,"minLength":1,"title":"Id"},"points":{"items":{"$ref":"#/components/schemas/NormalizedPoint"},"type":"array","title":"Points"},"stopped_seconds_threshold":{"anyOf":[{"type":"number","maximum":600.0,"minimum":0.25},{"type":"null"}],"title":"Stopped Seconds Threshold"},"event_release_seconds":{"anyOf":[{"type":"number","maximum":600.0,"minimum":1.0},{"type":"null"}],"title":"Event Release Seconds"},"alert_mode":{"type":"string","enum":["observe","candidate","direct"],"title":"Alert Mode","default":"candidate"}},"type":"object","required":["id","points"],"title":"TrafficZoneConfig","description":"One named include/exclude area with an optional per-zone override.\n\n``stopped_seconds_threshold`` only has meaning on include (road_roi)\nzones — ``None`` means \"inherit the camera-level\nTrafficAnalyticsConfig.stopped_seconds_threshold\"; a value overrides it\nfor detections matched to this specific zone. Exclusion zones reuse the\nsame shape (for a stable per-zone id/delete affordance in the UI) but\nnever consult this field since exclusion fully suppresses stop-time\ntracking regardless.\n\n``alert_mode`` likewise only has meaning on include (road_roi) zones and\ncontrols how a rule hit in this zone is surfaced: ``\"observe\"`` only\naccumulates stats, with no in-app broadcast and no external notify;\n``\"candidate\"`` (the default, and today's original behavior) publishes it\nas a 可疑 finding explicitly awaiting AI/operator confirmation;\n``\"direct\"`` publishes it immediately as a rule-confirmed finding with no\n\"awaiting confirmation\" framing. Exclusion zones reuse the same shape but\nnever consult this field since exclusion fully suppresses stop-time\ntracking regardless."},"VisionAnalyticsConfig-Input":{"properties":{"enabled":{"type":"boolean","title":"Enabled","default":false},"show_boxes":{"type":"boolean","title":"Show Boxes","default":true},"show_count":{"type":"boolean","title":"Show Count","default":true},"local_tracking":{"type":"boolean","title":"Local Tracking","default":false},"show_dwell":{"type":"boolean","title":"Show Dwell","default":false},"use_as_ai_context":{"type":"boolean","title":"Use As Ai Context","default":false},"traffic":{"$ref":"#/components/schemas/TrafficAnalyticsConfig-Input"}},"type":"object","title":"VisionAnalyticsConfig"},"VisionAnalyticsConfig-Output":{"properties":{"enabled":{"type":"boolean","title":"Enabled","default":false},"show_boxes":{"type":"boolean","title":"Show Boxes","default":true},"show_count":{"type":"boolean","title":"Show Count","default":true},"local_tracking":{"type":"boolean","title":"Local Tracking","default":false},"show_dwell":{"type":"boolean","title":"Show Dwell","default":false},"use_as_ai_context":{"type":"boolean","title":"Use As Ai Context","default":false},"traffic":{"$ref":"#/components/schemas/TrafficAnalyticsConfig-Output"}},"type":"object","title":"VisionAnalyticsConfig"},"WebhookDeliveryAttemptResource":{"properties":{"id":{"type":"string","title":"Id"},"attempt_number":{"type":"integer","title":"Attempt Number"},"status":{"type":"string","title":"Status"},"body_sha256":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body Sha256"},"started_at":{"type":"string","title":"Started At"},"finished_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Finished At"},"response_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Status"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"retryable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Retryable"}},"type":"object","required":["id","attempt_number","status","started_at"],"title":"WebhookDeliveryAttemptResource"},"WebhookDeliveryList":{"properties":{"object":{"type":"string","const":"list","title":"Object","default":"list"},"data":{"items":{"$ref":"#/components/schemas/WebhookDeliveryResource"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Opaque cursor for the next page; never construct or modify it.","examples":["cur_opaque_encrypted_cursor"]}},"type":"object","required":["data","has_more"],"title":"WebhookDeliveryList"},"WebhookDeliveryResource":{"properties":{"id":{"type":"string","title":"Id"},"alert_id":{"type":"string","title":"Alert Id"},"sequence":{"type":"integer","title":"Sequence"},"connector_id":{"type":"string","title":"Connector Id"},"connector_name":{"type":"string","title":"Connector Name"},"status":{"type":"string","title":"Status"},"attempts":{"type":"integer","title":"Attempts"},"next_attempt_at":{"type":"string","title":"Next Attempt At"},"replay_count":{"type":"integer","title":"Replay Count"},"last_replayed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Replayed At"},"last_attempt_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Attempt At"},"response_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Status"},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"},"attempt_history":{"items":{"$ref":"#/components/schemas/WebhookDeliveryAttemptResource"},"type":"array","title":"Attempt History"}},"type":"object","required":["id","alert_id","sequence","connector_id","connector_name","status","attempts","next_attempt_at","replay_count","created_at","updated_at"],"title":"WebhookDeliveryResource"},"WebhookDeliveryRetryResource":{"properties":{"ok":{"type":"boolean","const":true,"title":"Ok","default":true},"delivery_id":{"type":"string","title":"Delivery Id"},"status":{"type":"string","const":"replayed","title":"Status","default":"replayed"},"replay_count":{"type":"integer","title":"Replay Count"},"last_replayed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Replayed At"}},"type":"object","required":["delivery_id","replay_count"],"title":"WebhookDeliveryRetryResource"},"WebhookEndpointCreate":{"properties":{"name":{"type":"string","maxLength":160,"title":"Name","default":"Webhook endpoint"},"url":{"type":"string","maxLength":2048,"minLength":8,"title":"Url"},"secret_env":{"anyOf":[{"type":"string","maxLength":160},{"type":"null"}],"title":"Secret Env"},"enabled":{"type":"boolean","title":"Enabled","default":true},"dry_run":{"type":"boolean","title":"Dry Run","default":false},"filters":{"$ref":"#/components/schemas/WebhookFilters"}},"additionalProperties":false,"type":"object","required":["url"],"title":"WebhookEndpointCreate","example":{"enabled":true,"filters":{"severities":["critical"]},"name":"Partner event receiver","secret_env":"SENTINEL_PARTNER_WEBHOOK_SECRET","url":"https://partner.example/sentinel/events"}},"WebhookEndpointList":{"properties":{"object":{"type":"string","const":"list","title":"Object","default":"list"},"data":{"items":{"$ref":"#/components/schemas/WebhookEndpointResource"},"type":"array","title":"Data"},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Opaque cursor for the next page; never construct or modify it.","examples":["cur_opaque_encrypted_cursor"]}},"type":"object","required":["data","has_more"],"title":"WebhookEndpointList"},"WebhookEndpointPatch":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":160},{"type":"null"}],"title":"Name"},"url":{"anyOf":[{"type":"string","maxLength":2048,"minLength":8},{"type":"null"}],"title":"Url"},"secret_env":{"anyOf":[{"type":"string","maxLength":160},{"type":"null"}],"title":"Secret Env"},"enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enabled"},"dry_run":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Dry Run"},"filters":{"anyOf":[{"$ref":"#/components/schemas/WebhookFilters"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"WebhookEndpointPatch"},"WebhookEndpointResource":{"properties":{"id":{"type":"string","title":"Id"},"object":{"type":"string","const":"webhook_endpoint","title":"Object","default":"webhook_endpoint"},"name":{"type":"string","title":"Name"},"url":{"type":"string","title":"Url"},"enabled":{"type":"boolean","title":"Enabled"},"dry_run":{"type":"boolean","title":"Dry Run"},"filters":{"$ref":"#/components/schemas/WebhookFilters"},"filters_valid":{"type":"boolean","title":"Filters Valid","default":true},"event_schema":{"type":"string","const":"sentinel.event.v1","title":"Event Schema","default":"sentinel.event.v1"},"secret_env":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secret Env"},"secret_configured":{"type":"boolean","title":"Secret Configured"},"pending_count":{"type":"integer","title":"Pending Count"},"dead_letter_count":{"type":"integer","title":"Dead Letter Count"},"last_delivery_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Delivery At"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["id","name","url","enabled","dry_run","secret_configured","pending_count","dead_letter_count","created_at","updated_at"],"title":"WebhookEndpointResource"},"WebhookFilters":{"properties":{"severities":{"items":{"type":"string","enum":["safe","suspicious","critical"]},"type":"array","maxItems":3,"title":"Severities"},"event_types":{"items":{"type":"string"},"type":"array","maxItems":100,"title":"Event Types"},"states":{"items":{"type":"string","enum":["raised","updated","cleared"]},"type":"array","maxItems":3,"title":"States"},"source_ids":{"items":{"type":"string"},"type":"array","maxItems":100,"title":"Source Ids","description":"Only deliver Events belonging to these Source IDs."},"monitor_ids":{"items":{"type":"string"},"type":"array","maxItems":100,"title":"Monitor Ids","description":"Only deliver Events belonging to these Monitor IDs."}},"additionalProperties":false,"type":"object","title":"WebhookFilters","description":"The complete public webhook filter language; unknown input is unsafe."},"WebhookTestDeliveryResource":{"properties":{"kind":{"type":"string","const":"connector","title":"Kind","default":"connector"},"connector_id":{"type":"string","title":"Connector Id"},"delivery_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delivery Id"},"status":{"type":"string","title":"Status"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["connector_id","status"],"title":"WebhookTestDeliveryResource"},"WebhookTestResource":{"properties":{"accepted":{"type":"boolean","const":true,"title":"Accepted","default":true},"event":{"$ref":"#/components/schemas/EventResource"},"deliveries":{"items":{"$ref":"#/components/schemas/WebhookTestDeliveryResource"},"type":"array","title":"Deliveries"}},"type":"object","required":["event","deliveries"],"title":"WebhookTestResource"}},"securitySchemes":{"BearerAuth":{"type":"http","description":"Sentinel bootstrap or scoped API key.","scheme":"bearer"}}},"tags":[{"name":"System","description":"Node health, resources, and model readiness."},{"name":"API keys","description":"Scoped and revocable integration credentials."},{"name":"Sources","description":"Durable RTSP and bounded frame inputs."},{"name":"Analyses","description":"Live ordinary inference text and frame metadata."},{"name":"Monitors","description":"Durable AI monitoring missions."},{"name":"Settings","description":"Operator-controlled alert policy and prompt routing."},{"name":"Events","description":"Versioned lifecycle events and evidence."},{"name":"Incidents","description":"Human-owned response workflows."},{"name":"Webhooks","description":"Signed at-least-once delivery endpoints and attempts."}],"servers":[{"url":"{sentinelBaseUrl}","description":"Sentinel Edge node or its trusted TLS proxy. Verify this destination before sending a Bearer key.","variables":{"sentinelBaseUrl":{"default":"http://127.0.0.1:8000","description":"Absolute base URL of the intended Sentinel Edge node or trusted TLS proxy."}}}],"x-public-contract-version":"1.0.0"}