{"openapi":"3.1.0","info":{"title":"Cyberdesk Cloud","description":"The Cyberdesk API provides programmatic access to all platform features, enabling you to automate desktop tasks at scale.","version":"1.0.0"},"servers":[{"url":"https://api.cyberdesk.io","description":"Production server"},{"url":"https://cyberdesk-api-dev.fly.dev","description":"Development server"}],"paths":{"/v1/health":{"get":{"tags":["health"],"summary":"Health Check","description":"Basic health check endpoint.\n\nReturns the service status without authentication.","operationId":"health_check_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Health Check V1 Health Get"}}}}}}},"/v1/health/db":{"get":{"tags":["health"],"summary":"Database Health Check","description":"Database health check endpoint.\n\nVerifies database connectivity without authentication.","operationId":"database_health_check_v1_health_db_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/machines":{"get":{"tags":["machines"],"summary":"List Machines","description":"List all machines for the authenticated organization.\n\nSupports pagination and filtering by status, name, or substring search.\n\nUse the `include` parameter to fetch related resources in the response.\nRelated resources are returned in the `included` array following the JSON:API pattern.","operationId":"list_machines_v1_machines_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search machines by id, name, or hostname (case-insensitive substring match)","title":"Search"},"description":"Search machines by id, name, or hostname (case-insensitive substring match)"},{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact-match filter on the machine's name (case-sensitive). Use this to look up machines by the value passed to `cyberdriver --name`, e.g. when correlating VMs you spawned from the same image. Names are not unique; the response is a list.","title":"Name"},"description":"Exact-match filter on the machine's name (case-sensitive). Use this to look up machines by the value passed to `cyberdriver --name`, e.g. when correlating VMs you spawned from the same image. Names are not unique; the response is a list."},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/MachineStatus"},{"type":"null"}],"description":"Filter by machine status","title":"Status"},"description":"Filter by machine status"},{"name":"created_at_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter machines created at or after this ISO timestamp (UTC)","title":"Created At From"},"description":"Filter machines created at or after this ISO timestamp (UTC)"},{"name":"created_at_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter machines created at or before this ISO timestamp (UTC)","title":"Created At To"},"description":"Filter machines created at or before this ISO timestamp (UTC)"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated list of related resources to include. Allowed values: pools. Example: include=pools","title":"Include"},"description":"Comma-separated list of related resources to include. Allowed values: pools. Example: include=pools"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseWithIncludes_MachineResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["machines"],"summary":"Create Machine","description":"Create a new machine.\n\nThe machine will be associated with the authenticated organization.","operationId":"create_machine_v1_machines_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MachineCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MachineResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}]}},"/v1/machines/{machine_id}":{"get":{"tags":["machines"],"summary":"Get Machine","description":"Get a specific machine by ID.\n\nThe machine must belong to the authenticated organization.\n\nUse the `include` parameter to fetch related resources in the response.\nRelated resources are returned in the `included` array following the JSON:API pattern.","operationId":"get_machine_v1_machines__machine_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Machine Id"}},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated list of related resources to include. Allowed values: pools. Example: include=pools","title":"Include"},"description":"Comma-separated list of related resources to include. Allowed values: pools. Example: include=pools"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MachineResponseWithIncludes"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["machines"],"summary":"Update Machine","description":"Update a machine's information.\n\nOnly the fields provided in the request body will be updated.\nThe machine must belong to the authenticated organization.\n\nFor machine_sensitive_parameters: provide actual secret values and they will be\nstored in Basis Theory. Only aliases will be stored in the database.","operationId":"update_machine_v1_machines__machine_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Machine Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MachineUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MachineResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["machines"],"summary":"Delete Machine","description":"Delete a machine.\n\nAssociated runs are PRESERVED with machine_id set to NULL.\nThis ensures run history is never lost when a machine is deleted.\nConnections and request logs are cascade deleted.\n\nThe machine must belong to the authenticated organization.","operationId":"delete_machine_v1_machines__machine_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Machine Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/machines/{machine_id}/cyberdriver/web-session":{"post":{"tags":["machines"],"summary":"Create Cyberdriver Web Session","description":"Mint a short-lived browser session for Cyberdriver 1.x web streaming.","operationId":"create_cyberdriver_web_session_v1_machines__machine_id__cyberdriver_web_session_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Machine Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CyberdriverWebSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/machines/{machine_id}/pools":{"get":{"tags":["machines"],"summary":"Get Machine Pools","description":"Get all pools that a machine belongs to.","operationId":"get_machine_pools_v1_machines__machine_id__pools_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Machine Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PoolResponse"},"title":"Response Get Machine Pools V1 Machines  Machine Id  Pools Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["machines"],"summary":"Update Machine Pools","description":"Update a machine's pool assignments.\nThis replaces all existing pool assignments with the new ones.","operationId":"update_machine_pools_v1_machines__machine_id__pools_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Machine Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MachinePoolUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MachineResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/pools":{"post":{"tags":["pools"],"summary":"Create Pool","description":"Create a new pool for organizing machines.","operationId":"create_pool_v1_pools_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}]},"get":{"tags":["pools"],"summary":"List Pools","description":"List all pools for the organization.\n\nUse the `include` parameter to fetch related resources in the response.\nRelated resources are returned in the `included` array following the JSON:API pattern.","operationId":"list_pools_v1_pools_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated list of related resources to include. Allowed values: machines. Example: include=machines","title":"Include"},"description":"Comma-separated list of related resources to include. Allowed values: machines. Example: include=machines"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseWithIncludes_PoolResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/pools/{pool_id}":{"get":{"tags":["pools"],"summary":"Get Pool","description":"Get a specific pool by ID.\n\nUse the `include` parameter to fetch related resources in the response.\nRelated resources are returned in the `included` array following the JSON:API pattern.\n\nNote: The `include_machines` parameter is deprecated. Use `include=machines` instead.","operationId":"get_pool_v1_pools__pool_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pool Id"}},{"name":"include_machines","in":"query","required":false,"schema":{"type":"boolean","description":"[Deprecated] Use include=machines instead. Include full machine details","default":false,"title":"Include Machines"},"description":"[Deprecated] Use include=machines instead. Include full machine details"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated list of related resources to include. Allowed values: machines. Example: include=machines","title":"Include"},"description":"Comma-separated list of related resources to include. Allowed values: machines. Example: include=machines"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolResponseWithIncludes"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["pools"],"summary":"Update Pool","description":"Update a pool's details.","operationId":"update_pool_v1_pools__pool_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pool Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["pools"],"summary":"Delete Pool","description":"Delete a pool. This will not delete the machines in the pool.","operationId":"delete_pool_v1_pools__pool_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pool Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/pools/{pool_id}/machines":{"post":{"tags":["pools"],"summary":"Add Machines To Pool","description":"Add machines to a pool.","operationId":"add_machines_to_pool_v1_pools__pool_id__machines_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pool Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MachinePoolAssignment"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolWithMachines"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["pools"],"summary":"Remove Machines From Pool","description":"Remove machines from a pool.","operationId":"remove_machines_from_pool_v1_pools__pool_id__machines_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pool Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MachinePoolAssignment"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/workflows":{"get":{"tags":["workflows"],"summary":"List Workflows","description":"List all workflows for the authenticated organization.\n\nSupports pagination and returns workflows ordered by updated_at descending.\n\nUse `tag_ids` to filter workflows that have ALL specified tags (AND logic).\nUse `include=tags,post_run_checks` to include related workflow resources.\nLegacy `include_tags=true` remains supported, but `include` wins when both are provided.","operationId":"list_workflows_v1_workflows_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search workflows by id or name (case-insensitive substring match)","title":"Search"},"description":"Search workflows by id or name (case-insensitive substring match)"},{"name":"created_at_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter workflows created at or after this ISO timestamp (UTC)","title":"Created At From"},"description":"Filter workflows created at or after this ISO timestamp (UTC)"},{"name":"created_at_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter workflows created at or before this ISO timestamp (UTC)","title":"Created At To"},"description":"Filter workflows created at or before this ISO timestamp (UTC)"},{"name":"updated_at_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter workflows updated at or after this ISO timestamp (UTC)","title":"Updated At From"},"description":"Filter workflows updated at or after this ISO timestamp (UTC)"},{"name":"updated_at_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter workflows updated at or before this ISO timestamp (UTC)","title":"Updated At To"},"description":"Filter workflows updated at or before this ISO timestamp (UTC)"},{"name":"tag_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated list of tag UUIDs. Returns workflows with ALL specified tags (AND logic).","title":"Tag Ids"},"description":"Comma-separated list of tag UUIDs. Returns workflows with ALL specified tags (AND logic)."},{"name":"include_tags","in":"query","required":false,"schema":{"type":"boolean","description":"Include tags in the response","default":false,"title":"Include Tags"},"description":"Include tags in the response"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated list of related resources to include. Allowed values: tags, post_run_checks. If provided, overrides legacy include_tags.","title":"Include"},"description":"Comma-separated list of related resources to include. Allowed values: tags, post_run_checks. If provided, overrides legacy include_tags."},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseWithIncludes_WorkflowResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["workflows"],"summary":"Create Workflow","description":"Create a new workflow.\n\nThe workflow will be associated with the authenticated organization.","operationId":"create_workflow_v1_workflows_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}]}},"/v1/workflows/bulk/tags":{"post":{"tags":["workflows"],"summary":"Bulk add tags to multiple workflows","description":"Add tags to multiple workflows at once.\n\nFor each workflow, mutual exclusivity is enforced: if a tag belongs to a group\nand the workflow already has a tag from that group, the existing tag is replaced.","operationId":"bulk_add_tags_to_workflows_v1_workflows_bulk_tags_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkAddTagsRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}]}},"/v1/workflows/{workflow_id}":{"get":{"tags":["workflows"],"summary":"Get Workflow","description":"Get a specific workflow by ID.\n\nThe workflow must belong to the authenticated organization.","operationId":"get_workflow_v1_workflows__workflow_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated list of related resources to include. Allowed values: tags, post_run_checks. Defaults to tags and post_run_checks when omitted.","title":"Include"},"description":"Comma-separated list of related resources to include. Allowed values: tags, post_run_checks. Defaults to tags and post_run_checks when omitted."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowResponseWithIncludes"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["workflows"],"summary":"Update Workflow","description":"Update a workflow's prompts.\n\nThe current version will be saved to the version history.\nOnly the fields provided in the request body will be updated.\nThe workflow must belong to the authenticated organization.","operationId":"update_workflow_v1_workflows__workflow_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["workflows"],"summary":"Delete Workflow","description":"Delete a workflow.\n\nThis will also delete all associated runs and trajectories.\nThe workflow must belong to the authenticated organization.","operationId":"delete_workflow_v1_workflows__workflow_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/workflows/{workflow_id}/duplicate":{"post":{"tags":["workflows"],"summary":"Duplicate Workflow","description":"Duplicate a workflow, including prompt images and optional generated trajectories.\n\nCopies everything except version history, and prefixes the name with \"(Copy)\".","operationId":"duplicate_workflow_v1_workflows__workflow_id__duplicate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/WorkflowDuplicateRequest"},{"type":"null"}],"title":"Duplicate Data"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/workflows/{workflow_id}/merge":{"post":{"tags":["workflows"],"summary":"Merge Workflow","description":"Merge the current workflow into another workflow.\n\nUpdates the target workflow with all data from the source workflow (except version history),\noptionally copies trajectories, and deletes the source workflow.","operationId":"merge_workflow_v1_workflows__workflow_id__merge_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowMergeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/workflows/{workflow_id}/versions":{"get":{"tags":["workflows"],"summary":"Get Workflow Versions","description":"Get the version history of a workflow.\n\nReturns a list of previous versions with their prompts and timestamps.\nThe workflow must belong to the authenticated organization.","operationId":"get_workflow_versions_v1_workflows__workflow_id__versions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Workflow Versions V1 Workflows  Workflow Id  Versions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/workflows/prompt-image":{"post":{"tags":["workflows"],"summary":"Upload a workflow prompt image","description":"Upload an image to use in workflow prompts. \n\nThe returned `supabase_url` can be embedded directly in workflow prompt HTML:\n\n```html\n<img src=\"supabase://workflow-prompt-images/org_xxx/prompt-assets/my-image.png\" alt=\"Description\">\n```\n\nWhen the workflow runs, Cyberdesk automatically resolves these URLs to display the image\nto the AI agent.\n\nSupported formats: PNG, JPEG, GIF, WebP. Maximum size: 10MB.","operationId":"upload_workflow_prompt_image_v1_workflows_prompt_image_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_workflow_prompt_image_v1_workflows_prompt_image_post"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowPromptImageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}]},"delete":{"tags":["workflows"],"summary":"Delete a workflow prompt image","description":"Delete a workflow prompt image from storage.","operationId":"delete_workflow_prompt_image_v1_workflows_prompt_image_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"path","in":"query","required":true,"schema":{"type":"string","description":"The storage path of the image to delete","title":"Path"},"description":"The storage path of the image to delete"},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/workflows/prompt-images":{"get":{"tags":["workflows"],"summary":"List workflow prompt images","description":"List all prompt images uploaded for the organization.","operationId":"list_workflow_prompt_images_v1_workflows_prompt_images_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/WorkflowPromptImageListItem"},"type":"array","title":"Response List Workflow Prompt Images V1 Workflows Prompt Images Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/workflows/prompt-image/signed-url":{"get":{"tags":["workflows"],"summary":"Get signed URL for a prompt image","description":"Get a fresh signed URL for an existing workflow prompt image.","operationId":"get_workflow_prompt_image_signed_url_v1_workflows_prompt_image_signed_url_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"path","in":"query","required":true,"schema":{"type":"string","description":"The storage path of the image (e.g., org_xxx/prompt-assets/image.png)","title":"Path"},"description":"The storage path of the image (e.g., org_xxx/prompt-assets/image.png)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowPromptImageSignedUrlResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/workflows/{workflow_id}/tags":{"post":{"tags":["workflows"],"summary":"Add tags to a workflow","description":"Add one or more tags to a workflow.\n\nFor tags that belong to a group (mutual exclusivity), adding a new tag from that group\nwill automatically remove any existing tag from the same group.","operationId":"add_tags_to_workflow_v1_workflows__workflow_id__tags_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddTagsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowTagResponse"},"title":"Response Add Tags To Workflow V1 Workflows  Workflow Id  Tags Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["workflows"],"summary":"Get tags for a workflow","description":"Get all tags assigned to a workflow.","operationId":"get_workflow_tags_v1_workflows__workflow_id__tags_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowTagResponse"},"title":"Response Get Workflow Tags V1 Workflows  Workflow Id  Tags Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/workflows/{workflow_id}/tags/{tag_id}":{"delete":{"tags":["workflows"],"summary":"Remove a tag from a workflow","description":"Remove a tag from a workflow.","operationId":"remove_tag_from_workflow_v1_workflows__workflow_id__tags__tag_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}},{"name":"tag_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tag Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/workflow-tags":{"get":{"tags":["workflow-tags"],"summary":"List Tags","description":"List all workflow tags for the organization.\n\nTags are returned ordered by their group (ungrouped first), then by order within group.\nEach tag includes its workflow_count indicating how many workflows use it.","operationId":"list_tags_v1_workflow_tags_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","description":"Include archived tags in the response","default":false,"title":"Include Archived"},"description":"Include archived tags in the response"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowTagResponse"},"title":"Response List Tags V1 Workflow Tags Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["workflow-tags"],"summary":"Create Tag","description":"Create a new workflow tag.\n\nTags can optionally belong to a group for mutual exclusivity.","operationId":"create_tag_v1_workflow_tags_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowTagCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowTagResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}]}},"/v1/workflow-tags/{tag_id}":{"get":{"tags":["workflow-tags"],"summary":"Get Tag","description":"Get a specific workflow tag by ID.","operationId":"get_tag_v1_workflow_tags__tag_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tag_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tag Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowTagResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["workflow-tags"],"summary":"Update Tag","description":"Update a workflow tag.","operationId":"update_tag_v1_workflow_tags__tag_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tag_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tag Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowTagUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowTagResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["workflow-tags"],"summary":"Delete Tag","description":"Delete a workflow tag.\n\nThis is a hard delete - the tag is permanently removed and will be unassigned\nfrom all workflows. Consider using archive instead if you want to preserve\nexisting assignments.","operationId":"delete_tag_v1_workflow_tags__tag_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tag_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tag Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/workflow-tags/{tag_id}/archive":{"post":{"tags":["workflow-tags"],"summary":"Archive Tag","description":"Archive a workflow tag.\n\nArchived tags cannot be assigned to new workflows but remain on existing workflows.\nArchived tags are hidden from the tag list by default.","operationId":"archive_tag_v1_workflow_tags__tag_id__archive_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tag_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tag Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowTagResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/workflow-tags/{tag_id}/unarchive":{"post":{"tags":["workflow-tags"],"summary":"Unarchive Tag","description":"Unarchive a workflow tag.\n\nRestores an archived tag so it can be assigned to workflows again.","operationId":"unarchive_tag_v1_workflow_tags__tag_id__unarchive_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tag_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tag Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowTagResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/workflow-tags/reorder":{"put":{"tags":["workflow-tags"],"summary":"Reorder Tags","description":"Reorder workflow tags.\n\nProvide a list of tag IDs in the desired order. The order field of each\ntag will be updated to match its position in the list.\n\nNote: Tags should be reordered within their respective groups.","operationId":"reorder_tags_v1_workflow_tags_reorder_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReorderRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}]}},"/v1/workflow-tag-groups":{"get":{"tags":["workflow-tag-groups"],"summary":"List Tag Groups","description":"List all workflow tag groups for the organization.\n\nGroups are returned ordered by their `order` field for consistent display.\nTags within a group are mutually exclusive - only one can be assigned to a workflow.","operationId":"list_tag_groups_v1_workflow_tag_groups_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/WorkflowTagGroupResponse"},"type":"array","title":"Response List Tag Groups V1 Workflow Tag Groups Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["workflow-tag-groups"],"summary":"Create Tag Group","description":"Create a new workflow tag group.\n\nTag groups enable mutual exclusivity - when a workflow has a tag from a group,\nadding another tag from the same group will automatically remove the first one.","operationId":"create_tag_group_v1_workflow_tag_groups_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowTagGroupCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowTagGroupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}]}},"/v1/workflow-tag-groups/{group_id}":{"get":{"tags":["workflow-tag-groups"],"summary":"Get Tag Group","description":"Get a specific workflow tag group by ID.","operationId":"get_tag_group_v1_workflow_tag_groups__group_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowTagGroupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["workflow-tag-groups"],"summary":"Update Tag Group","description":"Update a workflow tag group.","operationId":"update_tag_group_v1_workflow_tag_groups__group_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowTagGroupUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowTagGroupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["workflow-tag-groups"],"summary":"Delete Tag Group","description":"Delete a workflow tag group.\n\nTags that belong to this group will become ungrouped (group_id set to null).\nThe tags themselves are not deleted.","operationId":"delete_tag_group_v1_workflow_tag_groups__group_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Group Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/workflow-tag-groups/reorder":{"put":{"tags":["workflow-tag-groups"],"summary":"Reorder Tag Groups","description":"Reorder workflow tag groups.\n\nProvide a list of group IDs in the desired order. The order field of each\ngroup will be updated to match its position in the list.","operationId":"reorder_tag_groups_v1_workflow_tag_groups_reorder_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReorderRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}]}},"/v1/model-configurations":{"get":{"tags":["model-configurations"],"summary":"List Model Configurations","operationId":"list_model_configurations_v1_model_configurations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ModelConfigurationResponse"},"type":"array","title":"Response List Model Configurations V1 Model Configurations Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["model-configurations"],"summary":"Create Model Configuration","operationId":"create_model_configuration_v1_model_configurations_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelConfigurationCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelConfigurationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}]}},"/v1/model-configurations/{model_configuration_id}":{"get":{"tags":["model-configurations"],"summary":"Get Model Configuration","operationId":"get_model_configuration_v1_model_configurations__model_configuration_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_configuration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Model Configuration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelConfigurationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["model-configurations"],"summary":"Update Model Configuration","operationId":"update_model_configuration_v1_model_configurations__model_configuration_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_configuration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Model Configuration Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelConfigurationUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelConfigurationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["model-configurations"],"summary":"Delete Model Configuration","operationId":"delete_model_configuration_v1_model_configurations__model_configuration_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"model_configuration_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Model Configuration Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/runs":{"get":{"tags":["runs"],"summary":"List Runs","description":"List all runs for the authenticated organization.\n\nSupports pagination and filtering by workflow, machine, and status.\nReturns runs with their associated workflow and machine data.\n\nUse the `include` parameter to fetch related resources in the response.\nRelated resources are returned in the `included` array following the JSON:API pattern.\nResources are deduplicated across all items in the list.","operationId":"list_runs_v1_runs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by workflow ID","title":"Workflow Id"},"description":"Filter by workflow ID"},{"name":"machine_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by machine ID","title":"Machine Id"},"description":"Filter by machine ID"},{"name":"session_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by session ID","title":"Session Id"},"description":"Filter by session ID"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/RunStatus"},{"type":"null"}],"description":"Filter by run status","title":"Status"},"description":"Filter by run status"},{"name":"created_at_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter runs created at or after this ISO timestamp (UTC)","title":"Created At From"},"description":"Filter runs created at or after this ISO timestamp (UTC)"},{"name":"created_at_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter runs created at or before this ISO timestamp (UTC)","title":"Created At To"},"description":"Filter runs created at or before this ISO timestamp (UTC)"},{"name":"sort_mode","in":"query","required":false,"schema":{"$ref":"#/components/schemas/RunListSortMode","description":"Run sort mode. 'activity' prioritizes running/scheduling and recent completions. 'created_at_desc' returns strict reverse-chronological order.","default":"activity"},"description":"Run sort mode. 'activity' prioritizes running/scheduling and recent completions. 'created_at_desc' returns strict reverse-chronological order."},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search runs by id, input_values, output_data, error, session_alias (case-insensitive substring match)","title":"Search"},"description":"Search runs by id, input_values, output_data, error, session_alias (case-insensitive substring match)"},{"name":"deep_search","in":"query","required":false,"schema":{"type":"boolean","description":"If true, also search run_message_history (slower but more comprehensive)","default":false,"title":"Deep Search"},"description":"If true, also search run_message_history (slower but more comprehensive)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"$ref":"#/components/schemas/RunField"}},{"type":"null"}],"description":"Optional list of fields to include per run. Always includes: id, workflow_id, machine_id, status, created_at. Provide multiple 'fields=' params to include more.","title":"Fields"},"description":"Optional list of fields to include per run. Always includes: id, workflow_id, machine_id, status, created_at. Provide multiple 'fields=' params to include more."},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated list of related resources to include. Allowed values: workflow, machine, machine.pools. Example: include=workflow,machine","title":"Include"},"description":"Comma-separated list of related resources to include. Allowed values: workflow, machine, machine.pools. Example: include=workflow,machine"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseWithIncludes_RunResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["runs"],"summary":"Create Run","description":"Create a new run.\n\nThe workflow must exist and belong to the authenticated organization.\nIf machine_id is not provided, an available machine will be automatically selected.\nThe run will be created with SCHEDULING status and a Temporal workflow will be started asynchronously.","operationId":"create_run_v1_runs_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}]}},"/v1/runs/{run_id}":{"get":{"tags":["runs"],"summary":"Get Run","description":"Get a specific run by ID.\n\nThe run must belong to the authenticated organization.\nReturns the run with its associated workflow and machine data.\n\nUse the `include` parameter to fetch related resources in the response.\nRelated resources are returned in the `included` array following the JSON:API pattern.","operationId":"get_run_v1_runs__run_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated list of related resources to include. Allowed values: workflow, machine, machine.pools. Example: include=workflow,machine","title":"Include"},"description":"Comma-separated list of related resources to include. Allowed values: workflow, machine, machine.pools. Example: include=workflow,machine"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunResponseWithIncludes"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["runs"],"summary":"Update Run","description":"Update a run's data.\n\nOnly the fields provided in the request body will be updated.\nThe run must belong to the authenticated organization.","operationId":"update_run_v1_runs__run_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["runs"],"summary":"Delete Run","description":"Delete a run.\n\nThis will also delete all associated attachments and their files.\nThe run must belong to the authenticated organization.","operationId":"delete_run_v1_runs__run_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/runs/{run_id}/image/signed-url":{"get":{"tags":["runs"],"summary":"Get Run Image Signed Url","description":"Get a temporary signed URL for a screenshot stored in a run's message history.\n\nThe requested image URL must be an exact `supabase://run-images/...` reference\npresent in the authenticated organization's run.","operationId":"get_run_image_signed_url_v1_runs__run_id__image_signed_url_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}},{"name":"image_url","in":"query","required":true,"schema":{"type":"string","description":"Exact supabase://run-images/... URL from the run_message_history image block to sign.","title":"Image Url"},"description":"Exact supabase://run-images/... URL from the run_message_history image block to sign."},{"name":"expires_in","in":"query","required":false,"schema":{"type":"integer","maximum":3600,"minimum":10,"description":"URL expiration time in seconds (10-3600).","default":3600,"title":"Expires In"},"description":"URL expiration time in seconds (10-3600)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunImageSignedUrlResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/runs/{run_id}/trajectory":{"get":{"tags":["runs"],"summary":"Get Run Trajectory","description":"Get the latest trajectory associated with a run.\n\nReturns generated and non-generated trajectories so run details can expose\ngeneration state.\n\nSelection is based on newest `updated_at` for the run. If a duplicated\ntrajectory linked to the run is now the latest row, this endpoint will\nreturn that duplicate.","operationId":"get_run_trajectory_v1_runs__run_id__trajectory_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrajectoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/runs/{run_id}/generate-trajectory":{"post":{"tags":["runs"],"summary":"Generate Run Trajectory","description":"Mark the latest trajectory for a run as generated.\n\nThis promotes whichever trajectory is currently latest by `updated_at`.\nIf a duplicated trajectory tied to this run is the latest row, this\nendpoint may return/promote that duplicate.","operationId":"generate_run_trajectory_v1_runs__run_id__generate_trajectory_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrajectoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/runs/chain":{"post":{"tags":["runs"],"summary":"Create Run Chain","description":"Create a multi-step chain that runs on a single reserved session/machine.\n\n- Starts a new session unless session_id is provided (then runs on existing session).\n- Accepts shared_inputs/sensitive/file_inputs and per-step file_inputs.\n- machine_id > pool_id when starting a new session; both ignored if session_id provided.\n- Client contract: once runs are persisted, failures in downstream Temporal dispatch\n  do not change the HTTP success envelope; response still contains run_ids and those\n  runs are transitioned to ERROR with failure metadata for deterministic polling.","operationId":"create_run_chain_v1_runs_chain_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowChainCreate"}}},"required":true},"responses":{"201":{"description":"Returns persisted run_ids for the created chain session. If Temporal dispatch fails after run persistence, this endpoint still returns 201 with run_ids; those runs are marked ERROR and include failure details in subsequent run reads.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowChainResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}]}},"/v1/runs/bulk":{"post":{"tags":["runs"],"summary":"Bulk Create Runs","description":"Create multiple runs with the same configuration.\n\nThis endpoint creates multiple runs efficiently:\n- All runs are created in a single database transaction\n- Temporal workflows are started asynchronously\n- Returns immediately with created run details\n\nMaximum 1000 runs can be created in a single request.","operationId":"bulk_create_runs_v1_runs_bulk_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunBulkCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunBulkCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}]}},"/v1/runs/{run_id}/retry":{"post":{"tags":["runs"],"summary":"Retry Run","description":"Retry an existing run in-place (same run_id).\n\n- Rejects if run is active (scheduling or running).\n- Always clears previous outputs/history/output attachments.\n- Replaces input attachments if `file_inputs` are provided.\n- Optionally overrides inputs, sensitive inputs, session/machine/pools.\n- Triggers immediate assignment attempt unless the session is busy.","operationId":"retry_run_v1_runs__run_id__retry_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Run Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunRetry"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/run-attachments":{"get":{"tags":["run-attachments"],"summary":"List Run Attachments","description":"List all run attachments for the authenticated organization.\n\nSupports pagination and filtering by run ID and attachment type.","operationId":"list_run_attachments_v1_run_attachments_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by run ID","title":"Run Id"},"description":"Filter by run ID"},{"name":"attachment_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/AttachmentType"},{"type":"null"}],"description":"Filter by attachment type","title":"Attachment Type"},"description":"Filter by attachment type"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_RunAttachmentResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["run-attachments"],"summary":"Create Run Attachment","description":"Create a new run attachment.\n\nThis endpoint is primarily for internal use. File uploads typically happen\nthrough the run creation endpoint.","operationId":"create_run_attachment_v1_run_attachments_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunAttachmentCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunAttachmentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}]}},"/v1/run-attachments/{attachment_id}":{"get":{"tags":["run-attachments"],"summary":"Get Run Attachment","description":"Get a specific run attachment by ID.\n\nReturns attachment metadata only. Use the download endpoint to get file content.","operationId":"get_run_attachment_v1_run_attachments__attachment_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"attachment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Attachment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunAttachmentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["run-attachments"],"summary":"Update Run Attachment","description":"Update a run attachment.\n\nCurrently only supports updating the expiration date.","operationId":"update_run_attachment_v1_run_attachments__attachment_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"attachment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Attachment Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunAttachmentUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunAttachmentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["run-attachments"],"summary":"Delete Run Attachment","description":"Delete a run attachment.\n\nThis will remove both the database record and the file from Supabase storage.","operationId":"delete_run_attachment_v1_run_attachments__attachment_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"attachment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Attachment Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/run-attachments/{attachment_id}/download-url":{"get":{"tags":["run-attachments"],"summary":"Get Run Attachment Download Url","description":"Get a signed download URL for a run attachment file.\n\nReturns a signed URL that triggers automatic download when accessed.\n\nArgs:\n    attachment_id: The ID of the attachment to download\n    expires_in: URL expiration time in seconds (10-3600). Default: 300 (5 minutes)","operationId":"get_run_attachment_download_url_v1_run_attachments__attachment_id__download_url_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"attachment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Attachment Id"}},{"name":"expires_in","in":"query","required":false,"schema":{"type":"integer","maximum":3600,"minimum":10,"description":"URL expiration time in seconds (10-3600)","default":300,"title":"Expires In"},"description":"URL expiration time in seconds (10-3600)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunAttachmentDownloadUrlResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/run-attachments/{attachment_id}/download":{"get":{"tags":["run-attachments"],"summary":"Download Run Attachment","description":"Download a run attachment file.\n\nReturns the raw file content as a streaming response.","operationId":"download_run_attachment_v1_run_attachments__attachment_id__download_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"attachment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Attachment Id"}}],"responses":{"200":{"description":"File download","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/connections":{"get":{"tags":["connections"],"summary":"List Connections","description":"List all connections for the authenticated organization's machines.\n\nSupports pagination and filtering by machine and status.\nReturns connections with their associated machine data.","operationId":"list_connections_v1_connections_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by machine ID","title":"Machine Id"},"description":"Filter by machine ID"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/ConnectionStatus"},{"type":"null"}],"description":"Filter by connection status","title":"Status"},"description":"Filter by connection status"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse_ConnectionResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["connections"],"summary":"Create Connection","description":"Create a new connection (typically done by the WebSocket handler).\n\nThe machine must exist and belong to the authenticated organization.","operationId":"create_connection_v1_connections_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}]}},"/v1/connections/{connection_id}":{"get":{"tags":["connections"],"summary":"Get Connection","description":"Get a specific connection by ID.\n\nThe connection must belong to a machine owned by the authenticated organization.","operationId":"get_connection_v1_connections__connection_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["connections"],"summary":"Update Connection","description":"Update a connection's status or timestamps.\n\nOnly the fields provided in the request body will be updated.\nThe connection must belong to a machine owned by the authenticated organization.","operationId":"update_connection_v1_connections__connection_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connection Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["connections"],"summary":"Delete Connection","description":"Delete a connection (not typically used - connections are managed automatically).\n\nThe connection must belong to a machine owned by the authenticated organization.","operationId":"delete_connection_v1_connections__connection_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Connection Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/request-logs":{"get":{"tags":["request-logs"],"summary":"List Request Logs","description":"List all request logs for the authenticated organization's machines.\n\nSupports pagination and filtering by machine, HTTP method, and status code.","operationId":"list_request_logs_v1_request_logs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by machine ID","title":"Machine Id"},"description":"Filter by machine ID"},{"name":"method","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by HTTP method","title":"Method"},"description":"Filter by HTTP method"},{"name":"status_code","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":599,"minimum":100},{"type":"null"}],"description":"Filter by status code","title":"Status Code"},"description":"Filter by status code"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["request-logs"],"summary":"Create Request Log","description":"Create a new request log.\n\nThe machine must exist and belong to the authenticated organization.\nThis is typically called when a request is initiated.","operationId":"create_request_log_v1_request_logs_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestLogCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestLogResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}]}},"/v1/request-logs/{log_id}":{"get":{"tags":["request-logs"],"summary":"Get Request Log","description":"Get a specific request log by ID.\n\nThe log must belong to a machine owned by the authenticated organization.","operationId":"get_request_log_v1_request_logs__log_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Log Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestLogResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["request-logs"],"summary":"Update Request Log","description":"Update a request log with response data.\n\nThis is typically called when a request completes to add the response details.\nOnly the fields provided in the request body will be updated.\nThe log must belong to a machine owned by the authenticated organization.","operationId":"update_request_log_v1_request_logs__log_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Log Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestLogUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestLogResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["request-logs"],"summary":"Delete Request Log","description":"Delete a request log (not typically used - logs are kept for analytics).\n\nThe log must belong to a machine owned by the authenticated organization.","operationId":"delete_request_log_v1_request_logs__log_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"log_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Log Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/trajectories":{"get":{"tags":["trajectories"],"summary":"List Trajectories","description":"List all trajectories for the authenticated organization.\n\nSupports pagination and filtering by workflow, run, approval, and generated status.\nOnly approved trajectories are used during workflow execution.\nReturns trajectories with their associated workflow data.\n\nUse the `include` parameter to fetch related resources in the response.\nRelated resources are returned in the `included` array following the JSON:API pattern.","operationId":"list_trajectories_v1_trajectories_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search trajectories by id, name, or description (case-insensitive substring match)","title":"Search"},"description":"Search trajectories by id, name, or description (case-insensitive substring match)"},{"name":"workflow_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by workflow ID","title":"Workflow Id"},"description":"Filter by workflow ID"},{"name":"run_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by run ID","title":"Run Id"},"description":"Filter by run ID"},{"name":"is_approved","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by approval status (true=approved, false=not approved)","title":"Is Approved"},"description":"Filter by approval status (true=approved, false=not approved)"},{"name":"is_generated","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by generated status (true=generated, false=pending generation). Defaults to true.","default":true,"title":"Is Generated"},"description":"Filter by generated status (true=generated, false=pending generation). Defaults to true."},{"name":"created_at_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter trajectories created at or after this ISO timestamp (UTC)","title":"Created At From"},"description":"Filter trajectories created at or after this ISO timestamp (UTC)"},{"name":"created_at_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter trajectories created at or before this ISO timestamp (UTC)","title":"Created At To"},"description":"Filter trajectories created at or before this ISO timestamp (UTC)"},{"name":"updated_at_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter trajectories updated at or after this ISO timestamp (UTC)","title":"Updated At From"},"description":"Filter trajectories updated at or after this ISO timestamp (UTC)"},{"name":"updated_at_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter trajectories updated at or before this ISO timestamp (UTC)","title":"Updated At To"},"description":"Filter trajectories updated at or before this ISO timestamp (UTC)"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated list of related resources to include. Allowed values: workflow. Example: include=workflow","title":"Include"},"description":"Comma-separated list of related resources to include. Allowed values: workflow. Example: include=workflow"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedResponseWithIncludes_TrajectoryResponse_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["trajectories"],"summary":"Create Trajectory","description":"Create a new trajectory for a workflow.\n\nThe workflow must exist and belong to the authenticated organization.\nThe trajectory_data must contain at least one item.","operationId":"create_trajectory_v1_trajectories_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrajectoryCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrajectoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}]}},"/v1/trajectories/{trajectory_id}":{"get":{"tags":["trajectories"],"summary":"Get Trajectory","description":"Get a specific trajectory by ID.\n\nThe trajectory must belong to the authenticated organization.\n\nUse the `include` parameter to fetch related resources in the response.\nRelated resources are returned in the `included` array following the JSON:API pattern.\n\nExample: `?include=workflow` to include the associated workflow data.","operationId":"get_trajectory_v1_trajectories__trajectory_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"trajectory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Trajectory Id"}},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated list of related resources to include. Allowed values: workflow. Example: include=workflow","title":"Include"},"description":"Comma-separated list of related resources to include. Allowed values: workflow. Example: include=workflow"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrajectoryResponseWithIncludes"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["trajectories"],"summary":"Update Trajectory","description":"Update a trajectory's data.\n\nOnly the fields provided in the request body will be updated.\nThe trajectory must belong to the authenticated organization.","operationId":"update_trajectory_v1_trajectories__trajectory_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"trajectory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Trajectory Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrajectoryUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrajectoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["trajectories"],"summary":"Delete Trajectory","description":"Delete a trajectory.\n\nThe trajectory must belong to the authenticated organization.","operationId":"delete_trajectory_v1_trajectories__trajectory_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"trajectory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Trajectory Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/trajectories/{trajectory_id}/duplicate":{"post":{"tags":["trajectories"],"summary":"Duplicate Trajectory","description":"Duplicate a trajectory with fresh copies of all images.\n\nCreates a new trajectory with the same data as the source, but with\nall images copied to new paths in storage (copy-on-write semantics).\nThe new trajectory starts unapproved and gets a name like \"Original Name (Copy)\".","operationId":"duplicate_trajectory_v1_trajectories__trajectory_id__duplicate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"trajectory_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Trajectory Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrajectoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/workflows/{workflow_id}/latest-trajectory":{"get":{"tags":["trajectories"],"summary":"Get Latest Trajectory For Workflow","description":"Get the latest trajectory for a specific workflow.\n\nReturns the most recently updated trajectory for the workflow.\nThe workflow must belong to the authenticated organization.","operationId":"get_latest_trajectory_for_workflow_v1_workflows__workflow_id__latest_trajectory_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Workflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrajectoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/computer/{machine_id}/display/screenshot":{"get":{"tags":["computer"],"summary":"Take a screenshot","description":"Take a screenshot of the machine's display.","operationId":"get_screenshot_v1_computer__machine_id__display_screenshot_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","title":"Machine Id"}}],"responses":{"200":{"description":"PNG image of the screenshot","content":{"image/png":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/computer/{machine_id}/display/dimensions":{"get":{"tags":["computer"],"summary":"Get display dimensions","description":"Get the display dimensions of the machine.","operationId":"get_display_dimensions_v1_computer__machine_id__display_dimensions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","title":"Machine Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisplayDimensions"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/computer/{machine_id}/input/keyboard/type":{"post":{"tags":["computer"],"summary":"Type text","description":"Type text on the machine's keyboard.","operationId":"keyboard_type_v1_computer__machine_id__input_keyboard_type_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","title":"Machine Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyboardTypeRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/computer/{machine_id}/input/keyboard/key":{"post":{"tags":["computer"],"summary":"Send key combination","description":"Send a key combination in XDO-style syntax (e.g., 'ctrl+a', 'alt+tab').\n\nJoin keys with `+` to press them together as one chord (e.g. `ctrl+a`); a chord may\ncombine multiple modifiers (`ctrl`/`alt`/`shift`/`win`) but only one non-modifier key.\nSeparate keys with spaces to press them one after another (e.g. `down down down`). Using\n`+` between repeated or multiple non-modifier keys (e.g. `down+down+down`) is invalid — use\nspaces instead (`down down down`).\n\nWhen `down` is omitted, the key is pressed and released normally. Pass `down=true` to\npress and hold the key (without releasing), and `down=false` to release a key that was\npreviously held.","operationId":"keyboard_key_v1_computer__machine_id__input_keyboard_key_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","title":"Machine Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyboardKeyRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/computer/{machine_id}/copy_to_clipboard":{"post":{"tags":["computer"],"summary":"Copy to clipboard via Ctrl+C","description":"Execute Ctrl+C and return clipboard contents with the specified key name.","operationId":"copy_to_clipboard_v1_computer__machine_id__copy_to_clipboard_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","title":"Machine Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CopyToClipboardRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Copy To Clipboard V1 Computer  Machine Id  Copy To Clipboard Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/computer/{machine_id}/input/mouse/position":{"get":{"tags":["computer"],"summary":"Get mouse position","description":"Get the current mouse cursor position.","operationId":"get_mouse_position_v1_computer__machine_id__input_mouse_position_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","title":"Machine Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MousePosition"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/computer/{machine_id}/input/mouse/move":{"post":{"tags":["computer"],"summary":"Move mouse cursor","description":"Move the mouse cursor to specified coordinates.","operationId":"mouse_move_v1_computer__machine_id__input_mouse_move_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","title":"Machine Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MouseMoveRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/computer/{machine_id}/input/mouse/click":{"post":{"tags":["computer"],"summary":"Click mouse button","description":"Click the mouse button at specified coordinates.\nIf coordinates are not provided, clicks at current position.","operationId":"mouse_click_v1_computer__machine_id__input_mouse_click_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","title":"Machine Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MouseClickRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/computer/{machine_id}/input/mouse/scroll":{"post":{"tags":["computer"],"summary":"Scroll mouse wheel","description":"Scroll the mouse wheel in the specified direction by a number of steps.\nOptionally moves to (x, y) before scrolling.","operationId":"mouse_scroll_v1_computer__machine_id__input_mouse_scroll_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","title":"Machine Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MouseScrollRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/computer/{machine_id}/input/mouse/drag":{"post":{"tags":["computer"],"summary":"Drag mouse (native)","description":"Perform a drag operation using absolute coordinates with required start and optional duration.","operationId":"mouse_drag_v1_computer__machine_id__input_mouse_drag_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","title":"Machine Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MouseDragRequest"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/computer/{machine_id}/fs/list":{"get":{"tags":["computer"],"summary":"List directory contents","description":"List directory contents on the machine.","operationId":"fs_list_v1_computer__machine_id__fs_list_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","title":"Machine Id"}},{"name":"path","in":"query","required":false,"schema":{"type":"string","default":".","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Fs List V1 Computer  Machine Id  Fs List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/computer/{machine_id}/fs/read":{"get":{"tags":["computer"],"summary":"Read file contents","description":"Read file contents from the machine (base64 encoded).","operationId":"fs_read_v1_computer__machine_id__fs_read_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","title":"Machine Id"}},{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Fs Read V1 Computer  Machine Id  Fs Read Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/computer/{machine_id}/fs/write":{"post":{"tags":["computer"],"summary":"Write file contents","description":"Write file contents to the machine.","operationId":"fs_write_v1_computer__machine_id__fs_write_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","title":"Machine Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileWriteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Fs Write V1 Computer  Machine Id  Fs Write Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/computer/{machine_id}/shell/powershell/simple":{"post":{"tags":["computer"],"summary":"Run PowerShell simple smoke command","description":"Run Cyberdriver's built-in simple PowerShell smoke command.","operationId":"powershell_simple_v1_computer__machine_id__shell_powershell_simple_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","title":"Machine Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Powershell Simple V1 Computer  Machine Id  Shell Powershell Simple Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/computer/{machine_id}/shell/powershell/test":{"post":{"tags":["computer"],"summary":"Run PowerShell test smoke command","description":"Run Cyberdriver's built-in PowerShell test command.","operationId":"powershell_test_v1_computer__machine_id__shell_powershell_test_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","title":"Machine Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Powershell Test V1 Computer  Machine Id  Shell Powershell Test Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/computer/{machine_id}/shell/powershell/exec":{"post":{"tags":["computer"],"summary":"Execute PowerShell command","description":"Execute PowerShell command on the machine.","operationId":"powershell_exec_v1_computer__machine_id__shell_powershell_exec_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","title":"Machine Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PowerShellExecRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Powershell Exec V1 Computer  Machine Id  Shell Powershell Exec Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/computer/{machine_id}/shell/powershell/session":{"post":{"tags":["computer"],"summary":"Manage PowerShell session","description":"Create or destroy PowerShell sessions on the machine.","operationId":"powershell_session_v1_computer__machine_id__shell_powershell_session_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","title":"Machine Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PowerShellSessionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Powershell Session V1 Computer  Machine Id  Shell Powershell Session Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/computer/{machine_id}/internal/diagnostics":{"get":{"tags":["computer"],"summary":"Get Cyberdriver diagnostics","description":"Fetch diagnostic details from the Cyberdriver tunnel agent.","operationId":"cyberdriver_diagnostics_v1_computer__machine_id__internal_diagnostics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","title":"Machine Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Cyberdriver Diagnostics V1 Computer  Machine Id  Internal Diagnostics Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/computer/{machine_id}/internal/keepalive/remote/activity":{"post":{"tags":["computer"],"summary":"Record remote keepalive activity","operationId":"cyberdriver_keepalive_activity_v1_computer__machine_id__internal_keepalive_remote_activity_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","title":"Machine Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/computer/{machine_id}/internal/keepalive/remote/enable":{"post":{"tags":["computer"],"summary":"Enable remote keepalive","operationId":"cyberdriver_keepalive_enable_v1_computer__machine_id__internal_keepalive_remote_enable_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","title":"Machine Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/computer/{machine_id}/internal/keepalive/remote/disable":{"post":{"tags":["computer"],"summary":"Disable remote keepalive","operationId":"cyberdriver_keepalive_disable_v1_computer__machine_id__internal_keepalive_remote_disable_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","title":"Machine Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/computer/{machine_id}/internal/update":{"post":{"tags":["computer"],"summary":"Self-update Cyberdriver","description":"Trigger a Cyberdriver update through the tunnel.","operationId":"cyberdriver_update_v1_computer__machine_id__internal_update_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","title":"Machine Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CyberdriverUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Cyberdriver Update V1 Computer  Machine Id  Internal Update Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/machines/{machine_id}/cyberdriver/shutdown":{"post":{"tags":["computer"],"summary":"Shutdown Cyberdriver via tunnel","description":"Request CyberDriver process shutdown through the existing tunnel proxy path.","operationId":"cyberdriver_shutdown_v1_machines__machine_id__cyberdriver_shutdown_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"machine_id","in":"path","required":true,"schema":{"type":"string","title":"Machine Id"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Unique key for idempotent requests. If provided, the server ensures the request is processed at most once. Retries with the same key return the original response. SDKs auto-generate this for write requests.","schema":{"type":"string","example":"550e8400-e29b-41d4-a716-446655440000"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/CyberdriverShutdownRequest"},{"type":"null"}],"title":"Request"}}}},"responses":{"200":{"description":"Shutdown was accepted by CyberDriver","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Cyberdriver Shutdown V1 Machines  Machine Id  Cyberdriver Shutdown Post"},"examples":{"shutting_down":{"summary":"Fresh shutdown","value":{"status":"shutting_down","pid":12345,"reason":"user_disabled_machine","source":"cloud-api"}},"already_shutting_down":{"summary":"Idempotent repeat","value":{"status":"already_shutting_down","pid":12345,"reason":"user_disabled_machine","source":"cloud-api"}}}}}},"403":{"description":"Tunnel-only endpoint rejected outside tunnel path"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/usage/aggregate":{"get":{"tags":["usage"],"summary":"Get Usage Aggregate","description":"Aggregate usage (agentic and cached steps) for a given date range.\n\nTwo modes are supported:\n- **simulated** (default): Uses total_agentic_steps and total_cached_steps from usage_metadata,\n  but excludes runs where billing_outcome is 'infra_failure' (these would have been free).\n  Use this for customers not yet on Stripe billing.\n- **billed**: Uses total_agentic_steps_billed and total_cached_steps_billed.\n  Use this for customers on active Stripe billing.","operationId":"get_usage_aggregate_v1_usage_aggregate_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"from_date","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Start of period (inclusive, ISO format)","title":"From Date"},"description":"Start of period (inclusive, ISO format)"},{"name":"to_date","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"End of period (exclusive, ISO format)","title":"To Date"},"description":"End of period (exclusive, ISO format)"},{"name":"mode","in":"query","required":false,"schema":{"$ref":"#/components/schemas/UsageMode","description":"Usage counting mode: 'simulated' or 'billed'","default":"simulated"},"description":"Usage counting mode: 'simulated' or 'billed'"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageAggregateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/login-options":{"get":{"tags":["cyberdriver-auth"],"summary":"Login Options","operationId":"login_options_api_login_options_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Response Login Options Api Login Options Get"}}}}}}},"/api/oidc/auth":{"post":{"tags":["cyberdriver-auth"],"summary":"Oidc Auth","operationId":"oidc_auth_api_oidc_auth_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OidcAuthRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OidcAuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/oidc/callback":{"get":{"tags":["cyberdriver-auth"],"summary":"Oidc Callback","operationId":"oidc_callback_api_oidc_callback_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"}},{"name":"state","in":"query","required":true,"schema":{"type":"string","title":"State"}},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},{"name":"error_description","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Description"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/oidc/confirm":{"post":{"tags":["cyberdriver-auth"],"summary":"Oidc Confirm","operationId":"oidc_confirm_api_oidc_confirm_post","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/oidc/auth-query":{"get":{"tags":["cyberdriver-auth"],"summary":"Oidc Auth Query","operationId":"oidc_auth_query_api_oidc_auth_query_get","parameters":[{"name":"code","in":"query","required":true,"schema":{"type":"string","title":"Code"}},{"name":"id","in":"query","required":true,"schema":{"type":"string","title":"Id"}},{"name":"uuid","in":"query","required":true,"schema":{"type":"string","title":"Uuid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Oidc Auth Query Api Oidc Auth Query Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/currentUser":{"post":{"tags":["cyberdriver-auth"],"summary":"Current User","operationId":"current_user_api_currentUser_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Current User Api Currentuser Post"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/cyberdriver/authorize-connection":{"post":{"tags":["cyberdriver-auth"],"summary":"Authorize Cyberdriver Connection","operationId":"authorize_cyberdriver_connection_api_cyberdriver_authorize_connection_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CyberdriverConnectionAuthorizationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Authorize Cyberdriver Connection Api Cyberdriver Authorize Connection Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/cyberdriver/connection-token":{"post":{"tags":["cyberdriver-auth"],"summary":"Mint Cyberdriver Connection Token","operationId":"mint_cyberdriver_connection_token_api_cyberdriver_connection_token_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CyberdriverConnectionTokenRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CyberdriverConnectionTokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/heartbeat":{"get":{"tags":["cyberdriver-auth"],"summary":"Heartbeat","operationId":"heartbeat_api_heartbeat_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Heartbeat Api Heartbeat Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/peers":{"get":{"tags":["cyberdriver-auth"],"summary":"Peers","operationId":"peers_api_peers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"current","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Current"}},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Pagesize"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Peers Api Peers Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/users":{"get":{"tags":["cyberdriver-auth"],"summary":"Users","operationId":"users_api_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"current","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Current"}},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Pagesize"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Users Api Users Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/device-group/accessible":{"get":{"tags":["cyberdriver-auth"],"summary":"Device Group Accessible","operationId":"device_group_accessible_api_device_group_accessible_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Device Group Accessible Api Device Group Accessible Get"}}}}}}},"/api/ab/personal":{"post":{"tags":["cyberdriver-auth"],"summary":"Address Book Personal","operationId":"address_book_personal_api_ab_personal_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Address Book Personal Api Ab Personal Post"}}}}}}},"/api/ab/settings":{"post":{"tags":["cyberdriver-auth"],"summary":"Address Book Settings","operationId":"address_book_settings_api_ab_settings_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Address Book Settings Api Ab Settings Post"}}}}}}},"/api/ab/shared/profiles":{"post":{"tags":["cyberdriver-auth"],"summary":"Address Book Shared Profiles","operationId":"address_book_shared_profiles_api_ab_shared_profiles_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Address Book Shared Profiles Api Ab Shared Profiles Post"}}}}}}},"/api/ab/peers":{"post":{"tags":["cyberdriver-auth"],"summary":"Address Book Peers","operationId":"address_book_peers_api_ab_peers_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"current","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Current"}},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Pagesize"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Address Book Peers Api Ab Peers Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ab/tags/{_profile_guid}":{"post":{"tags":["cyberdriver-auth"],"summary":"Address Book Tags","operationId":"address_book_tags_api_ab_tags___profile_guid__post","parameters":[{"name":"_profile_guid","in":"path","required":true,"schema":{"type":"string","title":" Profile Guid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{},"title":"Response Address Book Tags Api Ab Tags   Profile Guid  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ab":{"get":{"tags":["cyberdriver-auth"],"summary":"Legacy Address Book","operationId":"legacy_address_book_api_ab_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Legacy Address Book Api Ab Get"}}}}}},"post":{"tags":["cyberdriver-auth"],"summary":"Save Legacy Address Book","operationId":"save_legacy_address_book_api_ab_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"summary":"Root","description":"Root endpoint with service information","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health/live":{"get":{"summary":"Health Live","description":"Liveness probe - Is the process alive?\nAlways returns 200 if the server can respond.\nUse this for: Kubernetes liveness probes, basic \"is it up\" checks.","operationId":"health_live_health_live_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health/ready":{"get":{"summary":"Health Ready","description":"Readiness probe - Can the service handle requests?\nChecks all critical dependencies with timeouts.\nUse this for: Load balancer health checks, Better Stack monitoring.\nReturns 503 if any critical dependency is down.","operationId":"health_ready_health_ready_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health","description":"Backward compatible health check - redirects to readiness check.","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health/db":{"get":{"summary":"Health Db","description":"Legacy endpoint - checks database only.","operationId":"health_db_health_db_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/health/machines":{"get":{"tags":["health"],"summary":"Health Machines","description":"Probe the dimensions endpoint for all connected machines in scope.\n\nScope rules:\n- Standard keys/JWT: only machines in the authenticated organization\n- Cyberdesk root API key: machines across all organizations","operationId":"health_machines_v1_health_machines_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MachinesHealthCheckResponse"}}}},"503":{"description":"One or more connected machines failed dimensions health probes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MachinesHealthCheckResponse"}}}}},"security":[{"HTTPBearer":[]}]}}},"webhooks":{"run_complete":{"post":{"summary":"Run Complete Webhook","description":"Webhook schema for run completion events. Documentation-only.","operationId":"run_complete_webhookrun_complete_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunCompletedEvent"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-svix-group-name":"runs"}},"downed_machines":{"post":{"summary":"Downed Machines Webhook","description":"Webhook schema for machines that appear down. Documentation-only.","operationId":"downed_machines_webhookdowned_machines_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DownedMachinesEvent"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"x-svix-group-name":"machines"}}},"components":{"schemas":{"AddTagsRequest":{"properties":{"tag_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":50,"minItems":1,"title":"Tag Ids","description":"List of tag IDs to add"}},"type":"object","required":["tag_ids"],"title":"AddTagsRequest","description":"Schema for adding tags to a workflow"},"AttachmentType":{"type":"string","enum":["input","output"],"title":"AttachmentType"},"Body_upload_workflow_prompt_image_v1_workflows_prompt_image_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"The image file to upload"}},"type":"object","required":["file"],"title":"Body_upload_workflow_prompt_image_v1_workflows_prompt_image_post"},"BulkAddTagsRequest":{"properties":{"workflow_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":100,"minItems":1,"title":"Workflow Ids","description":"List of workflow IDs to add tags to"},"tag_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":50,"minItems":1,"title":"Tag Ids","description":"List of tag IDs to add"}},"type":"object","required":["workflow_ids","tag_ids"],"title":"BulkAddTagsRequest","description":"Schema for bulk adding tags to workflows"},"ChainStep":{"properties":{"workflow_id":{"type":"string","format":"uuid","title":"Workflow Id"},"session_alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Alias","description":"Alias to persist this step's outputs within the session"},"inputs":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Inputs","description":"Step-specific inputs; values can be strings, objects, arrays, or {$ref: 'alias.outputs.path'} references"},"sensitive_inputs":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Sensitive Inputs","description":"Step-specific sensitive inputs (supports nested objects) that override or extend shared_sensitive_inputs"}},"type":"object","required":["workflow_id"],"title":"ChainStep","description":"One step within a chain"},"ConnectionCreate":{"properties":{"websocket_id":{"type":"string","maxLength":255,"minLength":1,"title":"Websocket Id"},"ip_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip Address"},"user_agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Agent"},"machine_id":{"type":"string","format":"uuid","title":"Machine Id"}},"type":"object","required":["websocket_id","machine_id"],"title":"ConnectionCreate","description":"Schema for creating a connection"},"ConnectionResponse":{"properties":{"websocket_id":{"type":"string","maxLength":255,"minLength":1,"title":"Websocket Id"},"ip_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip Address"},"user_agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Agent"},"id":{"type":"string","format":"uuid","title":"Id"},"machine_id":{"type":"string","format":"uuid","title":"Machine Id"},"connected_at":{"type":"string","format":"date-time","title":"Connected At"},"disconnected_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Disconnected At"},"last_ping":{"type":"string","format":"date-time","title":"Last Ping"},"status":{"$ref":"#/components/schemas/ConnectionStatus"}},"type":"object","required":["websocket_id","id","machine_id","connected_at","disconnected_at","last_ping","status"],"title":"ConnectionResponse","description":"Connection response schema"},"ConnectionStatus":{"type":"string","enum":["connected","disconnected","error"],"title":"ConnectionStatus"},"ConnectionUpdate":{"properties":{"status":{"anyOf":[{"$ref":"#/components/schemas/ConnectionStatus"},{"type":"null"}]},"last_ping":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Ping"},"disconnected_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Disconnected At"}},"type":"object","title":"ConnectionUpdate","description":"Schema for updating a connection"},"CopyToClipboardRequest":{"properties":{"text":{"type":"string","title":"Text","description":"Key name for the copied data"}},"type":"object","required":["text"],"title":"CopyToClipboardRequest"},"CyberdriverConnectionAuthorizationRequest":{"properties":{"desktopToken":{"type":"string","title":"Desktoptoken"},"machineApiKey":{"type":"string","title":"Machineapikey"},"selectedOrganizationId":{"type":"string","title":"Selectedorganizationid","default":""},"machineId":{"type":"string","title":"Machineid","default":""},"rustdeskPeerId":{"type":"string","title":"Rustdeskpeerid","default":""},"id":{"type":"string","title":"Id","default":""}},"type":"object","required":["desktopToken","machineApiKey"],"title":"CyberdriverConnectionAuthorizationRequest"},"CyberdriverConnectionTokenRequest":{"properties":{"rustdeskPeerId":{"type":"string","title":"Rustdeskpeerid"},"selectedOrganizationId":{"type":"string","title":"Selectedorganizationid","default":""}},"type":"object","required":["rustdeskPeerId"],"title":"CyberdriverConnectionTokenRequest"},"CyberdriverConnectionTokenResponse":{"properties":{"desktopToken":{"type":"string","title":"Desktoptoken"},"expiresAt":{"type":"integer","title":"Expiresat"}},"type":"object","required":["desktopToken","expiresAt"],"title":"CyberdriverConnectionTokenResponse"},"CyberdriverShutdownRequest":{"properties":{"source":{"type":"string","title":"Source","description":"Caller identifier for shutdown auditing","default":"cloud-api"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"Reason for shutting down the CyberDriver process","default":"user_disabled_machine"}},"type":"object","title":"CyberdriverShutdownRequest"},"CyberdriverUpdateRequest":{"properties":{"version":{"type":"string","title":"Version","description":"Target version or 'latest'","default":"latest"},"restart":{"type":"boolean","title":"Restart","description":"Whether to restart Cyberdriver after update","default":true}},"type":"object","title":"CyberdriverUpdateRequest"},"CyberdriverWebSessionEndpoints":{"properties":{"hbbs_url":{"type":"string","title":"Hbbs Url","description":"Browser-safe hbbs WSS endpoint"},"hbbr_url":{"type":"string","title":"Hbbr Url","description":"Browser-safe hbbr WSS endpoint"}},"type":"object","required":["hbbs_url","hbbr_url"],"title":"CyberdriverWebSessionEndpoints"},"CyberdriverWebSessionResponse":{"properties":{"machine_id":{"type":"string","format":"uuid","title":"Machine Id"},"rustdesk_peer_id":{"type":"string","title":"Rustdesk Peer Id"},"desktop_label":{"type":"string","title":"Desktop Label"},"selected_organization_id":{"type":"string","title":"Selected Organization Id"},"token":{"type":"string","title":"Token"},"expires_at":{"type":"integer","title":"Expires At"},"mode":{"type":"string","title":"Mode"},"endpoints":{"$ref":"#/components/schemas/CyberdriverWebSessionEndpoints"},"public_key":{"type":"string","title":"Public Key"},"features":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Features"}},"type":"object","required":["machine_id","rustdesk_peer_id","desktop_label","selected_organization_id","token","expires_at","mode","endpoints","public_key","features"],"title":"CyberdriverWebSessionResponse"},"DisplayDimensions":{"properties":{"width":{"type":"integer","title":"Width"},"height":{"type":"integer","title":"Height"}},"type":"object","required":["width","height"],"title":"DisplayDimensions"},"DownedMachine":{"properties":{"machine_id":{"type":"string","format":"uuid","title":"Machine Id","description":"Machine identifier"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Machine display name"},"organization_id":{"type":"string","title":"Organization Id","description":"Organization that owns the machine"},"status":{"$ref":"#/components/schemas/MachineStatus","description":"Persisted machine status when the check ran"},"last_seen":{"type":"string","format":"date-time","title":"Last Seen","description":"Last time Cyberdesk observed the machine"},"reason":{"type":"string","title":"Reason","description":"Why the machine currently appears down"}},"type":"object","required":["machine_id","organization_id","status","last_seen","reason"],"title":"DownedMachine","description":"Machine payload sent inside the downed_machines webhook event."},"DownedMachinesEvent":{"properties":{"event_id":{"type":"string","format":"uuid","title":"Event Id","description":"Unique event identifier for idempotency"},"event_type":{"type":"string","title":"Event Type","description":"Event type key","default":"downed_machines"},"occurred_at":{"type":"string","format":"date-time","title":"Occurred At","description":"Time the event occurred (UTC)"},"organization_id":{"type":"string","title":"Organization Id","description":"Organization that owns the downed machines"},"machines":{"items":{"$ref":"#/components/schemas/DownedMachine"},"type":"array","title":"Machines","description":"Machines that currently appear down"}},"type":"object","required":["organization_id","machines"],"title":"DownedMachinesEvent","description":"Payload sent for the downed_machines webhook event."},"FileInput":{"properties":{"filename":{"type":"string","title":"Filename"},"content":{"type":"string","title":"Content","description":"Base64 encoded file content"},"target_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Path","description":"Optional path on machine, defaults to ~/CyberdeskTransfers/"},"cleanup_imports_after_run":{"type":"boolean","title":"Cleanup Imports After Run","description":"Delete from machine after run completes","default":false}},"type":"object","required":["filename","content"],"title":"FileInput","description":"File input for run creation"},"FileWriteRequest":{"properties":{"path":{"type":"string","title":"Path","description":"Target file path"},"content":{"type":"string","title":"Content","description":"Base64 encoded file content"},"mode":{"type":"string","title":"Mode","description":"Write mode - 'write' or 'append'","default":"write"}},"type":"object","required":["path","content"],"title":"FileWriteRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IncludedResource":{"properties":{"type":{"type":"string","title":"Type","description":"Resource type (e.g., 'workflow', 'machine', 'pool')"},"id":{"type":"string","format":"uuid","title":"Id","description":"Resource UUID"}},"additionalProperties":true,"type":"object","required":["type","id"],"title":"IncludedResource","description":"A resource in the JSON:API-style included array.\n\nEach included resource has a `type` field indicating what kind of resource it is\n(e.g., \"workflow\", \"machine\", \"pool\") and an `id` field with the resource's UUID.\nAll other fields from the resource's response model are included.\n\nExample:\n    {\n        \"type\": \"workflow\",\n        \"id\": \"550e8400-e29b-41d4-a716-446655440000\",\n        \"name\": \"My Workflow\",\n        \"main_prompt\": \"Do something...\",\n        \"created_at\": \"2024-01-15T10:30:00Z\"\n    }"},"KeyboardKeyRequest":{"properties":{"text":{"type":"string","title":"Text"},"down":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Down","description":"None = full press (down + up), True = press key down and hold, False = release a key previously held with down=True"}},"type":"object","required":["text"],"title":"KeyboardKeyRequest"},"KeyboardTypeRequest":{"properties":{"text":{"type":"string","title":"Text"}},"type":"object","required":["text"],"title":"KeyboardTypeRequest"},"MachineCreate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name"},"version":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Version"},"hostname":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Hostname"},"os_info":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Os Info"},"machine_parameters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Machine Parameters","description":"Machine-specific input values that auto-populate runs"},"machine_sensitive_parameters":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Machine Sensitive Parameters","description":"Machine-specific sensitive input aliases (stored in Basis Theory)"},"fingerprint":{"type":"string","maxLength":36,"minLength":1,"title":"Fingerprint"},"unkey_key_id":{"type":"string","maxLength":255,"minLength":1,"title":"Unkey Key Id"}},"type":"object","required":["fingerprint","unkey_key_id"],"title":"MachineCreate","description":"Schema for creating a machine"},"MachineHealthCheckError":{"properties":{"machine_id":{"type":"string","title":"Machine Id"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id"},"machine_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Machine Name"},"status_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status Code"},"error":{"type":"string","title":"Error"}},"type":"object","required":["machine_id","error"],"title":"MachineHealthCheckError"},"MachinePoolAssignment":{"properties":{"machine_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":100,"minItems":1,"title":"Machine Ids","description":"List of machine IDs to assign to the pool"}},"type":"object","required":["machine_ids"],"title":"MachinePoolAssignment","description":"Schema for assigning machines to pools"},"MachinePoolUpdate":{"properties":{"pool_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Pool Ids","description":"List of pool IDs to assign the machine to"}},"type":"object","required":["pool_ids"],"title":"MachinePoolUpdate","description":"Schema for updating a machine's pool assignments"},"MachineResponse":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name"},"version":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Version"},"hostname":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Hostname"},"os_info":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Os Info"},"machine_parameters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Machine Parameters","description":"Machine-specific input values that auto-populate runs"},"machine_sensitive_parameters":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Machine Sensitive Parameters","description":"Machine-specific sensitive input aliases (stored in Basis Theory)"},"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id"},"unkey_key_id":{"type":"string","title":"Unkey Key Id"},"status":{"$ref":"#/components/schemas/MachineStatus"},"is_available":{"type":"boolean","title":"Is Available"},"alerts_enabled":{"type":"boolean","title":"Alerts Enabled"},"reserved_session_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Reserved Session Id"},"linked_keepalive_machine_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Linked Keepalive Machine Id"},"physical_server_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Physical Server Id","description":"Fly machine ID hosting the WebSocket connection"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_seen":{"type":"string","format":"date-time","title":"Last Seen"},"pools":{"anyOf":[{"items":{"$ref":"#/components/schemas/PoolResponse"},"type":"array"},{"type":"null"}],"title":"Pools"}},"type":"object","required":["id","unkey_key_id","status","is_available","alerts_enabled","created_at","last_seen"],"title":"MachineResponse","description":"Machine response schema"},"MachineResponseWithIncludes":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"unkey_key_id":{"type":"string","title":"Unkey Key Id"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version"},"hostname":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hostname"},"os_info":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Os Info"},"machine_parameters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Machine Parameters"},"machine_sensitive_parameters":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Machine Sensitive Parameters"},"status":{"$ref":"#/components/schemas/MachineStatus"},"is_available":{"type":"boolean","title":"Is Available"},"alerts_enabled":{"type":"boolean","title":"Alerts Enabled"},"reserved_session_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Reserved Session Id"},"linked_keepalive_machine_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Linked Keepalive Machine Id"},"physical_server_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Physical Server Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_seen":{"type":"string","format":"date-time","title":"Last Seen"},"pools":{"anyOf":[{"items":{"$ref":"#/components/schemas/PoolResponse"},"type":"array"},{"type":"null"}],"title":"Pools"},"included":{"anyOf":[{"items":{"$ref":"#/components/schemas/IncludedResource"},"type":"array"},{"type":"null"}],"title":"Included","description":"Related resources requested via the `include` query parameter"}},"type":"object","required":["id","unkey_key_id","status","is_available","alerts_enabled","created_at","last_seen"],"title":"MachineResponseWithIncludes","description":"Machine response with optional included related resources."},"MachineStatus":{"type":"string","enum":["connected","disconnected","error"],"title":"MachineStatus"},"MachineUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name"},"version":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Version"},"hostname":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Hostname"},"os_info":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Os Info"},"status":{"anyOf":[{"$ref":"#/components/schemas/MachineStatus"},{"type":"null"}]},"is_available":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Available"},"alerts_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Alerts Enabled"},"last_seen":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Seen"},"reserved_session_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Reserved Session Id","description":"Set to null to clear reservation; server will cancel any scheduling/running run on this machine, clear reservation, mark machine available, and trigger matching"},"machine_parameters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Machine Parameters","description":"Machine-specific input values. Provide empty dict {} to clear all."},"machine_sensitive_parameters":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Machine Sensitive Parameters","description":"Machine-specific sensitive input values (will be stored in Basis Theory). Provide empty dict {} to clear all."}},"type":"object","title":"MachineUpdate","description":"Schema for updating a machine"},"MachinesHealthCheckResponse":{"properties":{"status":{"type":"string","enum":["ok","error"],"title":"Status"},"scope":{"type":"string","enum":["organization","all_organizations"],"title":"Scope"},"checked_machines":{"type":"integer","title":"Checked Machines"},"healthy_machines":{"type":"integer","title":"Healthy Machines"},"errored_machines":{"items":{"$ref":"#/components/schemas/MachineHealthCheckError"},"type":"array","title":"Errored Machines"},"message":{"type":"string","title":"Message"}},"type":"object","required":["status","scope","checked_machines","healthy_machines","errored_machines","message"],"title":"MachinesHealthCheckResponse"},"ModelConfigurationCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"provider":{"type":"string","maxLength":50,"minLength":1,"title":"Provider","description":"LangChain provider name (e.g. 'anthropic', 'openai')."},"model":{"type":"string","maxLength":255,"minLength":1,"title":"Model","description":"Provider model identifier (e.g. 'claude-sonnet-4-5-20250929')."},"temperature":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Temperature"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens"},"timeout_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Timeout Seconds"},"max_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Retries"},"additional_params":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Additional Params","description":"Provider-specific kwargs passed through to LangChain."},"agent_harness_version_string":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Harness Version String","description":"Agent harness version string used by Cyberdesk workers for prompt/tool selection."},"is_computer_use_model":{"type":"boolean","title":"Is Computer Use Model","description":"True if this model has native computer use capabilities. If True, can be used for main agent, focused actions, and fallbacks for those agents.","default":false},"is_archived":{"type":"boolean","title":"Is Archived","description":"Whether this model configuration is archived and should generally be hidden behind archived-model UI affordances.","default":false},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key","description":"Raw API key (stored in Basis Theory; never persisted directly)."}},"type":"object","required":["name","provider","model"],"title":"ModelConfigurationCreate","description":"Create a model configuration.\n\n`api_key` is the raw secret material; it will be stored in Basis Theory and only the alias is persisted.\nFor providers that Cyberdesk does not provide keys for, `api_key` is required."},"ModelConfigurationResponse":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"provider":{"type":"string","maxLength":50,"minLength":1,"title":"Provider","description":"LangChain provider name (e.g. 'anthropic', 'openai')."},"model":{"type":"string","maxLength":255,"minLength":1,"title":"Model","description":"Provider model identifier (e.g. 'claude-sonnet-4-5-20250929')."},"temperature":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Temperature"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens"},"timeout_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Timeout Seconds"},"max_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Retries"},"additional_params":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Additional Params","description":"Provider-specific kwargs passed through to LangChain."},"agent_harness_version_string":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Harness Version String","description":"Agent harness version string used by Cyberdesk workers for prompt/tool selection."},"is_computer_use_model":{"type":"boolean","title":"Is Computer Use Model","description":"True if this model has native computer use capabilities. If True, can be used for main agent, focused actions, and fallbacks for those agents.","default":false},"is_archived":{"type":"boolean","title":"Is Archived","description":"Whether this model configuration is archived and should generally be hidden behind archived-model UI affordances.","default":false},"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id"},"api_key_alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Alias","description":"Basis Theory token id (alias) used to resolve api_key at runtime."},"is_system_default":{"type":"boolean","title":"Is System Default"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["name","provider","model","id","is_system_default","created_at","updated_at"],"title":"ModelConfigurationResponse","description":"API response schema for model configurations."},"ModelConfigurationUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"provider":{"anyOf":[{"type":"string","maxLength":50,"minLength":1},{"type":"null"}],"title":"Provider"},"model":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Model"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key","description":"Raw API key; if provided, replaces the stored alias."},"clear_api_key":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Clear Api Key","description":"If true, clears any stored api_key_alias (reverts to Cyberdesk-provided key if supported)."},"temperature":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Temperature"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens"},"timeout_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Timeout Seconds"},"max_retries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Retries"},"additional_params":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Additional Params"},"agent_harness_version_string":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agent Harness Version String"},"is_computer_use_model":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Computer Use Model"},"is_archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Archived"}},"type":"object","title":"ModelConfigurationUpdate","description":"Update a model configuration (organization-owned only)."},"MouseClickRequest":{"properties":{"x":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"X"},"y":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Y"},"button":{"type":"string","title":"Button","default":"left"},"down":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Down","description":"None = full click, True = mouse down, False = mouse up"},"clicks":{"type":"integer","maximum":3.0,"minimum":1.0,"title":"Clicks","description":"Number of clicks (1=single, 2=double, 3=triple)","default":1}},"type":"object","title":"MouseClickRequest"},"MouseDragRequest":{"properties":{"to_x":{"type":"integer","title":"To X"},"to_y":{"type":"integer","title":"To Y"},"start_x":{"type":"integer","title":"Start X"},"start_y":{"type":"integer","title":"Start Y"},"duration":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration"},"button":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Button","description":"'left' | 'right' | 'middle'","default":"left"}},"type":"object","required":["to_x","to_y","start_x","start_y"],"title":"MouseDragRequest"},"MouseMoveRequest":{"properties":{"x":{"type":"integer","title":"X"},"y":{"type":"integer","title":"Y"}},"type":"object","required":["x","y"],"title":"MouseMoveRequest"},"MousePosition":{"properties":{"x":{"type":"integer","title":"X"},"y":{"type":"integer","title":"Y"}},"type":"object","required":["x","y"],"title":"MousePosition"},"MouseScrollRequest":{"properties":{"direction":{"type":"string","title":"Direction","description":"Scroll direction: 'up', 'down', 'left', or 'right'"},"amount":{"type":"integer","minimum":0.0,"title":"Amount","description":"Number of scroll steps (clicks); non-negative integer"},"x":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"X"},"y":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Y"}},"type":"object","required":["direction","amount"],"title":"MouseScrollRequest"},"OidcAuthRequest":{"properties":{"op":{"type":"string","title":"Op"},"id":{"type":"string","title":"Id"},"uuid":{"type":"string","title":"Uuid"},"clientSecret":{"type":"string","title":"Clientsecret","default":""},"deviceInfo":{"additionalProperties":true,"type":"object","title":"Deviceinfo"}},"type":"object","required":["op","id","uuid"],"title":"OidcAuthRequest"},"OidcAuthResponse":{"properties":{"code":{"type":"string","title":"Code"},"url":{"type":"string","title":"Url"},"userCode":{"type":"string","title":"Usercode"}},"type":"object","required":["code","url","userCode"],"title":"OidcAuthResponse"},"PaginatedResponse":{"properties":{"items":{"items":{},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"skip":{"type":"integer","title":"Skip"},"limit":{"type":"integer","title":"Limit"}},"type":"object","required":["items","total","skip","limit"],"title":"PaginatedResponse","description":"Paginated response wrapper"},"PaginatedResponseWithIncludes_MachineResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MachineResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"skip":{"type":"integer","title":"Skip"},"limit":{"type":"integer","title":"Limit"},"included":{"anyOf":[{"items":{"$ref":"#/components/schemas/IncludedResource"},"type":"array"},{"type":"null"}],"title":"Included","description":"Related resources requested via the `include` query parameter"}},"type":"object","required":["items","total","skip","limit"],"title":"PaginatedResponseWithIncludes[MachineResponse]"},"PaginatedResponseWithIncludes_PoolResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PoolResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"skip":{"type":"integer","title":"Skip"},"limit":{"type":"integer","title":"Limit"},"included":{"anyOf":[{"items":{"$ref":"#/components/schemas/IncludedResource"},"type":"array"},{"type":"null"}],"title":"Included","description":"Related resources requested via the `include` query parameter"}},"type":"object","required":["items","total","skip","limit"],"title":"PaginatedResponseWithIncludes[PoolResponse]"},"PaginatedResponseWithIncludes_RunResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RunResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"skip":{"type":"integer","title":"Skip"},"limit":{"type":"integer","title":"Limit"},"included":{"anyOf":[{"items":{"$ref":"#/components/schemas/IncludedResource"},"type":"array"},{"type":"null"}],"title":"Included","description":"Related resources requested via the `include` query parameter"}},"type":"object","required":["items","total","skip","limit"],"title":"PaginatedResponseWithIncludes[RunResponse]"},"PaginatedResponseWithIncludes_TrajectoryResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TrajectoryResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"skip":{"type":"integer","title":"Skip"},"limit":{"type":"integer","title":"Limit"},"included":{"anyOf":[{"items":{"$ref":"#/components/schemas/IncludedResource"},"type":"array"},{"type":"null"}],"title":"Included","description":"Related resources requested via the `include` query parameter"}},"type":"object","required":["items","total","skip","limit"],"title":"PaginatedResponseWithIncludes[TrajectoryResponse]"},"PaginatedResponseWithIncludes_WorkflowResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/WorkflowResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"skip":{"type":"integer","title":"Skip"},"limit":{"type":"integer","title":"Limit"},"included":{"anyOf":[{"items":{"$ref":"#/components/schemas/IncludedResource"},"type":"array"},{"type":"null"}],"title":"Included","description":"Related resources requested via the `include` query parameter"}},"type":"object","required":["items","total","skip","limit"],"title":"PaginatedResponseWithIncludes[WorkflowResponse]"},"PaginatedResponse_ConnectionResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ConnectionResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"skip":{"type":"integer","title":"Skip"},"limit":{"type":"integer","title":"Limit"}},"type":"object","required":["items","total","skip","limit"],"title":"PaginatedResponse[ConnectionResponse]"},"PaginatedResponse_RunAttachmentResponse_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RunAttachmentResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"skip":{"type":"integer","title":"Skip"},"limit":{"type":"integer","title":"Limit"}},"type":"object","required":["items","total","skip","limit"],"title":"PaginatedResponse[RunAttachmentResponse]"},"PoolCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"pool_parameters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Pool Parameters","description":"Pool-level input values that auto-populate runs selecting this pool"},"pool_sensitive_parameters":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Pool Sensitive Parameters","description":"Pool-level sensitive input aliases (stored in Basis Theory)"}},"type":"object","required":["name"],"title":"PoolCreate","description":"Schema for creating a pool"},"PoolResponse":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"pool_parameters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Pool Parameters","description":"Pool-level input values that auto-populate runs selecting this pool"},"pool_sensitive_parameters":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Pool Sensitive Parameters","description":"Pool-level sensitive input aliases (stored in Basis Theory)"},"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","title":"Organization Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"machine_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Machine Count","description":"Number of machines in this pool","default":0}},"type":"object","required":["name","id","organization_id","created_at","updated_at"],"title":"PoolResponse","description":"Pool response schema"},"PoolResponseWithIncludes":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","title":"Organization Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"pool_parameters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Pool Parameters"},"pool_sensitive_parameters":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Pool Sensitive Parameters"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"machine_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Machine Count","description":"Number of machines in this pool","default":0},"machines":{"anyOf":[{"items":{"$ref":"#/components/schemas/MachineResponse"},"type":"array"},{"type":"null"}],"title":"Machines","description":"[Deprecated] Machines in this pool. Use `included` array instead."},"included":{"anyOf":[{"items":{"$ref":"#/components/schemas/IncludedResource"},"type":"array"},{"type":"null"}],"title":"Included","description":"Related resources requested via the `include` query parameter"}},"type":"object","required":["id","organization_id","name","created_at","updated_at"],"title":"PoolResponseWithIncludes","description":"Pool response with optional included related resources."},"PoolUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"pool_parameters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Pool Parameters","description":"Pool-level input values. Provide empty dict {} to clear all."},"pool_sensitive_parameters":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Pool Sensitive Parameters","description":"Pool-level sensitive input values (will be stored in Basis Theory). Provide empty dict {} to clear all."}},"type":"object","title":"PoolUpdate","description":"Schema for updating a pool"},"PoolWithMachines":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"pool_parameters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Pool Parameters","description":"Pool-level input values that auto-populate runs selecting this pool"},"pool_sensitive_parameters":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Pool Sensitive Parameters","description":"Pool-level sensitive input aliases (stored in Basis Theory)"},"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","title":"Organization Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"machine_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Machine Count","description":"Number of machines in this pool","default":0},"machines":{"items":{"$ref":"#/components/schemas/MachineResponse"},"type":"array","title":"Machines"}},"type":"object","required":["name","id","organization_id","created_at","updated_at"],"title":"PoolWithMachines","description":"Pool response with machines included"},"PostRunCheckFileTargetMode":{"type":"string","enum":["exact","regex","loop_items"],"title":"PostRunCheckFileTargetMode"},"PostRunCheckStatus":{"type":"string","enum":["pending","running","success","failed","infra_error","cancelled"],"title":"PostRunCheckStatus"},"PostRunCheckType":{"type":"string","enum":["run_attachment_exists","run_attachment_image_check","output_data_passes_schema_validation","output_data_agentic_check"],"title":"PostRunCheckType"},"PowerShellExecRequest":{"properties":{"command":{"type":"string","title":"Command","description":"PowerShell command to execute"},"same_session":{"type":"boolean","title":"Same Session","description":"Use persistent session","default":true},"working_directory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Working Directory","description":"Working directory for new session"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id","description":"Session ID to use"},"timeout":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Timeout","description":"Maximum time in seconds to wait for command completion before returning. Cyberdriver 1.0.2+ continues one-shot commands in the background after timeout (default: 30.0)","default":30.0}},"type":"object","required":["command"],"title":"PowerShellExecRequest"},"PowerShellSessionRequest":{"properties":{"action":{"type":"string","title":"Action","description":"Action to perform - 'create' or 'destroy'"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id","description":"Session ID for destroy action"}},"type":"object","required":["action"],"title":"PowerShellSessionRequest"},"ReorderRequest":{"properties":{"ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":1000,"minItems":1,"title":"Ids","description":"List of IDs in desired order"}},"type":"object","required":["ids"],"title":"ReorderRequest","description":"Schema for reordering tags or groups"},"RequestLogCreate":{"properties":{"request_id":{"type":"string","maxLength":255,"minLength":1,"title":"Request Id"},"method":{"type":"string","maxLength":10,"minLength":1,"title":"Method"},"path":{"type":"string","title":"Path"},"status_code":{"anyOf":[{"type":"integer","maximum":599.0,"minimum":100.0},{"type":"null"}],"title":"Status Code"},"request_size_bytes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Request Size Bytes"},"response_size_bytes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Response Size Bytes"},"duration_ms":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Duration Ms"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"machine_id":{"type":"string","format":"uuid","title":"Machine Id"}},"type":"object","required":["request_id","method","path","machine_id"],"title":"RequestLogCreate","description":"Schema for creating a request log"},"RequestLogResponse":{"properties":{"request_id":{"type":"string","maxLength":255,"minLength":1,"title":"Request Id"},"method":{"type":"string","maxLength":10,"minLength":1,"title":"Method"},"path":{"type":"string","title":"Path"},"status_code":{"anyOf":[{"type":"integer","maximum":599.0,"minimum":100.0},{"type":"null"}],"title":"Status Code"},"request_size_bytes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Request Size Bytes"},"response_size_bytes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Response Size Bytes"},"duration_ms":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Duration Ms"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"id":{"type":"string","format":"uuid","title":"Id"},"machine_id":{"type":"string","format":"uuid","title":"Machine Id"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["request_id","method","path","id","machine_id","created_at","completed_at"],"title":"RequestLogResponse","description":"Request log response schema"},"RequestLogUpdate":{"properties":{"status_code":{"anyOf":[{"type":"integer","maximum":599.0,"minimum":100.0},{"type":"null"}],"title":"Status Code"},"response_size_bytes":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Response Size Bytes"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"duration_ms":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Duration Ms"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"}},"type":"object","title":"RequestLogUpdate","description":"Schema for updating a request log"},"RunAttachmentCreate":{"properties":{"run_id":{"type":"string","format":"uuid","title":"Run Id"},"filename":{"type":"string","title":"Filename"},"content":{"type":"string","title":"Content","description":"Base64 encoded file content"},"content_type":{"type":"string","title":"Content Type"},"attachment_type":{"$ref":"#/components/schemas/AttachmentType"},"target_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Path"},"cleanup_imports_after_run":{"type":"boolean","title":"Cleanup Imports After Run","default":false},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["run_id","filename","content","content_type","attachment_type"],"title":"RunAttachmentCreate","description":"Schema for creating a run attachment"},"RunAttachmentDownloadUrlResponse":{"properties":{"url":{"type":"string","title":"Url","description":"Signed URL for downloading the attachment"},"expires_in":{"type":"integer","title":"Expires In","description":"Seconds until the URL expires"}},"type":"object","required":["url","expires_in"],"title":"RunAttachmentDownloadUrlResponse","description":"Response schema for run attachment download URL"},"RunAttachmentResponse":{"properties":{"filename":{"type":"string","title":"Filename"},"content_type":{"type":"string","title":"Content Type"},"attachment_type":{"$ref":"#/components/schemas/AttachmentType"},"target_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Path"},"cleanup_imports_after_run":{"type":"boolean","title":"Cleanup Imports After Run","default":false},"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id"},"run_id":{"type":"string","format":"uuid","title":"Run Id"},"size_bytes":{"type":"integer","title":"Size Bytes"},"storage_path":{"type":"string","title":"Storage Path"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["filename","content_type","attachment_type","id","run_id","size_bytes","storage_path","created_at"],"title":"RunAttachmentResponse","description":"Run attachment response schema"},"RunAttachmentUpdate":{"properties":{"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","title":"RunAttachmentUpdate","description":"Schema for updating a run attachment"},"RunBulkCreate":{"properties":{"workflow_id":{"type":"string","format":"uuid","title":"Workflow Id"},"machine_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Machine Id","description":"Machine ID. If not provided, an available machine will be automatically selected."},"pool_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Pool Ids","description":"Pool IDs to filter available machines. Machine must belong to all of these pools (intersection). Ignored when machine_id is provided."},"input_values":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Input Values","description":"Input values for workflow variables"},"file_inputs":{"anyOf":[{"items":{"$ref":"#/components/schemas/FileInput"},"type":"array"},{"type":"null"}],"title":"File Inputs","description":"Files to upload to the machine"},"count":{"type":"integer","maximum":1000.0,"exclusiveMinimum":0.0,"title":"Count","description":"Number of runs to create (max 1000)"},"sensitive_input_values":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Sensitive Input Values","description":"Sensitive input values (supports nested objects) to store in the secure vault per run. Not persisted in our database. In workflow input_schema, sensitive root keys are validated under a '$' prefixed key."},"session_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Session Id","description":"Join an existing session; overrides machine_id/pool_ids for all runs"},"start_session":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Start Session","description":"Start a new session for these runs; a new UUID will be generated and set on all runs. The first run will attempt to reserve a machine.","default":false}},"type":"object","required":["workflow_id","count"],"title":"RunBulkCreate","description":"Schema for bulk creating runs"},"RunBulkCreateResponse":{"properties":{"created_runs":{"items":{"$ref":"#/components/schemas/RunResponse"},"type":"array","title":"Created Runs"},"failed_count":{"type":"integer","title":"Failed Count","default":0},"errors":{"items":{"type":"string"},"type":"array","title":"Errors"}},"type":"object","required":["created_runs"],"title":"RunBulkCreateResponse","description":"Response for bulk run creation"},"RunCompletedEvent":{"properties":{"event_id":{"type":"string","format":"uuid","title":"Event Id","description":"Unique event identifier for idempotency"},"event_type":{"type":"string","title":"Event Type","description":"Event type key","default":"run_complete"},"occurred_at":{"type":"string","format":"date-time","title":"Occurred At","description":"Time the event occurred (UTC)"},"run":{"$ref":"#/components/schemas/RunCompletedWebhookRunPayload","description":"The completed run data"}},"type":"object","required":["run"],"title":"RunCompletedEvent","description":"Payload sent for the run_complete webhook event."},"RunCompletedWebhookRunPayload":{"properties":{"workflow_id":{"type":"string","format":"uuid","title":"Workflow Id"},"machine_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Machine Id"},"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id"},"status":{"$ref":"#/components/schemas/RunStatus"},"error":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Error"},"output_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Output Data"},"input_attachment_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Input Attachment Ids"},"output_attachment_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Output Attachment Ids"},"run_message_history":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Run Message History"},"input_values":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Input Values"},"main_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Main Prompt","description":"Per-run prompt override used for execution. Null means the run falls back to the workflow's current main_prompt."},"model_metadata":{"anyOf":[{"$ref":"#/components/schemas/WorkflowModelMetadata"},{"type":"null"}],"description":"Per-run model metadata overrides used for execution. Null means the run falls back to the workflow's model_metadata."},"pool_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Pool Ids"},"sensitive_input_aliases":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Sensitive Input Aliases"},"usage_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Usage Metadata","description":"Arbitrary usage/billing metadata captured during a run (schema is flexible)"},"post_run_checks":{"anyOf":[{"items":{"$ref":"#/components/schemas/RunPostRunCheckSnapshot"},"type":"array"},{"type":"null"}],"title":"Post Run Checks","description":"Version-tolerant snapshot/results for the run's post-run checks."},"session_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Session Id"},"session_alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Alias"},"release_session_after":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Release Session After"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"ended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ended At"}},"type":"object","required":["workflow_id","machine_id","id","status","created_at"],"title":"RunCompletedWebhookRunPayload","description":"Run payload sent inside the run_complete webhook event."},"RunCreate":{"properties":{"workflow_id":{"type":"string","format":"uuid","title":"Workflow Id"},"main_prompt":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Main Prompt","description":"Optional per-run prompt override. When provided, this run executes the supplied prompt text instead of the workflow's stored main_prompt."},"main_agent_model_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Main Agent Model Id","description":"Optional per-run main agent ModelConfiguration.id override. Stored as run model_metadata.main_agent_model_id and used only for this run."},"model_metadata":{"anyOf":[{"$ref":"#/components/schemas/WorkflowModelMetadata"},{"type":"null"}],"description":"Optional per-run model configuration metadata. Provided fields override the workflow's model_metadata for this run only."},"machine_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Machine Id","description":"Machine ID. If not provided, an available machine will be automatically selected."},"pool_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Pool Ids","description":"Pool IDs to filter available machines. Machine must belong to all of these pools (intersection). Ignored when machine_id is provided."},"input_values":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Input Values","description":"Input values for workflow variables"},"file_inputs":{"anyOf":[{"items":{"$ref":"#/components/schemas/FileInput"},"type":"array"},{"type":"null"}],"title":"File Inputs","description":"Files to upload to the machine"},"sensitive_input_values":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Sensitive Input Values","description":"Sensitive input values (supports nested objects). These are not stored and will be written to a secure vault and referenced by alias only. In workflow input_schema, sensitive root keys are validated under a '$' prefixed key (for example input key 'api_key' is '$api_key')."},"session_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Session Id","description":"Join an existing session; overrides machine_id/pool_ids"},"start_session":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Start Session","description":"Start a new session on the machine used by this run. Session ID will be this run's ID.","default":false},"session_alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Alias","description":"Persist outputs under this alias for $ref in this session"},"release_session_after":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Release Session After","description":"Release the session after this run completes successfully"}},"type":"object","required":["workflow_id"],"title":"RunCreate","description":"Schema for creating a run"},"RunField":{"type":"string","enum":["user_id","organization_id","error","output_data","input_attachment_ids","output_attachment_ids","run_message_history","input_values","main_prompt","model_metadata","pool_ids","sensitive_input_aliases","usage_metadata","session_id","session_alias","release_session_after","started_at","ended_at","post_run_checks","machine_id"],"title":"RunField","description":"Selectable run fields for projection in list endpoints.\n\nThese are optional fields beyond the essential identifiers that are always returned\n(id, workflow_id, machine_id, status, created_at)."},"RunImageSignedUrlResponse":{"properties":{"supabase_url":{"type":"string","title":"Supabase Url","description":"The stable supabase:// URL from run_message_history"},"signed_url":{"type":"string","title":"Signed Url","description":"A temporary signed URL for viewing or downloading the image"},"expires_in":{"type":"integer","title":"Expires In","description":"Seconds until the signed URL expires"}},"type":"object","required":["supabase_url","signed_url","expires_in"],"title":"RunImageSignedUrlResponse","description":"Response schema for getting a signed URL for a run screenshot image."},"RunListSortMode":{"type":"string","enum":["activity","created_at_desc"],"title":"RunListSortMode"},"RunPostRunCheckSnapshot":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"post_run_check_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Post Run Check Id"},"snapshot_version":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Snapshot Version"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"type":{"anyOf":[{"$ref":"#/components/schemas/PostRunCheckType"},{"type":"null"}]},"order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Order"},"file_target_mode":{"anyOf":[{"$ref":"#/components/schemas/PostRunCheckFileTargetMode"},{"type":"null"}]},"file_names":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"File Names"},"file_name_regex":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Name Regex"},"expected_match_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expected Match Count"},"expected_match_count_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Match Count Ref"},"loop_input":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loop Input"},"loop_item_filename_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loop Item Filename Template"},"allow_missing_attachments":{"type":"boolean","title":"Allow Missing Attachments","default":false},"check_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Check Prompt"},"model":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Model"},"status":{"$ref":"#/components/schemas/PostRunCheckStatus"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"ended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ended At"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"messages":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Messages"},"matched_filenames":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Matched Filenames"}},"additionalProperties":true,"type":"object","required":["status"],"title":"RunPostRunCheckSnapshot","description":"Version-tolerant run-level snapshot/result for one post-run check invocation."},"RunResponse":{"properties":{"workflow_id":{"type":"string","format":"uuid","title":"Workflow Id"},"machine_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Machine Id"},"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id"},"status":{"$ref":"#/components/schemas/RunStatus"},"error":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Error"},"output_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Output Data"},"input_attachment_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Input Attachment Ids"},"output_attachment_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Output Attachment Ids"},"run_message_history":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Run Message History"},"input_values":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Input Values"},"main_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Main Prompt","description":"Per-run prompt override used for execution. Null means the run falls back to the workflow's current main_prompt."},"model_metadata":{"anyOf":[{"$ref":"#/components/schemas/WorkflowModelMetadata"},{"type":"null"}],"description":"Per-run model metadata overrides used for execution. Null means the run falls back to the workflow's model_metadata."},"pool_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Pool Ids"},"sensitive_input_aliases":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Sensitive Input Aliases"},"usage_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Usage Metadata","description":"Arbitrary usage/billing metadata captured during a run (schema is flexible)"},"post_run_checks":{"anyOf":[{"items":{"$ref":"#/components/schemas/RunPostRunCheckSnapshot"},"type":"array"},{"type":"null"}],"title":"Post Run Checks","description":"Version-tolerant snapshot/results for the run's post-run checks."},"session_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Session Id"},"session_alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Alias"},"release_session_after":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Release Session After"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"ended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ended At"}},"type":"object","required":["workflow_id","machine_id","id","status","created_at"],"title":"RunResponse","description":"Run response schema"},"RunResponseWithIncludes":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"workflow_id":{"type":"string","format":"uuid","title":"Workflow Id"},"machine_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Machine Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id"},"status":{"$ref":"#/components/schemas/RunStatus"},"error":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Error"},"output_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Output Data"},"input_attachment_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Input Attachment Ids"},"output_attachment_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Output Attachment Ids"},"run_message_history":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Run Message History"},"input_values":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Input Values"},"main_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Main Prompt"},"model_metadata":{"anyOf":[{"$ref":"#/components/schemas/WorkflowModelMetadata"},{"type":"null"}]},"pool_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Pool Ids"},"sensitive_input_aliases":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Sensitive Input Aliases"},"usage_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Usage Metadata","description":"Arbitrary usage/billing metadata captured during a run"},"post_run_checks":{"anyOf":[{"items":{"$ref":"#/components/schemas/RunPostRunCheckSnapshot"},"type":"array"},{"type":"null"}],"title":"Post Run Checks","description":"Version-tolerant snapshot/results for the run's post-run checks."},"session_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Session Id"},"session_alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Alias"},"release_session_after":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Release Session After"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"ended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ended At"},"included":{"anyOf":[{"items":{"$ref":"#/components/schemas/IncludedResource"},"type":"array"},{"type":"null"}],"title":"Included","description":"Related resources requested via the `include` query parameter"}},"type":"object","required":["id","workflow_id","status","created_at"],"title":"RunResponseWithIncludes","description":"Run response with optional included related resources.\n\nWhen the `include` query parameter is used, related resources are returned\nin the `included` array following the JSON:API pattern.\n\nExample request: GET /v1/runs/123?include=workflow,machine"},"RunRetry":{"properties":{"input_values":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Input Values","description":"Override input values for workflow variables"},"sensitive_input_values":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Sensitive Input Values","description":"Provide new sensitive inputs (supports nested objects); stored in vault and mapped to aliases"},"file_inputs":{"anyOf":[{"items":{"$ref":"#/components/schemas/FileInput"},"type":"array"},{"type":"null"}],"title":"File Inputs","description":"Provide new input files for this retry; replaces existing input attachments"},"machine_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Machine Id","description":"Override specific machine for this retry"},"pool_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Pool Ids","description":"Override pool filters if not using a specific machine"},"reuse_session":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Reuse Session","description":"Keep existing session_id. If false and no session_id provided, clears session fields","default":true},"session_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Session Id","description":"Set/override session_id for this retry"},"start_session":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Start Session","description":"Start a fresh new session for this retry (creates new session_id)","default":false},"session_alias":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Alias","description":"Set/override session_alias for this retry (used with start_session or session_id)"},"release_session_after":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Release Session After","description":"Override release_session_after behavior for this retry"}},"type":"object","title":"RunRetry","description":"Options for retrying an existing run in-place (same run_id).\n\nNotes:\n- If `file_inputs` are provided, existing input attachments are replaced.\n- Prior outputs, history, and output attachments are always cleared as part of retry.\n- Retry is only allowed for terminal runs (success, task_failed, error, or cancelled)."},"RunStatus":{"type":"string","enum":["scheduling","running","running_checks","success","cancelled","task_failed","error"],"title":"RunStatus"},"RunUpdate":{"properties":{"status":{"anyOf":[{"$ref":"#/components/schemas/RunStatus"},{"type":"null"}]},"error":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Error"},"output_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Output Data"},"output_attachment_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Output Attachment Ids"},"run_message_history":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Run Message History"},"input_values":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Input Values"},"usage_metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Usage Metadata"},"post_run_checks":{"anyOf":[{"items":{"$ref":"#/components/schemas/RunPostRunCheckSnapshot"},"type":"array"},{"type":"null"}],"title":"Post Run Checks"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"ended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ended At"},"release_session_after":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Release Session After"}},"type":"object","title":"RunUpdate","description":"Schema for updating a run"},"TrajectoryCreate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"workflow_id":{"type":"string","format":"uuid","title":"Workflow Id"},"run_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Run Id","description":"Optional run that created this trajectory"},"trajectory_data":{"items":{"additionalProperties":true,"type":"object"},"type":"array","minItems":1,"title":"Trajectory Data"},"dimensions":{"additionalProperties":{"type":"integer"},"type":"object","title":"Dimensions","description":"Display dimensions when trajectory was recorded"},"original_input_values":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Original Input Values","description":"Original input values used when trajectory was created"},"is_approved":{"type":"boolean","title":"Is Approved","description":"Whether this trajectory is approved for use","default":false}},"type":"object","required":["workflow_id","trajectory_data","dimensions"],"title":"TrajectoryCreate","description":"Schema for creating a trajectory.\n\nNote: `is_generated` is intentionally omitted here. New trajectories always\nstart as non-generated and must be promoted via\nPOST /runs/{run_id}/generate-trajectory.\n\nNote: `is_main` is intentionally omitted here. Main-trajectory designation is\nmanaged after creation via trajectory updates."},"TrajectoryResponse":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"workflow_id":{"type":"string","format":"uuid","title":"Workflow Id"},"run_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Run Id","description":"Optional run that created this trajectory"},"trajectory_data":{"items":{"additionalProperties":true,"type":"object"},"type":"array","minItems":1,"title":"Trajectory Data"},"dimensions":{"additionalProperties":{"type":"integer"},"type":"object","title":"Dimensions","description":"Display dimensions when trajectory was recorded"},"original_input_values":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Original Input Values","description":"Original input values used when trajectory was created"},"is_approved":{"type":"boolean","title":"Is Approved"},"has_been_approved":{"type":"boolean","title":"Has Been Approved"},"is_generated":{"type":"boolean","title":"Is Generated"},"is_main":{"type":"boolean","title":"Is Main"},"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["workflow_id","trajectory_data","dimensions","is_approved","has_been_approved","is_generated","is_main","id","created_at","updated_at"],"title":"TrajectoryResponse","description":"Trajectory response schema"},"TrajectoryResponseWithIncludes":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"workflow_id":{"type":"string","format":"uuid","title":"Workflow Id"},"run_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Run Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_approved":{"type":"boolean","title":"Is Approved"},"has_been_approved":{"type":"boolean","title":"Has Been Approved"},"is_generated":{"type":"boolean","title":"Is Generated"},"is_main":{"type":"boolean","title":"Is Main"},"trajectory_data":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Trajectory Data"},"dimensions":{"additionalProperties":{"type":"integer"},"type":"object","title":"Dimensions","description":"Display dimensions when trajectory was recorded"},"original_input_values":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Original Input Values","description":"Original input values used when trajectory was created"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"included":{"anyOf":[{"items":{"$ref":"#/components/schemas/IncludedResource"},"type":"array"},{"type":"null"}],"title":"Included","description":"Related resources requested via the `include` query parameter"}},"type":"object","required":["id","workflow_id","is_approved","has_been_approved","is_generated","is_main","dimensions","created_at","updated_at"],"title":"TrajectoryResponseWithIncludes","description":"Trajectory response with optional included related resources."},"TrajectoryUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"trajectory_data":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array","minItems":1},{"type":"null"}],"title":"Trajectory Data"},"is_approved":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Approved","description":"Whether this trajectory is approved for use"},"is_main":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Main","description":"Whether this trajectory is the optional main tie-break trajectory for its workflow"}},"type":"object","title":"TrajectoryUpdate","description":"Schema for updating a trajectory"},"UsageAggregateResponse":{"properties":{"total_agentic_steps":{"type":"integer","title":"Total Agentic Steps"},"total_cached_steps":{"type":"integer","title":"Total Cached Steps"},"period_start":{"type":"string","format":"date-time","title":"Period Start"},"period_end":{"type":"string","format":"date-time","title":"Period End"},"mode":{"$ref":"#/components/schemas/UsageMode"},"runs_counted":{"type":"integer","title":"Runs Counted"}},"type":"object","required":["total_agentic_steps","total_cached_steps","period_start","period_end","mode","runs_counted"],"title":"UsageAggregateResponse","description":"Response schema for usage aggregation."},"UsageMode":{"type":"string","enum":["simulated","billed"],"title":"UsageMode","description":"Mode for counting usage steps."},"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","additionalProperties":true}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WorkflowChainCreate":{"properties":{"steps":{"items":{"$ref":"#/components/schemas/ChainStep"},"type":"array","minItems":1,"title":"Steps"},"shared_inputs":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Shared Inputs"},"shared_sensitive_inputs":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Shared Sensitive Inputs","description":"Shared sensitive inputs (supports nested objects) for all steps"},"shared_file_inputs":{"anyOf":[{"items":{"$ref":"#/components/schemas/FileInput"},"type":"array"},{"type":"null"}],"title":"Shared File Inputs"},"keep_session_after_completion":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Keep Session After Completion","default":false},"machine_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Machine Id"},"pool_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Pool Ids","description":"Pool IDs to filter available machines when starting a new session. Machine must belong to ALL of these pools (intersection). Ignored when machine_id is provided."},"session_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Session Id"}},"type":"object","required":["steps"],"title":"WorkflowChainCreate","description":"Request to create and run a multi-step chain on a single reserved session/machine"},"WorkflowChainResponse":{"properties":{"session_id":{"type":"string","format":"uuid","title":"Session Id"},"run_ids":{"items":{"type":"string","format":"uuid"},"type":"array","title":"Run Ids"}},"type":"object","required":["session_id","run_ids"],"title":"WorkflowChainResponse","description":"Response for chain creation"},"WorkflowCreate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name"},"main_prompt":{"type":"string","minLength":1,"title":"Main Prompt"},"input_schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Schema","description":"JSON schema for validating merged run inputs. Sensitive root keys are exposed with a '$' prefix in schema validation (for example sensitive_input_values.api_key -> '$api_key')."},"output_schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Schema","description":"JSON schema for output data transformation"},"includes_file_exports":{"type":"boolean","title":"Includes File Exports","description":"Enable AI-based file export detection","default":false},"is_webhooks_enabled":{"type":"boolean","title":"Is Webhooks Enabled","description":"Send webhook on run completion","default":false},"terminal_command_allowlist":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Terminal Command Allowlist","description":"Optional workflow-level allowlist for execute_terminal_command. When set, the agent may only run commands that exactly match one of the approved command templates."},"model_metadata":{"anyOf":[{"$ref":"#/components/schemas/WorkflowModelMetadata"},{"type":"null"}],"description":"Optional workflow-level model configuration metadata (main agent, cache detection, and fallbacks)."},"post_run_check_failure_cleanup_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Post Run Check Failure Cleanup Prompt","description":"Optional workflow-level cleanup prompt that runs when any post-run check fails during a session or chain."},"post_run_checks":{"anyOf":[{"items":{"$ref":"#/components/schemas/WorkflowPostRunCheckUpsert"},"type":"array"},{"type":"null"}],"title":"Post Run Checks","description":"Workflow-managed post-run checks, reconciled on save."}},"type":"object","required":["main_prompt"],"title":"WorkflowCreate","description":"Schema for creating a workflow"},"WorkflowDuplicateRequest":{"properties":{"include_trajectories":{"type":"boolean","title":"Include Trajectories","description":"Whether to duplicate generated trajectories onto the copied workflow. Non-generated trajectories are never duplicated.","default":false}},"type":"object","title":"WorkflowDuplicateRequest","description":"Schema for duplicating workflows."},"WorkflowInternalMetadata":{"properties":{"has_unaddressed_error":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Unaddressed Error","description":"True when at least one run has failed and remains unaddressed."},"last_errored_run_start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Errored Run Start","description":"Start timestamp of the most recent errored/task_failed run."},"last_errored_run_uuid":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Last Errored Run Uuid","description":"Run UUID of the most recent errored/task_failed run."}},"type":"object","title":"WorkflowInternalMetadata","description":"Backend workflow metadata exposed read-only for internal observability."},"WorkflowInternalMetadataUpdate":{"properties":{"has_unaddressed_error":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Unaddressed Error","description":"Set to false when workflow errors have been addressed."},"last_errored_run_start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Errored Run Start","description":"Start timestamp of the most recent errored/task_failed run."},"last_errored_run_uuid":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Last Errored Run Uuid","description":"Run UUID of the most recent errored/task_failed run."}},"type":"object","title":"WorkflowInternalMetadataUpdate","description":"Patchable workflow metadata fields for internal workflow maintenance."},"WorkflowMergeRequest":{"properties":{"target_workflow_id":{"type":"string","format":"uuid","title":"Target Workflow Id","description":"Workflow ID to merge into"},"copy_trajectories":{"type":"boolean","title":"Copy Trajectories","description":"Whether to copy trajectories to the target workflow","default":false}},"type":"object","required":["target_workflow_id"],"title":"WorkflowMergeRequest","description":"Schema for merging workflows"},"WorkflowModelMetadata":{"properties":{"main_agent_model_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Main Agent Model Id","description":"ModelConfiguration.id used for the main agent. Null → Cyberdesk default."},"cache_detection_model_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Cache Detection Model Id","description":"ModelConfiguration.id used for cache detection. Null → Cyberdesk default."},"fallback_model_1_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Fallback Model 1 Id","description":"ModelConfiguration.id used as fallback 1 (global across agents)."},"fallback_model_2_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Fallback Model 2 Id","description":"ModelConfiguration.id used as fallback 2 (global across agents)."}},"type":"object","title":"WorkflowModelMetadata","description":"JSONB-backed workflow model configuration metadata.\n\nStored on the Workflow row as `model_metadata` to avoid adding many FK columns.\nAll fields are optional; when missing/null, the system falls back to Cyberdesk defaults."},"WorkflowPostRunCheckResponse":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"type":{"$ref":"#/components/schemas/PostRunCheckType"},"file_target_mode":{"anyOf":[{"$ref":"#/components/schemas/PostRunCheckFileTargetMode"},{"type":"null"}]},"file_names":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"File Names"},"file_name_regex":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Name Regex"},"expected_match_count":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Expected Match Count"},"expected_match_count_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Match Count Ref"},"loop_input":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loop Input"},"loop_item_filename_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loop Item Filename Template"},"allow_missing_attachments":{"type":"boolean","title":"Allow Missing Attachments","default":false},"check_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Check Prompt"},"model":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Model","description":"Optional ModelConfiguration id override for agentic post-run checks."},"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","title":"Organization Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"order":{"type":"integer","title":"Order"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["name","type","id","organization_id","order","created_at","updated_at"],"title":"WorkflowPostRunCheckResponse","description":"Workflow response shape for post-run checks, including workflow-specific order."},"WorkflowPostRunCheckUpsert":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"type":{"$ref":"#/components/schemas/PostRunCheckType"},"file_target_mode":{"anyOf":[{"$ref":"#/components/schemas/PostRunCheckFileTargetMode"},{"type":"null"}]},"file_names":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"File Names"},"file_name_regex":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Name Regex"},"expected_match_count":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Expected Match Count"},"expected_match_count_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Match Count Ref"},"loop_input":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loop Input"},"loop_item_filename_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loop Item Filename Template"},"allow_missing_attachments":{"type":"boolean","title":"Allow Missing Attachments","default":false},"check_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Check Prompt"},"model":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Model","description":"Optional ModelConfiguration id override for agentic post-run checks."},"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"}},"type":"object","required":["name","type"],"title":"WorkflowPostRunCheckUpsert","description":"Create/update payload for workflow-managed post-run checks."},"WorkflowPromptImageListItem":{"properties":{"supabase_url":{"type":"string","title":"Supabase Url","description":"The stable supabase:// URL to use in workflow prompt HTML"},"path":{"type":"string","title":"Path","description":"The storage path of the image"},"filename":{"type":"string","title":"Filename","description":"The filename of the image"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At","description":"When the image was uploaded"},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes","description":"The size of the file in bytes"}},"type":"object","required":["supabase_url","path","filename"],"title":"WorkflowPromptImageListItem","description":"Schema for an item in the workflow prompt images list"},"WorkflowPromptImageResponse":{"properties":{"supabase_url":{"type":"string","title":"Supabase Url","description":"The stable supabase:// URL to use in workflow prompt HTML. Example: supabase://workflow-prompt-images/org_xxx/prompt-assets/image.png"},"signed_url":{"type":"string","title":"Signed Url","description":"A temporary signed URL for immediate display (expires in 1 hour)"},"filename":{"type":"string","title":"Filename","description":"The sanitized filename as stored"},"content_type":{"type":"string","title":"Content Type","description":"The MIME type of the uploaded image"},"size_bytes":{"type":"integer","title":"Size Bytes","description":"The size of the uploaded file in bytes"}},"type":"object","required":["supabase_url","signed_url","filename","content_type","size_bytes"],"title":"WorkflowPromptImageResponse","description":"Response schema for uploaded workflow prompt image"},"WorkflowPromptImageSignedUrlResponse":{"properties":{"supabase_url":{"type":"string","title":"Supabase Url","description":"The stable supabase:// URL"},"signed_url":{"type":"string","title":"Signed Url","description":"A temporary signed URL (expires in 1 hour)"},"expires_in":{"type":"integer","title":"Expires In","description":"Seconds until the signed URL expires"}},"type":"object","required":["supabase_url","signed_url","expires_in"],"title":"WorkflowPromptImageSignedUrlResponse","description":"Response schema for getting a signed URL for an existing image"},"WorkflowResponse":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name"},"main_prompt":{"type":"string","minLength":1,"title":"Main Prompt"},"input_schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Schema","description":"JSON schema for validating merged run inputs. Sensitive root keys are exposed with a '$' prefix in schema validation (for example sensitive_input_values.api_key -> '$api_key')."},"output_schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Schema","description":"JSON schema for output data transformation"},"includes_file_exports":{"type":"boolean","title":"Includes File Exports","description":"Enable AI-based file export detection","default":false},"is_webhooks_enabled":{"type":"boolean","title":"Is Webhooks Enabled","description":"Send webhook on run completion","default":false},"terminal_command_allowlist":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Terminal Command Allowlist","description":"Optional workflow-level allowlist for execute_terminal_command. When set, the agent may only run commands that exactly match one of the approved command templates."},"model_metadata":{"anyOf":[{"$ref":"#/components/schemas/WorkflowModelMetadata"},{"type":"null"}],"description":"Optional workflow-level model configuration metadata (main agent, cache detection, and fallbacks)."},"post_run_check_failure_cleanup_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Post Run Check Failure Cleanup Prompt","description":"Optional workflow-level cleanup prompt that runs when any post-run check fails during a session or chain."},"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id"},"includes_input_variables":{"type":"boolean","title":"Includes Input Variables","default":false},"workflow_metadata":{"anyOf":[{"$ref":"#/components/schemas/WorkflowInternalMetadata"},{"type":"null"}],"description":"Internal workflow metadata used for run/error tracking."},"old_versions":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Old Versions"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"tags":{"anyOf":[{"items":{"$ref":"#/components/schemas/WorkflowTagResponse"},"type":"array"},{"type":"null"}],"title":"Tags","description":"Tags assigned to this workflow"},"post_run_checks":{"anyOf":[{"items":{"$ref":"#/components/schemas/WorkflowPostRunCheckResponse"},"type":"array"},{"type":"null"}],"title":"Post Run Checks","description":"Post-run checks assigned to this workflow."}},"type":"object","required":["main_prompt","id","created_at","updated_at"],"title":"WorkflowResponse","description":"Workflow response schema"},"WorkflowResponseWithIncludes":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name"},"main_prompt":{"type":"string","minLength":1,"title":"Main Prompt"},"input_schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Schema","description":"JSON schema for validating merged run inputs. Sensitive root keys are exposed with a '$' prefix in schema validation (for example sensitive_input_values.api_key -> '$api_key')."},"output_schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Schema","description":"JSON schema for output data transformation"},"includes_file_exports":{"type":"boolean","title":"Includes File Exports","description":"Enable AI-based file export detection","default":false},"is_webhooks_enabled":{"type":"boolean","title":"Is Webhooks Enabled","description":"Send webhook on run completion","default":false},"terminal_command_allowlist":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Terminal Command Allowlist","description":"Optional workflow-level allowlist for execute_terminal_command. When set, the agent may only run commands that exactly match one of the approved command templates."},"model_metadata":{"anyOf":[{"$ref":"#/components/schemas/WorkflowModelMetadata"},{"type":"null"}],"description":"Optional workflow-level model configuration metadata (main agent, cache detection, and fallbacks)."},"post_run_check_failure_cleanup_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Post Run Check Failure Cleanup Prompt","description":"Optional workflow-level cleanup prompt that runs when any post-run check fails during a session or chain."},"id":{"type":"string","format":"uuid","title":"Id"},"user_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"User Id"},"organization_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Id"},"includes_input_variables":{"type":"boolean","title":"Includes Input Variables","default":false},"workflow_metadata":{"anyOf":[{"$ref":"#/components/schemas/WorkflowInternalMetadata"},{"type":"null"}],"description":"Internal workflow metadata used for run/error tracking."},"old_versions":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Old Versions"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"tags":{"anyOf":[{"items":{"$ref":"#/components/schemas/WorkflowTagResponse"},"type":"array"},{"type":"null"}],"title":"Tags","description":"Tags assigned to this workflow"},"post_run_checks":{"anyOf":[{"items":{"$ref":"#/components/schemas/WorkflowPostRunCheckResponse"},"type":"array"},{"type":"null"}],"title":"Post Run Checks","description":"Post-run checks assigned to this workflow."},"included":{"anyOf":[{"items":{"$ref":"#/components/schemas/IncludedResource"},"type":"array"},{"type":"null"}],"title":"Included","description":"Related resources requested via the `include` query parameter"}},"type":"object","required":["main_prompt","id","created_at","updated_at"],"title":"WorkflowResponseWithIncludes","description":"Workflow response with optional included related resources."},"WorkflowTagCreate":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"emoji":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Emoji"},"color":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Color"},"group_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Group Id","description":"Optional group for mutual exclusivity"}},"type":"object","required":["name"],"title":"WorkflowTagCreate","description":"Schema for creating a workflow tag"},"WorkflowTagGroupCreate":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"emoji":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Emoji"},"color":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Color"}},"type":"object","required":["name"],"title":"WorkflowTagGroupCreate","description":"Schema for creating a workflow tag group"},"WorkflowTagGroupResponse":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"emoji":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Emoji"},"color":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Color"},"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","title":"Organization Id"},"order":{"type":"integer","title":"Order"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["name","id","organization_id","order","created_at","updated_at"],"title":"WorkflowTagGroupResponse","description":"Workflow tag group response schema"},"WorkflowTagGroupUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"emoji":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Emoji"},"color":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Color"}},"type":"object","title":"WorkflowTagGroupUpdate","description":"Schema for updating a workflow tag group"},"WorkflowTagResponse":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"emoji":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Emoji"},"color":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Color"},"group_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Group Id","description":"Optional group for mutual exclusivity"},"id":{"type":"string","format":"uuid","title":"Id"},"organization_id":{"type":"string","title":"Organization Id"},"order":{"type":"integer","title":"Order"},"is_archived":{"type":"boolean","title":"Is Archived","default":false},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"workflow_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Workflow Count","description":"Number of workflows with this tag (returned in list endpoint)"},"group":{"anyOf":[{"$ref":"#/components/schemas/WorkflowTagGroupResponse"},{"type":"null"}],"description":"The group this tag belongs to"}},"type":"object","required":["name","id","organization_id","order","created_at","updated_at"],"title":"WorkflowTagResponse","description":"Workflow tag response schema"},"WorkflowTagUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"emoji":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Emoji"},"color":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Color"},"group_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Group Id","description":"Optional group for mutual exclusivity"},"is_archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Archived","description":"Archive tag to prevent new assignments"}},"type":"object","title":"WorkflowTagUpdate","description":"Schema for updating a workflow tag"},"WorkflowUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name"},"main_prompt":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Main Prompt"},"input_schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Schema","description":"JSON schema for validating merged run inputs. Sensitive root keys are exposed with a '$' prefix in schema validation (for example sensitive_input_values.api_key -> '$api_key')."},"output_schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Schema","description":"JSON schema for output data transformation"},"includes_file_exports":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Includes File Exports","description":"Enable AI-based file export detection"},"is_webhooks_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Webhooks Enabled","description":"Send webhook on run completion"},"terminal_command_allowlist":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Terminal Command Allowlist","description":"Optional workflow-level allowlist for execute_terminal_command. Set to an empty list or null to clear the allowlist."},"model_metadata":{"anyOf":[{"$ref":"#/components/schemas/WorkflowModelMetadata"},{"type":"null"}],"description":"Optional workflow-level model configuration metadata (main agent, cache detection, and fallbacks)."},"post_run_check_failure_cleanup_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Post Run Check Failure Cleanup Prompt","description":"Optional workflow-level cleanup prompt that runs when any post-run check fails during a session or chain. Set null to clear it."},"workflow_metadata":{"anyOf":[{"$ref":"#/components/schemas/WorkflowInternalMetadataUpdate"},{"type":"null"}],"description":"Optional internal workflow metadata patch. Top-level null clears all workflow metadata. Omit this field to leave existing metadata unchanged. Set individual keys to null to remove only those keys."},"post_run_checks":{"anyOf":[{"items":{"$ref":"#/components/schemas/WorkflowPostRunCheckUpsert"},"type":"array"},{"type":"null"}],"title":"Post Run Checks","description":"Workflow-managed post-run checks, reconciled on save when present."}},"type":"object","title":"WorkflowUpdate","description":"Schema for updating a workflow"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}