Files
osmedeus/docs/api-swagger/swagger.yaml
T
j3ssie 8d413aecb9 feat: table rendering, cron schedules, and assets command
- Refactor table display using tablewriter with box-drawing characters and proper Unicode width handling
- Add --as-cron flag to register cron schedules instead of executing immediately
- Implement new 'osmedeus assets' command for asset querying with filtering and statistics
- Enhance workflow parameter display with categorization and per-module summaries
- Improve column width handling and parameter documentation
2026-02-17 15:19:49 +07:00

2601 lines
66 KiB
YAML

definitions:
core.LLMMessage:
properties:
content:
description: string or []LLMContentPart
name:
type: string
role:
$ref: '#/definitions/core.LLMMessageRole'
tool_call_id:
type: string
tool_calls:
items:
$ref: '#/definitions/core.LLMToolCall'
type: array
type: object
core.LLMMessageRole:
enum:
- system
- user
- assistant
- tool
type: string
x-enum-varnames:
- LLMRoleSystem
- LLMRoleUser
- LLMRoleAssistant
- LLMRoleTool
core.LLMResponseFormat:
properties:
json_schema:
additionalProperties: true
type: object
type:
description: '"text", "json_object", "json_schema"'
type: string
type: object
core.LLMTool:
properties:
function:
$ref: '#/definitions/core.LLMToolFunction'
type:
description: '"function"'
type: string
type: object
core.LLMToolCall:
properties:
function:
$ref: '#/definitions/core.LLMToolCallFunction'
id:
type: string
type:
description: '"function"'
type: string
type: object
core.LLMToolCallFunction:
properties:
arguments:
description: JSON string
type: string
name:
type: string
type: object
core.LLMToolFunction:
properties:
description:
type: string
name:
type: string
parameters:
additionalProperties: true
type: object
type: object
database.AssetStats:
properties:
total:
type: integer
type: object
database.AssetStatsData:
properties:
asset_types:
items:
type: string
type: array
remarks:
items:
type: string
type: array
sources:
items:
type: string
type: array
technologies:
items:
type: string
type: array
type: object
database.RunStats:
properties:
completed:
type: integer
failed:
type: integer
pending:
type: integer
running:
type: integer
total:
type: integer
type: object
database.ScheduleStats:
properties:
enabled:
type: integer
total:
type: integer
type: object
database.SystemStats:
properties:
assets:
$ref: '#/definitions/database.AssetStats'
runs:
$ref: '#/definitions/database.RunStats'
schedules:
$ref: '#/definitions/database.ScheduleStats'
vulnerabilities:
$ref: '#/definitions/database.VulnerabilityStats'
workflows:
$ref: '#/definitions/database.WorkflowStats'
workspaces:
$ref: '#/definitions/database.WorkspaceStats'
type: object
database.VulnerabilityStats:
properties:
critical:
type: integer
high:
type: integer
low:
type: integer
medium:
type: integer
total:
type: integer
type: object
database.WorkflowStats:
properties:
flows:
type: integer
modules:
type: integer
total:
type: integer
type: object
database.WorkspaceStats:
properties:
total:
type: integer
type: object
handlers.ClearTableRequest:
properties:
force:
description: Must be true to confirm the destructive operation
type: boolean
type: object
handlers.CreateRunRequest:
properties:
concurrency:
description: Concurrency control
type: integer
docker_image:
description: Docker image to use when runner_type=docker
type: string
empty_target:
description: Run without target (generates placeholder target)
type: boolean
flow:
description: Workflow identification
type: string
heuristics_check:
description: 'Heuristics check level: none, basic, advanced'
type: string
module:
description: Module workflow name
type: string
notify_on_complete:
description: Send notification when run completes
type: boolean
params:
additionalProperties:
type: string
type: object
priority:
description: Priority and timeout
type: string
repeat:
description: Repeat run after completion
type: boolean
repeat_wait_time:
description: Wait time between repeats (e.g., 30s, 20m, 10h, 1d)
type: string
run_mode:
description: 'local, distributed, cloud (default: local)'
type: string
runner_type:
description: Runner configuration
type: string
schedule:
description: Scheduling options
type: string
schedule_enabled:
description: Enable scheduled execution
type: boolean
skip_validation:
description: Validation
type: boolean
ssh_host:
description: SSH host when runner_type=ssh
type: string
target:
type: string
target_file:
description: Path to file containing targets (one per line)
type: string
targets:
description: Multi-target support
items:
type: string
type: array
threads_hold:
description: Execution options (mirrors CLI flags)
type: integer
timeout:
description: Timeout in minutes (0 = no timeout)
type: integer
type: object
handlers.CreateScheduleRequest:
properties:
enabled:
type: boolean
event_topic:
type: string
name:
type: string
params:
additionalProperties: true
type: object
runner_type:
type: string
schedule:
description: cron expression
type: string
target:
type: string
trigger_type:
description: cron, event, watch, manual
type: string
watch_path:
type: string
workflow_kind:
description: '"module" or "flow"'
type: string
workflow_name:
type: string
workspace:
type: string
type: object
handlers.CreateVulnerabilityInput:
properties:
asset_type:
type: string
asset_value:
type: string
detail_http_request:
type: string
detail_http_response:
type: string
raw_vuln_json:
type: string
severity:
type: string
tags:
items:
type: string
type: array
vuln_desc:
type: string
vuln_info:
type: string
vuln_poc:
type: string
vuln_title:
type: string
workspace:
type: string
type: object
handlers.EmitEventRequest:
properties:
data:
additionalProperties: true
type: object
data_type:
type: string
name:
type: string
source:
type: string
topic:
type: string
type: object
handlers.EmitEventResponse:
properties:
event_id:
type: string
message:
type: string
success:
type: boolean
type: object
handlers.EventReceiverStatusResponse:
properties:
enabled:
type: boolean
running:
type: boolean
trigger_count:
type: integer
workflow_count:
type: integer
type: object
handlers.EventReceiverTriggerResponse:
properties:
enabled:
type: boolean
topic:
type: string
trigger_name:
type: string
workflow_name:
type: string
type: object
handlers.EventReceiverWorkflowResponse:
properties:
description:
type: string
kind:
type: string
name:
type: string
triggers:
items:
type: string
type: array
type: object
handlers.EventReceiverWorkflowsResponse:
properties:
triggers:
items:
$ref: '#/definitions/handlers.EventReceiverTriggerResponse'
type: array
workflows:
items:
$ref: '#/definitions/handlers.EventReceiverWorkflowResponse'
type: array
type: object
handlers.FunctionEvalRequest:
properties:
params:
additionalProperties:
type: string
type: object
script:
type: string
target:
type: string
type: object
handlers.InstallRequest:
properties:
install_all:
description: Install all binaries from registry (for type=binary)
type: boolean
install_optional:
description: Include optional binaries (only with install_all)
type: boolean
names:
description: Binary names to install (for type=binary)
items:
type: string
type: array
registry_mode:
description: '"direct-fetch" or "nix-build" (default: direct-fetch)'
type: string
registry_url:
description: Custom registry URL (optional, for type=binary)
type: string
source:
description: Git URL, zip URL, or file path (for type=workflow)
type: string
type:
description: '"binary" or "workflow"'
type: string
type: object
handlers.LLMChatRequest:
properties:
max_tokens:
type: integer
messages:
items:
$ref: '#/definitions/core.LLMMessage'
type: array
model:
type: string
"n":
type: integer
response_format:
$ref: '#/definitions/core.LLMResponseFormat'
stream:
type: boolean
temperature:
type: number
tool_choice: {}
tools:
items:
$ref: '#/definitions/core.LLMTool'
type: array
top_k:
type: integer
top_p:
type: number
type: object
handlers.LLMChatResponse:
properties:
content: {}
finish_reason:
type: string
id:
type: string
model:
type: string
tool_calls:
items:
$ref: '#/definitions/core.LLMToolCall'
type: array
usage:
additionalProperties:
type: integer
type: object
type: object
handlers.LLMEmbeddingRequest:
properties:
input:
items:
type: string
type: array
model:
type: string
type: object
handlers.LLMEmbeddingResponse:
properties:
embeddings:
items:
items:
type: number
type: array
type: array
model:
type: string
usage:
additionalProperties:
type: integer
type: object
type: object
handlers.LoginRequest:
properties:
password:
type: string
username:
type: string
type: object
handlers.SnapshotExportRequest:
properties:
workspace:
type: string
type: object
handlers.SubmitTaskRequest:
properties:
params:
additionalProperties: true
type: object
target:
type: string
workflow_kind:
type: string
workflow_name:
type: string
type: object
handlers.UpdateScheduleRequest:
properties:
enabled:
type: boolean
name:
type: string
params:
additionalProperties: true
type: object
schedule:
type: string
target:
type: string
workspace:
type: string
type: object
info:
contact: {}
paths:
/:
get:
description: Get server version and info
produces:
- application/json
responses:
"200":
description: Server information
schema:
additionalProperties:
type: string
type: object
summary: Server info
tags:
- Info
/health:
get:
description: Check if the server is running
produces:
- application/json
responses:
"200":
description: 'status: ok'
schema:
additionalProperties:
type: string
type: object
summary: Health check
tags:
- Health
/health/ready:
get:
description: Check if the server is ready to accept requests
produces:
- application/json
responses:
"200":
description: 'status: ready'
schema:
additionalProperties:
type: string
type: object
summary: Readiness check
tags:
- Health
/osm/api/artifacts:
get:
description: Get a paginated list of artifacts with optional filtering and existence
checks
parameters:
- description: Filter by workspace name
in: query
name: workspace
type: string
- description: Search in artifact name/path
in: query
name: search
type: string
- description: Filter by HTTP status code (also accepts statusCode)
in: query
name: status_code
type: integer
- default: false
description: Annotate results with path_exists and path_is_dir
in: query
name: verify_exist
type: boolean
- default: 0
description: Number of records to skip
in: query
name: offset
type: integer
- default: 20
description: Maximum number of records to return
in: query
name: limit
type: integer
produces:
- application/json
responses:
"200":
description: List of artifacts with pagination
schema:
additionalProperties: true
type: object
"500":
description: Failed to fetch artifacts
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: List artifacts
tags:
- Artifacts
/osm/api/artifacts/{workspace_name}:
get:
description: Download a single file under the given workspace by relative artifact
path
parameters:
- description: Workspace name
in: path
name: workspace_name
required: true
type: string
- description: Relative path to artifact under workspace
in: query
name: artifact_path
required: true
type: string
produces:
- application/octet-stream
responses:
"200":
description: Artifact file
schema:
type: file
"400":
description: Invalid request
schema:
additionalProperties: true
type: object
"403":
description: Forbidden
schema:
additionalProperties: true
type: object
"404":
description: Artifact not found
schema:
additionalProperties: true
type: object
"500":
description: Failed to download artifact
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Download workspace artifact
tags:
- Artifacts
/osm/api/asset-stats:
get:
description: Get unique values for technologies, sources, remarks, and asset
types across all assets or filtered by workspace
parameters:
- description: Filter by workspace name
in: query
name: workspace
type: string
produces:
- application/json
responses:
"200":
description: Asset statistics
schema:
$ref: '#/definitions/database.AssetStatsData'
"500":
description: Failed to get stats
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Get asset statistics
tags:
- Stats
/osm/api/assets:
get:
description: Get a paginated list of assets with optional filtering
parameters:
- description: Filter by workspace name
in: query
name: workspace
type: string
- description: Search in asset_value, url, title, host_ip
in: query
name: search
type: string
- description: Filter by HTTP status code
in: query
name: status_code
type: integer
- default: 0
description: Number of records to skip
in: query
name: offset
type: integer
- default: 20
description: Maximum number of records to return
in: query
name: limit
type: integer
produces:
- application/json
responses:
"200":
description: List of assets with pagination
schema:
additionalProperties: true
type: object
"500":
description: Failed to fetch assets
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: List assets
tags:
- Assets
/osm/api/assets/diff:
get:
description: Compare assets between two time points to find added, removed,
and changed assets
parameters:
- description: Workspace name
in: query
name: workspace
required: true
type: string
- description: Start time (RFC3339 format or Unix timestamp)
in: query
name: from
required: true
type: string
- description: 'End time (default: now)'
in: query
name: to
type: string
produces:
- application/json
responses:
"200":
description: Asset diff result
schema:
additionalProperties: true
type: object
"400":
description: Invalid parameters
schema:
additionalProperties: true
type: object
"500":
description: Failed to get asset diff
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Get asset diff
tags:
- Assets
/osm/api/assets/diffs:
get:
description: Get a paginated list of stored asset diff snapshots
parameters:
- description: Filter by workspace name
in: query
name: workspace
type: string
- default: 0
description: Number of records to skip
in: query
name: offset
type: integer
- default: 20
description: Maximum number of records to return
in: query
name: limit
type: integer
produces:
- application/json
responses:
"200":
description: List of asset diff snapshots with pagination
schema:
additionalProperties: true
type: object
"500":
description: Failed to fetch asset diff snapshots
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: List asset diff snapshots
tags:
- Assets
/osm/api/database/tables:
get:
description: Get list of all database tables with row counts
produces:
- application/json
responses:
"200":
description: List of tables with counts
schema:
additionalProperties: true
type: object
"500":
description: Internal error
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: List database tables
tags:
- Database
/osm/api/database/tables/{table}/clear:
post:
consumes:
- application/json
description: Delete all records from a specific database table (destructive
operation)
parameters:
- description: Table name (runs, step_results, event_logs, artifacts, assets,
schedules, workspaces, vulnerabilities, asset_diffs, vuln_diffs)
in: path
name: table
required: true
type: string
- description: Confirmation with force=true required
in: body
name: body
required: true
schema:
$ref: '#/definitions/handlers.ClearTableRequest'
produces:
- application/json
responses:
"200":
description: Table cleared successfully
schema:
additionalProperties: true
type: object
"400":
description: Invalid request or missing force confirmation
schema:
additionalProperties: true
type: object
"500":
description: Failed to clear table
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Clear database table
tags:
- Database
/osm/api/event-logs:
get:
description: Get a paginated list of event logs with optional filtering
parameters:
- description: Filter by event topic (e.g., run.started, run.completed)
in: query
name: topic
type: string
- description: Filter by event name
in: query
name: name
type: string
- description: Filter by source (scheduler, api, webhook)
in: query
name: source
type: string
- description: Filter by workspace
in: query
name: workspace
type: string
- description: Filter by run UUID
in: query
name: run_uuid
type: string
- description: Filter by workflow name
in: query
name: workflow_name
type: string
- description: Filter by processed status (true/false)
in: query
name: processed
type: string
- default: 0
description: Number of records to skip
in: query
name: offset
type: integer
- default: 20
description: Maximum number of records to return
in: query
name: limit
type: integer
produces:
- application/json
responses:
"200":
description: List of event logs with pagination
schema:
additionalProperties: true
type: object
"500":
description: Failed to fetch event logs
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: List event logs
tags:
- EventLogs
/osm/api/event-receiver/status:
get:
consumes:
- application/json
description: Returns the status of the event receiver including enabled state
and counts
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/handlers.EventReceiverStatusResponse'
summary: Get event receiver status
tags:
- event-receiver
/osm/api/event-receiver/workflows:
get:
consumes:
- application/json
description: Returns all workflows registered with the event receiver
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/handlers.EventReceiverWorkflowsResponse'
summary: List event receiver workflows
tags:
- event-receiver
/osm/api/events/emit:
post:
consumes:
- application/json
description: Emits an event that can trigger event-triggered workflows
parameters:
- description: Event to emit
in: body
name: request
required: true
schema:
$ref: '#/definitions/handlers.EmitEventRequest'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/handlers.EmitEventResponse'
"400":
description: Bad Request
schema:
additionalProperties: true
type: object
summary: Emit an event
tags:
- event-receiver
/osm/api/functions/eval:
post:
consumes:
- application/json
description: Execute a utility function script with template rendering and JavaScript
execution
parameters:
- description: Function evaluation request
in: body
name: request
required: true
schema:
$ref: '#/definitions/handlers.FunctionEvalRequest'
produces:
- application/json
responses:
"200":
description: Evaluation result
schema:
additionalProperties: true
type: object
"400":
description: Invalid request
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Execute utility function
tags:
- Functions
/osm/api/functions/list:
get:
description: Get a flat list of all available utility functions with metadata
produces:
- application/json
responses:
"200":
description: List of functions with total count
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: List utility functions
tags:
- Functions
/osm/api/jobs/{id}:
get:
description: Get the aggregated status of a job and its runs
parameters:
- description: Job ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: Job status
schema:
additionalProperties: true
type: object
"404":
description: Job not found
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Get job status
tags:
- Jobs
/osm/api/llm/v1/chat/completions:
post:
consumes:
- application/json
description: Send a chat completion request to the configured LLM provider (OpenAI-compatible)
parameters:
- description: Chat request
in: body
name: request
required: true
schema:
$ref: '#/definitions/handlers.LLMChatRequest'
produces:
- application/json
responses:
"200":
description: Chat response
schema:
$ref: '#/definitions/handlers.LLMChatResponse'
"400":
description: Invalid request
schema:
additionalProperties: true
type: object
"500":
description: LLM error
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: LLM Chat Completion
tags:
- LLM
/osm/api/llm/v1/embeddings:
post:
consumes:
- application/json
description: Generate embeddings for input text using the configured LLM provider
parameters:
- description: Embedding request
in: body
name: request
required: true
schema:
$ref: '#/definitions/handlers.LLMEmbeddingRequest'
produces:
- application/json
responses:
"200":
description: Embedding response
schema:
$ref: '#/definitions/handlers.LLMEmbeddingResponse'
"400":
description: Invalid request
schema:
additionalProperties: true
type: object
"500":
description: LLM error
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Generate Embeddings
tags:
- LLM
/osm/api/login:
post:
consumes:
- application/json
description: Authenticate user and get JWT token
parameters:
- description: Login credentials
in: body
name: credentials
required: true
schema:
$ref: '#/definitions/handlers.LoginRequest'
produces:
- application/json
responses:
"200":
description: JWT token
schema:
additionalProperties:
type: string
type: object
"400":
description: Invalid request
schema:
additionalProperties: true
type: object
"401":
description: Invalid credentials
schema:
additionalProperties: true
type: object
summary: User login
tags:
- Auth
/osm/api/logout:
post:
description: Clear the session cookie
produces:
- application/json
responses:
"200":
description: Logout message
schema:
additionalProperties:
type: string
type: object
summary: User logout
tags:
- Auth
/osm/api/registry-info:
get:
description: Get binary registry with mode support (direct-fetch or nix-build)
parameters:
- default: direct-fetch
description: 'Registry mode: direct-fetch or nix-build'
in: query
name: registry_mode
type: string
produces:
- application/json
responses:
"200":
description: Registry data
schema:
additionalProperties: true
type: object
"500":
description: Failed to load registry
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Get registry info
tags:
- Install
/osm/api/registry-install:
post:
consumes:
- application/json
description: Install binaries from registry or workflows from git/zip URL. Supports
direct-fetch and nix-build modes.
parameters:
- description: Installation configuration
in: body
name: request
required: true
schema:
$ref: '#/definitions/handlers.InstallRequest'
produces:
- application/json
responses:
"200":
description: Installation result
schema:
additionalProperties: true
type: object
"400":
description: Invalid request
schema:
additionalProperties: true
type: object
"500":
description: Installation failed
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Install binaries or workflows
tags:
- Install
/osm/api/runs:
get:
description: Get a paginated list of workflow runs with optional filters
parameters:
- default: 0
description: Number of records to skip
in: query
name: offset
type: integer
- default: 20
description: Maximum number of records to return
in: query
name: limit
type: integer
- description: Filter by status (pending, running, completed, failed, cancelled)
in: query
name: status
type: string
- description: Filter by workflow name
in: query
name: workflow
type: string
- description: Filter by target (partial match)
in: query
name: target
type: string
- description: Filter by workspace name (exact match)
in: query
name: workspace
type: string
produces:
- application/json
responses:
"200":
description: List of runs
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: List runs
tags:
- Runs
post:
consumes:
- application/json
description: Execute a workflow against one or more targets. Supports multiple
targets via array or file, concurrency control, priority levels, custom timeouts,
runner configuration (host/docker/ssh), and scheduling via cron expressions.
parameters:
- description: Run configuration with optional priority, timeout, runner config,
and scheduling
in: body
name: run
required: true
schema:
$ref: '#/definitions/handlers.CreateRunRequest'
produces:
- application/json
responses:
"202":
description: Run started
schema:
additionalProperties: true
type: object
"400":
description: Invalid request
schema:
additionalProperties: true
type: object
"404":
description: Workflow not found
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Create a new run
tags:
- Runs
/osm/api/runs/{id}:
delete:
description: Cancel a running workflow execution. This will terminate all running
processes associated with the run.
parameters:
- description: Run ID or RunID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: Run cancelled
schema:
additionalProperties: true
type: object
"400":
description: Run cannot be cancelled
schema:
additionalProperties: true
type: object
"404":
description: Run not found
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Cancel a run
tags:
- Runs
get:
description: Get details of a specific run by ID, including steps and artifacts
parameters:
- description: Run ID or RunID
in: path
name: id
required: true
type: string
- default: false
description: Include step results
in: query
name: include_steps
type: boolean
- default: false
description: Include artifacts
in: query
name: include_artifacts
type: boolean
produces:
- application/json
responses:
"200":
description: Run details
schema:
additionalProperties: true
type: object
"404":
description: Run not found
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Get run details
tags:
- Runs
/osm/api/runs/{id}/duplicate:
post:
description: Create a copy of an existing run with pending status. The duplicate
will have the same workflow, target, and parameters but a new UUID.
parameters:
- description: Run ID or RunUUID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"201":
description: Run duplicated
schema:
additionalProperties: true
type: object
"404":
description: Run not found
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Duplicate a run
tags:
- Runs
/osm/api/runs/{id}/start:
post:
description: Start a run that is in pending status. This triggers the workflow
execution.
parameters:
- description: Run ID or RunUUID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"202":
description: Run started
schema:
additionalProperties: true
type: object
"400":
description: Run cannot be started (not in pending status)
schema:
additionalProperties: true
type: object
"404":
description: Run or workflow not found
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Start a pending run
tags:
- Runs
/osm/api/schedules:
get:
description: Get a paginated list of all scheduled workflows
parameters:
- default: 0
description: Number of records to skip
in: query
name: offset
type: integer
- default: 20
description: Maximum number of records to return
in: query
name: limit
type: integer
produces:
- application/json
responses:
"200":
description: List of schedules
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: List all schedules
tags:
- Schedules
post:
consumes:
- application/json
description: Create a scheduled workflow execution with cron expression
parameters:
- description: Schedule configuration
in: body
name: schedule
required: true
schema:
$ref: '#/definitions/handlers.CreateScheduleRequest'
produces:
- application/json
responses:
"201":
description: Schedule created
schema:
additionalProperties: true
type: object
"400":
description: Invalid request
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Create a new schedule
tags:
- Schedules
/osm/api/schedules/{id}:
delete:
description: Delete a schedule by ID
parameters:
- description: Schedule ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: Schedule deleted
schema:
additionalProperties: true
type: object
"404":
description: Schedule not found
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Delete a schedule
tags:
- Schedules
get:
description: Get details of a specific schedule by ID
parameters:
- description: Schedule ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: Schedule details
schema:
additionalProperties: true
type: object
"404":
description: Schedule not found
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Get schedule details
tags:
- Schedules
put:
consumes:
- application/json
description: Update an existing schedule
parameters:
- description: Schedule ID
in: path
name: id
required: true
type: string
- description: Schedule update data
in: body
name: schedule
required: true
schema:
$ref: '#/definitions/handlers.UpdateScheduleRequest'
produces:
- application/json
responses:
"200":
description: Schedule updated
schema:
additionalProperties: true
type: object
"404":
description: Schedule not found
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Update a schedule
tags:
- Schedules
/osm/api/schedules/{id}/disable:
post:
description: Disable an enabled schedule
parameters:
- description: Schedule ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: Schedule disabled
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Disable a schedule
tags:
- Schedules
/osm/api/schedules/{id}/enable:
post:
description: Enable a disabled schedule
parameters:
- description: Schedule ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: Schedule enabled
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Enable a schedule
tags:
- Schedules
/osm/api/schedules/{id}/trigger:
post:
description: Manually trigger a scheduled workflow execution
parameters:
- description: Schedule ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"202":
description: Schedule triggered
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Trigger a schedule
tags:
- Schedules
/osm/api/settings/reload:
post:
description: Forces an immediate reload of the configuration file. Hot reload
must be enabled.
produces:
- application/json
responses:
"200":
description: Configuration reloaded successfully
schema:
additionalProperties: true
type: object
"400":
description: Hot reload not enabled
schema:
additionalProperties: true
type: object
"500":
description: Failed to reload configuration
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Force config reload
tags:
- Settings
/osm/api/settings/status:
get:
description: Returns the current configuration version and hot reload status
produces:
- application/json
responses:
"200":
description: Configuration status
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Get config status
tags:
- Settings
/osm/api/settings/yaml:
get:
description: Returns the entire configuration file with sensitive fields redacted
produces:
- text/yaml
responses:
"200":
description: YAML configuration content
schema:
type: string
"500":
description: Internal server error
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Get YAML configuration
tags:
- Settings
/osm/api/snapshot-download/{workspace_name}:
get:
description: Compress a workspace folder into a zip file and download it
parameters:
- description: Workspace name
in: path
name: workspace_name
required: true
type: string
produces:
- application/zip
responses:
"200":
description: Zip file download
schema:
type: file
"404":
description: Workspace not found
schema:
additionalProperties: true
type: object
"500":
description: Failed to create snapshot
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Download workspace snapshot
tags:
- Snapshots
/osm/api/snapshots:
get:
description: Get a list of available snapshot files in the snapshot directory
produces:
- application/json
responses:
"200":
description: List of snapshots
schema:
additionalProperties: true
type: object
"500":
description: Failed to list snapshots
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: List snapshots
tags:
- Snapshots
/osm/api/snapshots/{name}:
delete:
description: Delete a snapshot file by name
parameters:
- description: Snapshot filename
in: path
name: name
required: true
type: string
produces:
- application/json
responses:
"200":
description: Snapshot deleted
schema:
additionalProperties: true
type: object
"400":
description: Invalid request
schema:
additionalProperties: true
type: object
"404":
description: Snapshot not found
schema:
additionalProperties: true
type: object
"500":
description: Failed to delete snapshot
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Delete snapshot
tags:
- Snapshots
/osm/api/snapshots/export:
post:
consumes:
- application/json
description: Export a workspace to a compressed zip archive and download it
parameters:
- description: Workspace to export
in: body
name: body
required: true
schema:
$ref: '#/definitions/handlers.SnapshotExportRequest'
produces:
- application/zip
responses:
"200":
description: Snapshot zip file
schema:
type: file
"400":
description: Invalid request
schema:
additionalProperties: true
type: object
"404":
description: Workspace not found
schema:
additionalProperties: true
type: object
"500":
description: Failed to create snapshot
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Export workspace snapshot
tags:
- Snapshots
/osm/api/snapshots/import:
post:
consumes:
- multipart/form-data
description: Import a workspace from an uploaded zip file or URL
parameters:
- description: Snapshot zip file to import
in: formData
name: file
type: file
- description: URL of snapshot to download and import
in: formData
name: url
type: string
- description: Overwrite existing workspace if present
in: formData
name: force
type: boolean
- description: Skip database import (files only)
in: formData
name: skip_db
type: boolean
produces:
- application/json
responses:
"200":
description: Import result
schema:
additionalProperties: true
type: object
"400":
description: Invalid request
schema:
additionalProperties: true
type: object
"500":
description: Failed to import snapshot
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Import workspace snapshot
tags:
- Snapshots
/osm/api/stats:
get:
description: Get aggregated counts for workflows, runs, workspaces, assets,
vulnerabilities, and schedules
produces:
- application/json
responses:
"200":
description: System statistics
schema:
$ref: '#/definitions/database.SystemStats'
"500":
description: Failed to get stats
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Get system statistics
tags:
- Stats
/osm/api/step-results:
get:
description: Get a paginated list of step results with optional filtering
parameters:
- description: Filter by workspace name
in: query
name: workspace
type: string
- description: Filter by status (pending, running, completed, failed)
in: query
name: status
type: string
- description: Filter by step type (bash, function, etc.)
in: query
name: step_type
type: string
- description: Filter by run UUID
in: query
name: run_uuid
type: string
- default: 0
description: Number of records to skip
in: query
name: offset
type: integer
- default: 20
description: Maximum number of records to return
in: query
name: limit
type: integer
produces:
- application/json
responses:
"200":
description: List of step results with pagination
schema:
additionalProperties: true
type: object
"500":
description: Failed to fetch step results
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: List step results
tags:
- Steps
/osm/api/tasks:
get:
description: Get a list of all running and completed tasks
produces:
- application/json
responses:
"200":
description: List of running and completed tasks
schema:
additionalProperties: true
type: object
"500":
description: Failed to list tasks
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: List all tasks
tags:
- Distributed
post:
consumes:
- application/json
description: Submit a new task to the distributed worker queue
parameters:
- description: Task configuration
in: body
name: task
required: true
schema:
$ref: '#/definitions/handlers.SubmitTaskRequest'
produces:
- application/json
responses:
"202":
description: Task submitted
schema:
additionalProperties: true
type: object
"400":
description: Invalid request
schema:
additionalProperties: true
type: object
"500":
description: Failed to submit task
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Submit a new task
tags:
- Distributed
/osm/api/tasks/{id}:
get:
description: Get details for a specific task by ID
parameters:
- description: Task ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: Task details
schema:
additionalProperties: true
type: object
"404":
description: Task not found
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Get task details
tags:
- Distributed
/osm/api/upload-file:
post:
consumes:
- multipart/form-data
description: Upload a file containing a list of inputs (targets, URLs, etc.)
for later use in runs
parameters:
- description: Input file to upload
in: formData
name: file
required: true
type: file
produces:
- application/json
responses:
"200":
description: File uploaded with path
schema:
additionalProperties: true
type: object
"400":
description: Invalid request
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Upload input file
tags:
- Files
/osm/api/vulnerabilities:
get:
description: Get a paginated list of vulnerabilities with optional workspace,
severity, and confidence filtering
parameters:
- description: Filter by workspace name
in: query
name: workspace
type: string
- description: Filter by severity (critical, high, medium, low, info)
in: query
name: severity
type: string
- description: Filter by confidence (certain, firm, tentative, manual review
required)
in: query
name: confidence
type: string
- description: Filter by asset value (partial match)
in: query
name: asset_value
type: string
- default: 0
description: Number of records to skip
in: query
name: offset
type: integer
- default: 20
description: Maximum number of records to return
in: query
name: limit
type: integer
produces:
- application/json
responses:
"200":
description: List of vulnerabilities with pagination
schema:
additionalProperties: true
type: object
"500":
description: Failed to fetch vulnerabilities
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: List vulnerabilities
tags:
- Vulnerabilities
post:
consumes:
- application/json
description: Create a new vulnerability record
parameters:
- description: Vulnerability data
in: body
name: vulnerability
required: true
schema:
$ref: '#/definitions/handlers.CreateVulnerabilityInput'
produces:
- application/json
responses:
"201":
description: Created vulnerability
schema:
additionalProperties: true
type: object
"400":
description: Invalid input
schema:
additionalProperties: true
type: object
"500":
description: Failed to create vulnerability
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Create vulnerability
tags:
- Vulnerabilities
/osm/api/vulnerabilities/{id}:
delete:
description: Delete a vulnerability by ID
parameters:
- description: Vulnerability ID
in: path
name: id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: Vulnerability deleted
schema:
additionalProperties: true
type: object
"400":
description: Invalid ID
schema:
additionalProperties: true
type: object
"404":
description: Vulnerability not found
schema:
additionalProperties: true
type: object
"500":
description: Failed to delete vulnerability
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Delete vulnerability
tags:
- Vulnerabilities
get:
description: Get a single vulnerability by its ID
parameters:
- description: Vulnerability ID
in: path
name: id
required: true
type: integer
produces:
- application/json
responses:
"200":
description: Vulnerability details
schema:
additionalProperties: true
type: object
"400":
description: Invalid ID
schema:
additionalProperties: true
type: object
"404":
description: Vulnerability not found
schema:
additionalProperties: true
type: object
"500":
description: Failed to fetch vulnerability
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Get vulnerability by ID
tags:
- Vulnerabilities
/osm/api/vulnerabilities/diff:
get:
description: Compare vulnerabilities between two time points to find added,
removed, and changed vulnerabilities
parameters:
- description: Workspace name
in: query
name: workspace
required: true
type: string
- description: Start time (RFC3339 format or Unix timestamp)
in: query
name: from
required: true
type: string
- description: 'End time (default: now)'
in: query
name: to
type: string
produces:
- application/json
responses:
"200":
description: Vulnerability diff result
schema:
additionalProperties: true
type: object
"400":
description: Invalid parameters
schema:
additionalProperties: true
type: object
"500":
description: Failed to get vulnerability diff
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Get vulnerability diff
tags:
- Vulnerabilities
/osm/api/vulnerabilities/diffs:
get:
description: Get a paginated list of stored vulnerability diff snapshots
parameters:
- description: Filter by workspace name
in: query
name: workspace
type: string
- default: 0
description: Number of records to skip
in: query
name: offset
type: integer
- default: 20
description: Maximum number of records to return
in: query
name: limit
type: integer
produces:
- application/json
responses:
"200":
description: List of vulnerability diff snapshots with pagination
schema:
additionalProperties: true
type: object
"500":
description: Failed to fetch vulnerability diff snapshots
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: List vulnerability diff snapshots
tags:
- Vulnerabilities
/osm/api/vulnerabilities/summary:
get:
description: Get a summary of vulnerabilities grouped by severity
parameters:
- description: Filter by workspace name
in: query
name: workspace
type: string
produces:
- application/json
responses:
"200":
description: Vulnerability summary by severity
schema:
additionalProperties: true
type: object
"500":
description: Failed to get summary
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Get vulnerability summary
tags:
- Vulnerabilities
/osm/api/workers:
get:
description: Get a list of all registered workers in the distributed pool
produces:
- application/json
responses:
"200":
description: List of workers
schema:
additionalProperties: true
type: object
"500":
description: Failed to list workers
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: List all workers
tags:
- Distributed
/osm/api/workers/{id}:
get:
description: Get details for a specific worker by ID
parameters:
- description: Worker ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: Worker details
schema:
additionalProperties: true
type: object
"404":
description: Worker not found
schema:
additionalProperties: true
type: object
"500":
description: Failed to get worker
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Get worker details
tags:
- Distributed
/osm/api/workflow-upload:
post:
consumes:
- multipart/form-data
description: Upload a raw YAML workflow file and save it to the workflows directory
parameters:
- description: Workflow YAML file
in: formData
name: file
required: true
type: file
produces:
- application/json
responses:
"201":
description: Workflow uploaded
schema:
additionalProperties: true
type: object
"400":
description: Invalid request or YAML
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Upload workflow file
tags:
- Workflows
/osm/api/workflows:
get:
description: Get a list of all available workflows with details
produces:
- application/json
responses:
"200":
description: List of workflows
schema:
additionalProperties: true
type: object
"500":
description: Failed to load workflows
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: List all workflows
tags:
- Workflows
/osm/api/workflows/{name}:
get:
description: Get workflow content. Returns raw YAML by default. Use json=true
to get JSON with parsed details.
parameters:
- description: Workflow name
in: path
name: name
required: true
type: string
- description: Return JSON with parsed details instead of raw YAML
in: query
name: json
type: boolean
produces:
- application/json
- text/yaml
responses:
"200":
description: Workflow details (JSON) or raw YAML content
schema:
additionalProperties: true
type: object
"404":
description: Workflow not found
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Get workflow details
tags:
- Workflows
/osm/api/workflows/refresh:
post:
consumes:
- application/json
description: Re-index all workflows from filesystem to database
parameters:
- description: Force re-index all workflows regardless of checksum
in: query
name: force
type: boolean
produces:
- application/json
responses:
"200":
description: Indexing result
schema:
additionalProperties: true
type: object
"500":
description: Indexing failed
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Refresh workflow index
tags:
- Workflows
/osm/api/workflows/tags:
get:
description: Get all unique tags from indexed workflows in database
produces:
- application/json
responses:
"200":
description: List of tags
schema:
additionalProperties: true
type: object
"500":
description: Failed to get tags
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: Get all workflow tags
tags:
- Workflows
/osm/api/workspace-names:
get:
description: Get a sorted list of workspace names from the database
produces:
- application/json
responses:
"200":
description: Workspace names
schema:
items:
type: string
type: array
"500":
description: Failed to list workspace names
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: List workspace names
tags:
- Workspaces
/osm/api/workspaces:
get:
description: Get a list of all run workspaces. By default returns full workspace
records from database. Use filesystem=true to list workspaces derived from
assets.
parameters:
- default: false
description: List workspaces from filesystem/assets instead of workspaces
table
in: query
name: filesystem
type: boolean
- default: 0
description: Number of records to skip
in: query
name: offset
type: integer
- default: 20
description: Maximum number of records to return (max 10000)
in: query
name: limit
type: integer
produces:
- application/json
responses:
"200":
description: List of workspaces
schema:
additionalProperties: true
type: object
"500":
description: Failed to read workspaces
schema:
additionalProperties: true
type: object
security:
- BearerAuth: []
summary: List all workspaces
tags:
- Workspaces
/server-info:
get:
description: Get server version and info in JSON
produces:
- application/json
responses:
"200":
description: Server information
schema:
additionalProperties:
type: string
type: object
summary: Server info JSON
tags:
- Info
swagger: "2.0"