{"openapi":"3.1.0","info":{"title":"UNICHE Media Editor API","description":"MVP backend for the UNICHE Media Editor.","version":"0.1.0"},"paths":{"/health":{"get":{"tags":["system"],"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}},"/api/v1/projects":{"get":{"tags":["projects"],"summary":"List Projects","operationId":"list_projects_api_v1_projects_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ProjectListItem"},"type":"array","title":"Response List Projects Api V1 Projects Get"}}}}}},"post":{"tags":["projects"],"summary":"Create Project","operationId":"create_project_api_v1_projects_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}":{"get":{"tags":["projects"],"summary":"Get Project","operationId":"get_project_api_v1_projects__project_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["projects"],"summary":"Update Project","operationId":"update_project_api_v1_projects__project_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["projects"],"summary":"Delete Project","operationId":"delete_project_api_v1_projects__project_id__delete","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/assets":{"post":{"tags":["assets"],"summary":"Upload Asset","operationId":"upload_asset_api_v1_projects__project_id__assets_post","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_asset_api_v1_projects__project_id__assets_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["assets"],"summary":"List Assets","operationId":"list_assets_api_v1_projects__project_id__assets_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"include_intermediate","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Intermediate"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AssetRead"},"title":"Response List Assets Api V1 Projects  Project Id  Assets Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}":{"get":{"tags":["assets"],"summary":"Get Asset","operationId":"get_asset_api_v1_assets__asset_id__get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["assets"],"summary":"Delete Asset","operationId":"delete_asset_api_v1_assets__asset_id__delete","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/assets/{asset_id}/download":{"get":{"tags":["assets"],"summary":"Download Asset","operationId":"download_asset_api_v1_assets__asset_id__download_get","parameters":[{"name":"asset_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Asset Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/capabilities":{"get":{"tags":["capabilities"],"summary":"List Capabilities","operationId":"list_capabilities_api_v1_capabilities_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CapabilityRead"},"type":"array","title":"Response List Capabilities Api V1 Capabilities Get"}}}}}}},"/api/v1/capabilities/{capability_id}":{"get":{"tags":["capabilities"],"summary":"Get Capability","operationId":"get_capability_api_v1_capabilities__capability_id__get","parameters":[{"name":"capability_id","in":"path","required":true,"schema":{"type":"string","title":"Capability Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CapabilityRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs":{"post":{"tags":["jobs"],"summary":"Create Job","operationId":"create_job_api_v1_jobs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/{job_id}":{"get":{"tags":["jobs"],"summary":"Get Job","operationId":"get_job_api_v1_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/projects/{project_id}/jobs":{"get":{"tags":["jobs"],"summary":"List Project Jobs","operationId":"list_project_jobs_api_v1_projects__project_id__jobs_get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Project Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_JobRead_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/jobs/{job_id}/events":{"get":{"tags":["jobs"],"summary":"Job Events","description":"Server-Sent Events stream of a job's status/progress until terminal.","operationId":"job_events_api_v1_jobs__job_id__events_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","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/agent/sessions":{"post":{"tags":["agent"],"summary":"Create Session","operationId":"create_session_api_v1_agent_sessions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/sessions/{session_id}":{"get":{"tags":["agent"],"summary":"Get Session Detail","operationId":"get_session_detail_api_v1_agent_sessions__session_id__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentSessionRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/sessions/{session_id}/messages":{"post":{"tags":["agent"],"summary":"Post Message","operationId":"post_message_api_v1_agent_sessions__session_id__messages_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentMessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/plans/{plan_id}":{"get":{"tags":["agent"],"summary":"Get Plan","operationId":"get_plan_api_v1_agent_plans__plan_id__get","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentPlanRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/plans/{plan_id}/approve":{"post":{"tags":["agent"],"summary":"Approve Plan","operationId":"approve_plan_api_v1_agent_plans__plan_id__approve_post","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentPlanRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AgentMessageResponse":{"properties":{"type":{"type":"string","enum":["plan","clarification"],"title":"Type"},"question":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Question"},"missing":{"items":{"type":"string"},"type":"array","title":"Missing"},"plan":{"anyOf":[{"$ref":"#/components/schemas/AgentPlanRead"},{"type":"null"}]}},"type":"object","required":["type"],"title":"AgentMessageResponse"},"AgentPlanRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"session_id":{"type":"string","format":"uuid","title":"Session Id"},"summary":{"type":"string","title":"Summary"},"status":{"$ref":"#/components/schemas/AgentPlanStatus"},"steps":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Steps"},"step_runs":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Step Runs"},"result_asset_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Result Asset Ids"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","session_id","summary","status","steps","step_runs","result_asset_ids","error","created_at","updated_at"],"title":"AgentPlanRead"},"AgentPlanStatus":{"type":"string","enum":["proposed","approved","running","succeeded","failed"],"title":"AgentPlanStatus"},"AgentSessionCreate":{"properties":{"project_id":{"type":"string","format":"uuid","title":"Project Id"},"asset_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Asset Ids"}},"type":"object","required":["project_id"],"title":"AgentSessionCreate"},"AgentSessionRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"project_id":{"type":"string","format":"uuid","title":"Project Id"},"asset_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Asset Ids"},"transcript":{"items":{"$ref":"#/components/schemas/TranscriptMessage"},"type":"array","title":"Transcript"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","project_id","asset_ids","transcript","created_at","updated_at"],"title":"AgentSessionRead"},"AssetRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"project_id":{"type":"string","format":"uuid","title":"Project Id"},"filename":{"type":"string","title":"Filename"},"original_filename":{"type":"string","title":"Original Filename"},"media_type":{"$ref":"#/components/schemas/MediaType"},"mime_type":{"type":"string","title":"Mime Type"},"extension":{"type":"string","title":"Extension"},"size_bytes":{"type":"integer","title":"Size Bytes"},"storage_path":{"type":"string","title":"Storage Path"},"checksum_sha256":{"type":"string","title":"Checksum Sha256"},"source_asset_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Source Asset Id"},"is_intermediate":{"type":"boolean","title":"Is Intermediate"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"}},"type":"object","required":["id","project_id","filename","original_filename","media_type","mime_type","extension","size_bytes","storage_path","checksum_sha256","source_asset_id","is_intermediate","created_at","updated_at","deleted_at"],"title":"AssetRead"},"Body_upload_asset_api_v1_projects__project_id__assets_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_asset_api_v1_projects__project_id__assets_post"},"CapabilityRead":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description"},"input_schema":{"additionalProperties":true,"type":"object","title":"Input Schema"},"output_schema":{"additionalProperties":true,"type":"object","title":"Output Schema"},"supported_media_types":{"items":{"$ref":"#/components/schemas/MediaType"},"type":"array","title":"Supported Media Types"},"cost_class":{"$ref":"#/components/schemas/CostClass"},"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["id","title","description","input_schema","output_schema","supported_media_types","cost_class","enabled"],"title":"CapabilityRead"},"CostClass":{"type":"string","enum":["local_cpu","hosted_ai","future_gpu","deterministic"],"title":"CostClass"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthResponse":{"properties":{"status":{"type":"string","title":"Status","default":"ok"},"service":{"type":"string","title":"Service"}},"type":"object","required":["service"],"title":"HealthResponse"},"JobCreate":{"properties":{"capability_id":{"type":"string","maxLength":128,"minLength":1,"title":"Capability Id"},"project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"},"asset_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Asset Id"},"input":{"additionalProperties":true,"type":"object","title":"Input"}},"type":"object","required":["capability_id"],"title":"JobCreate"},"JobRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"},"asset_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Asset Id"},"capability_id":{"type":"string","title":"Capability Id"},"status":{"$ref":"#/components/schemas/JobStatus"},"input":{"additionalProperties":true,"type":"object","title":"Input"},"output":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Output"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"progress":{"type":"integer","title":"Progress"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"finished_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Finished At"}},"type":"object","required":["id","project_id","asset_id","capability_id","status","input","output","error","progress","created_at","updated_at","started_at","finished_at"],"title":"JobRead"},"JobStatus":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"],"title":"JobStatus"},"MediaType":{"type":"string","enum":["image","audio","video","subtitle","unknown"],"title":"MediaType"},"MessageCreate":{"properties":{"content":{"type":"string","minLength":1,"title":"Content"}},"type":"object","required":["content"],"title":"MessageCreate"},"Page_JobRead_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/JobRead"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["items","total","limit","offset"],"title":"Page[JobRead]"},"ProjectCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"slug":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]{1,62}$","title":"Slug"},"org_id":{"type":"string","format":"uuid","title":"Org Id"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["name","slug","org_id"],"title":"ProjectCreate","description":"Create-up payload: the editor creates the project in the catalogue.\n\n``org_id`` selects which organisation to create under (the user must be a\nmanager of it). ``description`` is stored only in the editor."},"ProjectListItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"org_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"},"name":{"type":"string","title":"Name"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","name"],"title":"ProjectListItem","description":"Picker entry — built live from the catalogue, merged with local description."},"ProjectRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"org_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Org Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"}},"type":"object","required":["id","org_id","name","description","created_at","updated_at","deleted_at"],"title":"ProjectRead"},"ProjectUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","title":"ProjectUpdate"},"TranscriptMessage":{"properties":{"role":{"type":"string","title":"Role"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"}},"type":"object","required":["role","content"],"title":"TranscriptMessage"},"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"}}}}