{"openapi":"3.1.0","info":{"title":"Irris API","description":"The AI twin for manufacturing and engineering teams. See /developers.","version":"1.0"},"paths":{"/api/v1/auth/signup":{"post":{"summary":"Signup","operationId":"signup_api_v1_auth_signup_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/auth/login":{"post":{"summary":"Login","operationId":"login_api_v1_auth_login_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/auth/logout":{"post":{"summary":"Logout","operationId":"logout_api_v1_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/me":{"get":{"summary":"Me","operationId":"me_api_v1_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Update Me","operationId":"update_me_api_v1_me_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/workspaces":{"post":{"summary":"New Workspace","operationId":"new_workspace_api_v1_workspaces_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/workspace":{"get":{"summary":"Get Workspace","operationId":"get_workspace_api_v1_workspace_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"patch":{"summary":"Patch Workspace","operationId":"patch_workspace_api_v1_workspace_patch","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/members":{"get":{"summary":"Members","operationId":"members_api_v1_members_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Add Member","operationId":"add_member_api_v1_members_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/members/{user_id}":{"delete":{"summary":"Remove Member","operationId":"remove_member_api_v1_members__user_id__delete","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/keys":{"get":{"summary":"Keys","operationId":"keys_api_v1_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"New Key","operationId":"new_key_api_v1_keys_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/keys/{key_id}":{"delete":{"summary":"Delete Key","operationId":"delete_key_api_v1_keys__key_id__delete","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/ingest":{"post":{"summary":"Ingest","operationId":"ingest_api_v1_ingest_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/hooks/{secret}":{"post":{"summary":"Webhook","operationId":"webhook_api_v1_hooks__secret__post","parameters":[{"name":"secret","in":"path","required":true,"schema":{"type":"string","title":"Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/records":{"get":{"summary":"List Records","operationId":"list_records_api_v1_records_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"","title":"Type"}},{"name":"subject","in":"query","required":false,"schema":{"type":"string","default":"","title":"Subject"}},{"name":"source","in":"query","required":false,"schema":{"type":"string","default":"","title":"Source"}},{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Since"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/records/{record_id}":{"get":{"summary":"Get Record","operationId":"get_record_api_v1_records__record_id__get","parameters":[{"name":"record_id","in":"path","required":true,"schema":{"type":"string","title":"Record Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Record","operationId":"delete_record_api_v1_records__record_id__delete","parameters":[{"name":"record_id","in":"path","required":true,"schema":{"type":"string","title":"Record Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/search":{"get":{"summary":"Search","operationId":"search_api_v1_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"","title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/stats":{"get":{"summary":"Stats","operationId":"stats_api_v1_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/overview":{"get":{"summary":"Overview","operationId":"overview_api_v1_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/sources":{"get":{"summary":"Sources","operationId":"sources_api_v1_sources_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Add Source","operationId":"add_source_api_v1_sources_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/sources/{source_id}":{"patch":{"summary":"Patch Source","operationId":"patch_source_api_v1_sources__source_id__patch","parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"string","title":"Source Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Source","operationId":"delete_source_api_v1_sources__source_id__delete","parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"string","title":"Source Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sources/{source_id}/sync":{"post":{"summary":"Sync Source","operationId":"sync_source_api_v1_sources__source_id__sync_post","parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"string","title":"Source Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sources/{source_id}/query":{"post":{"summary":"Query Source","operationId":"query_source_api_v1_sources__source_id__query_post","parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"string","title":"Source Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/sources/{source_id}/schema":{"get":{"summary":"Source Schema","operationId":"source_schema_api_v1_sources__source_id__schema_get","parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"string","title":"Source Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/procedures":{"get":{"summary":"List Procedures","operationId":"list_procedures_api_v1_procedures_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Create Procedure","operationId":"create_procedure_api_v1_procedures_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/procedures/{proc_id}":{"get":{"summary":"Get Procedure","operationId":"get_procedure_api_v1_procedures__proc_id__get","parameters":[{"name":"proc_id","in":"path","required":true,"schema":{"type":"string","title":"Proc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Update Procedure","operationId":"update_procedure_api_v1_procedures__proc_id__put","parameters":[{"name":"proc_id","in":"path","required":true,"schema":{"type":"string","title":"Proc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Procedure","operationId":"delete_procedure_api_v1_procedures__proc_id__delete","parameters":[{"name":"proc_id","in":"path","required":true,"schema":{"type":"string","title":"Proc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/procedures/{proc_id}/draft-checks":{"post":{"summary":"Draft Checks","description":"Yes/no camera questions, typical errors, kind, severity and reversibility for every step (a proposal: save it\nwith PUT /procedures/{id}).","operationId":"draft_checks_api_v1_procedures__proc_id__draft_checks_post","parameters":[{"name":"proc_id","in":"path","required":true,"schema":{"type":"string","title":"Proc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/procedures/{proc_id}/learn":{"post":{"summary":"Learn Procedure","description":"Step order, typical durations and what \"done\" looks like, learned from the procedure's finished runs\n(a proposal: save it with PUT /procedures/{id}).","operationId":"learn_procedure_api_v1_procedures__proc_id__learn_post","parameters":[{"name":"proc_id","in":"path","required":true,"schema":{"type":"string","title":"Proc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/procedures/{proc_id}/steps/{index}":{"patch":{"summary":"Patch Step","description":"Partial update of one step (zones, instrument links, questions...).","operationId":"patch_step_api_v1_procedures__proc_id__steps__index__patch","parameters":[{"name":"proc_id","in":"path","required":true,"schema":{"type":"string","title":"Proc Id"}},{"name":"index","in":"path","required":true,"schema":{"type":"integer","title":"Index"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/procedures/draft":{"post":{"summary":"Draft Procedure","description":"Draft an SOP from a description and the team's documents (the team edits it before saving).","operationId":"draft_procedure_api_v1_procedures_draft_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/lessons":{"get":{"summary":"List Lessons","operationId":"list_lessons_api_v1_lessons_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Create Lesson","operationId":"create_lesson_api_v1_lessons_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/lessons/{lesson_id}":{"delete":{"summary":"Delete Lesson","operationId":"delete_lesson_api_v1_lessons__lesson_id__delete","parameters":[{"name":"lesson_id","in":"path","required":true,"schema":{"type":"string","title":"Lesson Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/training/export":{"get":{"summary":"Training Export","description":"JSONL for fine-tuning: every conversation in chat format, then lessons and procedures.","operationId":"training_export_api_v1_training_export_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/ask":{"post":{"summary":"Ask","operationId":"ask_api_v1_ask_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/conversations":{"get":{"summary":"Conversations","operationId":"conversations_api_v1_conversations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/conversations/{conv_id}":{"get":{"summary":"Conversation","operationId":"conversation_api_v1_conversations__conv_id__get","parameters":[{"name":"conv_id","in":"path","required":true,"schema":{"type":"string","title":"Conv Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Conversation","operationId":"delete_conversation_api_v1_conversations__conv_id__delete","parameters":[{"name":"conv_id","in":"path","required":true,"schema":{"type":"string","title":"Conv Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cameras":{"get":{"summary":"Cameras","operationId":"cameras_api_v1_cameras_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Add Camera","operationId":"add_camera_api_v1_cameras_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/cameras/{camera_id}/pair":{"post":{"summary":"Repair Camera","operationId":"repair_camera_api_v1_cameras__camera_id__pair_post","parameters":[{"name":"camera_id","in":"path","required":true,"schema":{"type":"string","title":"Camera Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cameras/{camera_id}":{"delete":{"summary":"Delete Camera","operationId":"delete_camera_api_v1_cameras__camera_id__delete","parameters":[{"name":"camera_id","in":"path","required":true,"schema":{"type":"string","title":"Camera Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cameras/{camera_id}/frame.jpg":{"get":{"summary":"Camera Frame","operationId":"camera_frame_api_v1_cameras__camera_id__frame_jpg_get","parameters":[{"name":"camera_id","in":"path","required":true,"schema":{"type":"string","title":"Camera Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cameras/{camera_id}/frame":{"post":{"summary":"Push Frame Signed In","description":"A signed-in browser streaming its own camera (Live → This device).","operationId":"push_frame_signed_in_api_v1_cameras__camera_id__frame_post","parameters":[{"name":"camera_id","in":"path","required":true,"schema":{"type":"string","title":"Camera Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cam/frame":{"post":{"summary":"Push Frame Paired","description":"A paired phone (no account on the phone; the pairing token is the credential).","operationId":"push_frame_paired_api_v1_cam_frame_post","parameters":[{"name":"t","in":"query","required":false,"schema":{"type":"string","default":"","title":"T"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cam/info":{"get":{"summary":"Paired Info","operationId":"paired_info_api_v1_cam_info_get","parameters":[{"name":"t","in":"query","required":false,"schema":{"type":"string","default":"","title":"T"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cameras/{camera_id}/look":{"post":{"summary":"Camera Look","operationId":"camera_look_api_v1_cameras__camera_id__look_post","parameters":[{"name":"camera_id","in":"path","required":true,"schema":{"type":"string","title":"Camera Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/runs":{"get":{"summary":"List Runs","operationId":"list_runs_api_v1_runs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Start Run","operationId":"start_run_api_v1_runs_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/runs/{run_id}":{"get":{"summary":"Get Run","operationId":"get_run_api_v1_runs__run_id__get","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/runs/{run_id}/check":{"post":{"summary":"Check Run","description":"Check the current step through the camera (body: {\"camera_id\"?}), or mark it by hand\n(body: {\"result\": \"pass|fail|skip\", \"note\"?, \"reading\"?: {\"value\", \"unit\"}}).","operationId":"check_run_api_v1_runs__run_id__check_post","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/runs/{run_id}/recover":{"post":{"summary":"Recover Run","description":"{} or {\"step\", \"error\"}: propose a recovery plan (what happened, what it breaks, why, how to fix it).\n{\"accept\": true}: insert the proposed recovery steps into the run (or reopen the step);\n{\"accept\": false} or {\"dismiss\": true}: dismiss it.","operationId":"recover_run_api_v1_runs__run_id__recover_post","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/runs/{run_id}/back":{"post":{"summary":"Run Back","description":"Go back a step (reopens the previous step).","operationId":"run_back_api_v1_runs__run_id__back_post","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/runs/{run_id}/stop":{"post":{"summary":"Run Stop","description":"Stop the run; its batch record lists what wasn't done.","operationId":"run_stop_api_v1_runs__run_id__stop_post","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/health":{"get":{"summary":"Health","operationId":"health_api_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/irf":{"get":{"summary":"Irf Spec","operationId":"irf_spec_api_v1_irf_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/mcp":{"get":{"summary":"Mcp Get","operationId":"mcp_get_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Mcp Post","operationId":"mcp_post_mcp_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/ingest/file":{"post":{"summary":"Ingest File","description":"Store the file, then read it. Small files are read before this returns; big ones by a background job\n(the response has `job`). Documents are studied afterwards (always with teach=true).","operationId":"ingest_file_api_v1_ingest_file_post","parameters":[{"name":"source","in":"query","required":false,"schema":{"type":"string","default":"upload","title":"Source"}},{"name":"teach","in":"query","required":false,"schema":{"type":"string","default":"","title":"Teach"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_ingest_file_api_v1_ingest_file_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/files/{file_id}":{"get":{"summary":"Get File","operationId":"get_file_api_v1_files__file_id__get","parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents":{"get":{"summary":"List Documents","operationId":"list_documents_api_v1_documents_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/{record_id}":{"get":{"summary":"Get Document","operationId":"get_document_api_v1_documents__record_id__get","parameters":[{"name":"record_id","in":"path","required":true,"schema":{"type":"string","title":"Record Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/{record_id}/pages":{"get":{"summary":"Document Pages","operationId":"document_pages_api_v1_documents__record_id__pages_get","parameters":[{"name":"record_id","in":"path","required":true,"schema":{"type":"string","title":"Record Id"}},{"name":"start","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"End"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/{record_id}/search":{"get":{"summary":"Document Search","operationId":"document_search_api_v1_documents__record_id__search_get","parameters":[{"name":"record_id","in":"path","required":true,"schema":{"type":"string","title":"Record Id"}},{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/documents/{record_id}/study":{"post":{"summary":"Study Document","operationId":"study_document_api_v1_documents__record_id__study_post","parameters":[{"name":"record_id","in":"path","required":true,"schema":{"type":"string","title":"Record Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge":{"get":{"summary":"Knowledge","operationId":"knowledge_api_v1_knowledge_get","parameters":[{"name":"document_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Document Id"}},{"name":"kind","in":"query","required":false,"schema":{"type":"string","default":"","title":"Kind"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs":{"get":{"summary":"List Jobs","operationId":"list_jobs_api_v1_jobs_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"","title":"Status"}},{"name":"kind","in":"query","required":false,"schema":{"type":"string","default":"","title":"Kind"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/{job_id}":{"get":{"summary":"Get Job","operationId":"get_job_api_v1_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/{job_id}/cancel":{"post":{"summary":"Cancel Job","operationId":"cancel_job_api_v1_jobs__job_id__cancel_post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/{job_id}/retry":{"post":{"summary":"Retry Job","operationId":"retry_job_api_v1_jobs__job_id__retry_post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memories":{"get":{"summary":"List Memories","operationId":"list_memories_api_v1_memories_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"history","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"History"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Add Memory","operationId":"add_memory_api_v1_memories_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/memories/{memory_id}":{"patch":{"summary":"Patch Memory","operationId":"patch_memory_api_v1_memories__memory_id__patch","parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","title":"Memory Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Memory","operationId":"delete_memory_api_v1_memories__memory_id__delete","parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","title":"Memory Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memories/{memory_id}/history":{"get":{"summary":"Memory History","description":"Every value this fact has had (superseded ones too), and the memory's event log.","operationId":"memory_history_api_v1_memories__memory_id__history_get","parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string","title":"Memory Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memory/events":{"get":{"summary":"Memory Events","operationId":"memory_events_api_v1_memory_events_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memory/consolidate":{"post":{"summary":"Run Consolidation","operationId":"run_consolidation_api_v1_memory_consolidate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/usage":{"get":{"summary":"Get Usage","operationId":"get_usage_api_v1_usage_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":7,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/usage/limits":{"patch":{"summary":"Set Usage Limits","operationId":"set_usage_limits_api_v1_usage_limits_patch","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/usage/calls":{"get":{"summary":"Usage Calls","operationId":"usage_calls_api_v1_usage_calls_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"task","in":"query","required":false,"schema":{"type":"string","default":"","title":"Task"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/conversations/{conv_id}/summary":{"get":{"summary":"Conversation Summary","operationId":"conversation_summary_api_v1_conversations__conv_id__summary_get","parameters":[{"name":"conv_id","in":"path","required":true,"schema":{"type":"string","title":"Conv Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/insights":{"get":{"summary":"List Insights","operationId":"list_insights_api_v1_insights_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/insights/run":{"post":{"summary":"Run Insights","operationId":"run_insights_api_v1_insights_run_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/stats/series":{"get":{"summary":"Series Stats","operationId":"series_stats_api_v1_stats_series_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"type":"string","default":"reading","title":"Type"}},{"name":"field","in":"query","required":false,"schema":{"type":"string","default":"value","title":"Field"}},{"name":"subject","in":"query","required":false,"schema":{"type":"string","default":"","title":"Subject"}},{"name":"source","in":"query","required":false,"schema":{"type":"string","default":"","title":"Source"}},{"name":"hours","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Hours"}},{"name":"group_by","in":"query","required":false,"schema":{"type":"string","default":"subject","title":"Group By"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/knowledge/status":{"get":{"summary":"Knowledge Status","description":"How much Irris knows: documents, pages, study notes, memories, embeddings, work in progress.","operationId":"knowledge_status_api_v1_knowledge_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/vision/status":{"get":{"summary":"Vision Status","operationId":"vision_status_api_v1_vision_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/voice/settings":{"get":{"summary":"Voice Settings","operationId":"voice_settings_api_v1_voice_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"summary":"Put Voice Settings","operationId":"put_voice_settings_api_v1_voice_settings_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/voice/voices":{"get":{"summary":"Voice Voices","operationId":"voice_voices_api_v1_voice_voices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/voice/stt":{"post":{"summary":"Stt","operationId":"stt_api_v1_voice_stt_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_stt_api_v1_voice_stt_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/voice/tts":{"post":{"summary":"Tts","operationId":"tts_api_v1_voice_tts_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/voice/test":{"post":{"summary":"Voice Test","description":"Try the configured speech engines end to end: speak a sentence, then transcribe it back.","operationId":"voice_test_api_v1_voice_test_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/cameras/{camera_id}/state":{"get":{"summary":"Get Camera State","operationId":"get_camera_state_api_v1_cameras__camera_id__state_get","parameters":[{"name":"camera_id","in":"path","required":true,"schema":{"type":"string","title":"Camera Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Put Camera State","operationId":"put_camera_state_api_v1_cameras__camera_id__state_put","parameters":[{"name":"camera_id","in":"path","required":true,"schema":{"type":"string","title":"Camera Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cameras/{camera_id}/snapshot":{"post":{"summary":"Snapshot","description":"Keep the current frame: a file plus an `image` record (searchable, citable).","operationId":"snapshot_api_v1_cameras__camera_id__snapshot_post","parameters":[{"name":"camera_id","in":"path","required":true,"schema":{"type":"string","title":"Camera Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cameras/{camera_id}/read":{"post":{"summary":"Read Instrument","description":"Read the instrument in view (vision model, cross-checked by the gauge reader / OCR) and log the reading.","operationId":"read_instrument_api_v1_cameras__camera_id__read_post","parameters":[{"name":"camera_id","in":"path","required":true,"schema":{"type":"string","title":"Camera Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/watch":{"get":{"summary":"Rules","operationId":"rules_api_v1_watch_get","parameters":[{"name":"camera_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Camera Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Add Rule","operationId":"add_rule_api_v1_watch_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/watch/{rule_id}":{"patch":{"summary":"Patch Rule","operationId":"patch_rule_api_v1_watch__rule_id__patch","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Rule","operationId":"delete_rule_api_v1_watch__rule_id__delete","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/watch/{rule_id}/test":{"post":{"summary":"Test Rule","operationId":"test_rule_api_v1_watch__rule_id__test_post","parameters":[{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts":{"get":{"summary":"Recent Alerts","operationId":"recent_alerts_api_v1_alerts_get","parameters":[{"name":"since","in":"query","required":false,"schema":{"type":"number","default":0,"title":"Since"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/alerts/stream":{"get":{"summary":"Alert Stream","operationId":"alert_stream_api_v1_alerts_stream_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/cameras/{camera_id}/review":{"post":{"summary":"Review Recent","operationId":"review_recent_api_v1_cameras__camera_id__review_post","parameters":[{"name":"camera_id","in":"path","required":true,"schema":{"type":"string","title":"Camera Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/video/review":{"post":{"summary":"Review Video","operationId":"review_video_api_v1_video_review_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_review_video_api_v1_video_review_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/jobs":{"get":{"summary":"Jobs","operationId":"jobs_api_v1_media_jobs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/media/jobs/{job_id}":{"get":{"summary":"Job","operationId":"job_api_v1_media_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/runs/{run_id}/check/auto":{"post":{"summary":"Autocheck","description":"Auto-check: the model is asked only when the step's region changed since the last check. Unchanged ->\n{\"check\": {\"result\": \"unchanged\", \"skipped\": true}} at no model cost.","operationId":"autocheck_api_v1_runs__run_id__check_auto_post","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/instruments":{"get":{"summary":"List Instruments","operationId":"list_instruments_api_v1_instruments_get","parameters":[{"name":"camera_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Camera Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Create Instrument","operationId":"create_instrument_api_v1_instruments_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/instruments/{iid}":{"put":{"summary":"Update Instrument","operationId":"update_instrument_api_v1_instruments__iid__put","parameters":[{"name":"iid","in":"path","required":true,"schema":{"type":"string","title":"Iid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Instrument","operationId":"delete_instrument_api_v1_instruments__iid__delete","parameters":[{"name":"iid","in":"path","required":true,"schema":{"type":"string","title":"Iid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/instruments/{iid}/read":{"post":{"summary":"Read Instrument","description":"Read it from the camera's latest frames (body {} uses the instrument's camera; \"camera_id\" overrides;\n\"limits\": {\"min\", \"max\"} flags values near a limit). The vision model is used only when geometry/OCR can't read\nit, and its value always needs a person to confirm.","operationId":"read_instrument_api_v1_instruments__iid__read_post","parameters":[{"name":"iid","in":"path","required":true,"schema":{"type":"string","title":"Iid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cameras/{camera_id}/rois":{"get":{"summary":"Rois","operationId":"rois_api_v1_cameras__camera_id__rois_get","parameters":[{"name":"camera_id","in":"path","required":true,"schema":{"type":"string","title":"Camera Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cameras/{camera_id}/roi":{"put":{"summary":"Put Roi","description":"The area to read on this camera: for one step (\"<procedure_id>:<step index>\") or the camera's default.","operationId":"put_roi_api_v1_cameras__camera_id__roi_put","parameters":[{"name":"camera_id","in":"path","required":true,"schema":{"type":"string","title":"Camera Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Roi","operationId":"delete_roi_api_v1_cameras__camera_id__roi_delete","parameters":[{"name":"camera_id","in":"path","required":true,"schema":{"type":"string","title":"Camera Id"}},{"name":"key","in":"query","required":false,"schema":{"type":"string","default":"default","title":"Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/observations":{"get":{"summary":"Observations","description":"What the cameras saw, as facts. With q: answered from facts alone (\"when did the guard open?\",\n\"what happened at 10:15?\", \"last reading of the platen\"), strict first, then relaxed. No model call.","operationId":"observations_api_v1_observations_get","parameters":[{"name":"camera_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Camera Id"}},{"name":"since","in":"query","required":false,"schema":{"type":"number","default":0,"title":"Since"}},{"name":"until","in":"query","required":false,"schema":{"type":"number","default":0,"title":"Until"}},{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"tz_offset_min","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Tz Offset Min"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cameras/{camera_id}/summaries":{"get":{"summary":"Shift Summaries","operationId":"shift_summaries_api_v1_cameras__camera_id__summaries_get","parameters":[{"name":"camera_id","in":"path","required":true,"schema":{"type":"string","title":"Camera Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/recordings":{"post":{"summary":"Upload Recording","description":"A clip from Live: kept as a file and a `recording` record, attached to the run (evidence), then reviewed.","operationId":"upload_recording_api_v1_recordings_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_recording_api_v1_recordings_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cam/recording":{"post":{"summary":"Paired Recording","operationId":"paired_recording_api_v1_cam_recording_post","parameters":[{"name":"t","in":"query","required":true,"schema":{"type":"string","title":"T"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_paired_recording_api_v1_cam_recording_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/cam/tts":{"post":{"summary":"Paired Tts","description":"The paired phone speaks verdicts and alerts in the workspace's voice.","operationId":"paired_tts_api_v1_cam_tts_post","parameters":[{"name":"t","in":"query","required":true,"schema":{"type":"string","title":"T"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/media/files/{file_id}":{"get":{"summary":"Media File","description":"A stored file with HTTP Range support, so recorded clips play and seek in the browser.","operationId":"media_file_api_v1_media_files__file_id__get","parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string","title":"File Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mcp-servers":{"get":{"summary":"List Servers","operationId":"list_servers_api_v1_mcp_servers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Add Server","operationId":"add_server_api_v1_mcp_servers_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/mcp-servers/{server_id}/refresh":{"post":{"summary":"Refresh Server","operationId":"refresh_server_api_v1_mcp_servers__server_id__refresh_post","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mcp-servers/{server_id}":{"patch":{"summary":"Update Server","operationId":"update_server_api_v1_mcp_servers__server_id__patch","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Delete Server","operationId":"delete_server_api_v1_mcp_servers__server_id__delete","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mcp-servers/{server_id}/call":{"post":{"summary":"Call Server","description":"Try a tool (or read a resource with {\"resource\": uri}). {\"save\": true} also stores what came back.","operationId":"call_server_api_v1_mcp_servers__server_id__call_post","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mcp-servers/{server_id}/syncs":{"post":{"summary":"Add Sync","operationId":"add_sync_api_v1_mcp_servers__server_id__syncs_post","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mcp-servers/{server_id}/syncs/{sync_id}/approve":{"post":{"summary":"Approve Sync","description":"A sync writes records on a schedule, so it runs only after an admin approves it ({\"approve\": false} pauses).","operationId":"approve_sync_api_v1_mcp_servers__server_id__syncs__sync_id__approve_post","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}},{"name":"sync_id","in":"path","required":true,"schema":{"type":"string","title":"Sync Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mcp-servers/{server_id}/syncs/{sync_id}":{"delete":{"summary":"Delete Sync","operationId":"delete_sync_api_v1_mcp_servers__server_id__syncs__sync_id__delete","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}},{"name":"sync_id","in":"path","required":true,"schema":{"type":"string","title":"Sync Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mcp-servers/{server_id}/syncs/{sync_id}/run":{"post":{"summary":"Run Sync Now","operationId":"run_sync_now_api_v1_mcp_servers__server_id__syncs__sync_id__run_post","parameters":[{"name":"server_id","in":"path","required":true,"schema":{"type":"string","title":"Server Id"}},{"name":"sync_id","in":"path","required":true,"schema":{"type":"string","title":"Sync Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/status/{kind}/{obj_id}":{"get":{"summary":"Status","description":"Why any long-running thing is in the state it's in, what unblocks it, and what can be called now.\nkind: run, job, media_job, camera, source, mcp_server, mcp_sync (id = server_id:sync_id), instrument, webhook,\nonboarding (id = anything).","operationId":"status_api_v1_status__kind___obj_id__get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","title":"Kind"}},{"name":"obj_id","in":"path","required":true,"schema":{"type":"string","title":"Obj Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/changes":{"get":{"summary":"Changes","description":"Everything that changed after `cursor`, oldest first. Keep the returned cursor and ask again; `more` says\nwhether to ask straight away. Kinds include records.written, step.failed, deviation.opened, run.completed,\nbatch.released, approval.*, instrument.out_of_limits, sync.failed.","operationId":"changes_api_v1_changes_get","parameters":[{"name":"cursor","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Cursor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"kinds","in":"query","required":false,"schema":{"type":"string","default":"","title":"Kinds"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/feedback":{"get":{"summary":"Feedback List","operationId":"feedback_list_api_v1_feedback_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Feedback","description":"Tell the Irris team something (a bug, a missing feature, a wrong answer). Free, for people and agents.","operationId":"feedback_api_v1_feedback_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/audit":{"get":{"summary":"Audit","operationId":"audit_api_v1_audit_get","parameters":[{"name":"kind","in":"query","required":false,"schema":{"type":"string","default":"","title":"Kind"}},{"name":"ref","in":"query","required":false,"schema":{"type":"string","default":"","title":"Ref"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/runs/{run_id}/signoff":{"post":{"summary":"Signoff","description":"Sign a finished run's batch record: {\"meaning\": \"reviewed\"|\"approved\", \"password\", \"comment\"?}.\nA signature is a person re-entering their password (API keys can't sign). \"approved\" releases the batch.","operationId":"signoff_api_v1_runs__run_id__signoff_post","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks":{"get":{"summary":"Webhook List","operationId":"webhook_list_api_v1_webhooks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Webhook Create","description":"{\"url\", \"events\"?: [...], \"name\"?}. Starts as a draft (sends nothing but tests) until an admin approves it.\nThe signing secret is returned once.","operationId":"webhook_create_api_v1_webhooks_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/webhooks/{wid}/{action}":{"post":{"summary":"Webhook Action","operationId":"webhook_action_api_v1_webhooks__wid___action__post","parameters":[{"name":"wid","in":"path","required":true,"schema":{"type":"string","title":"Wid"}},{"name":"action","in":"path","required":true,"schema":{"type":"string","title":"Action"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks/{wid}/deliveries":{"get":{"summary":"Webhook Deliveries","operationId":"webhook_deliveries_api_v1_webhooks__wid__deliveries_get","parameters":[{"name":"wid","in":"path","required":true,"schema":{"type":"string","title":"Wid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks/{wid}":{"delete":{"summary":"Webhook Delete","operationId":"webhook_delete_api_v1_webhooks__wid__delete","parameters":[{"name":"wid","in":"path","required":true,"schema":{"type":"string","title":"Wid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/onboarding":{"get":{"summary":"Onboarding Get","operationId":"onboarding_get_api_v1_onboarding_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Onboarding Start","description":"{\"url\"} or {\"answers\": {\"makes\", \"process\", \"market\"}}: draft the twin in the background.","operationId":"onboarding_start_api_v1_onboarding_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/onboarding/decide":{"post":{"summary":"Onboarding Decide","description":"{\"item\": \"profile\"|\"procedure:0\"|\"standard:1\"|\"document:2\", \"decision\": \"accept\"|\"reject\"}","operationId":"onboarding_decide_api_v1_onboarding_decide_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/query/parse":{"post":{"summary":"Query Parse","description":"{\"text\"} -> the structured query it means (type, subject, time window, conditions), without running it.","operationId":"query_parse_api_v1_query_parse_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/query/run":{"post":{"summary":"Query Run","description":"{\"text\"} or {\"query\": <a parsed query, possibly edited>}: run it.","operationId":"query_run_api_v1_query_run_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"Body_ingest_file_api_v1_ingest_file_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_ingest_file_api_v1_ingest_file_post"},"Body_paired_recording_api_v1_cam_recording_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"review":{"type":"boolean","title":"Review","default":true}},"type":"object","required":["file"],"title":"Body_paired_recording_api_v1_cam_recording_post"},"Body_review_video_api_v1_video_review_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"question":{"type":"string","title":"Question","default":""},"procedure_id":{"type":"string","title":"Procedure Id","default":""}},"type":"object","required":["file"],"title":"Body_review_video_api_v1_video_review_post"},"Body_stt_api_v1_voice_stt_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_stt_api_v1_voice_stt_post"},"Body_upload_recording_api_v1_recordings_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"run_id":{"type":"string","title":"Run Id","default":""},"camera_id":{"type":"string","title":"Camera Id","default":""},"review":{"type":"boolean","title":"Review","default":true},"question":{"type":"string","title":"Question","default":""}},"type":"object","required":["file"],"title":"Body_upload_recording_api_v1_recordings_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}