OpsNexus

REST API

Base URL, authentication, errors, pagination and every endpoint of the OpsNexus REST API, grouped by area.

On this page

Everything the OpsNexus web app does goes through the same REST API. You can call it from scripts, CI jobs and other tools with an API key.

Base URL and live reference

All endpoints live under /api on the address people use to open OpsNexus (PUBLIC_URL), for example https://opsnexus.example.com/api.

Your own server also serves an always up-to-date reference generated from the code:

Path What it is
/api/docs Swagger UI, where you can try requests
/api/redoc ReDoc view of the same schema
/api/openapi.json The OpenAPI schema itself
Note

A few endpoints that only agents or Terraform call are left out of the OpenAPI schema. They are listed in the tables below for completeness.

Authentication

Every endpoint needs a signed-in caller unless the tables below say otherwise. There are two ways to authenticate.

Bearer access token

Sign in with POST /api/auth/login. The body takes identifier (email or username) and password, plus account_id for Account ID sign-in.

bash
curl -s https://opsnexus.example.com/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"identifier": "admin@example.com", "password": "..."}'

The response has one of two shapes:

  • {"tokens": {"access_token": "...", "refresh_token": "...", "token_type": "bearer", "expires_in": 900}} when sign-in is complete.
  • {"mfa_required": true, "mfa_token": "..."} when the account uses MFA. Send the mfa_token and the 6-digit code to POST /api/auth/mfa/verify within 5 minutes to get the tokens.

Send the access token in the Authorization header:

Authorization: Bearer <access_token>

Access tokens last ACCESS_TOKEN_MINUTES (15 by default). Get a new one with POST /api/auth/refresh, passing {"refresh_token": "..."}. Browsers use the onx_refresh httpOnly cookie instead. Sessions last REFRESH_TOKEN_DAYS (7 by default).

API keys (for scripts and CI)

Create a key under Settings → Password, MFA & SSO → API keys, or with POST /api/auth/api-keys (name, expires_in_days from 1 to 365, default 90). You get an access key (onx_ak_...) and a secret key (onx_sk_...). The secret is shown once and stored only as a hash.

Send both in one header, joined by a dot:

X-API-Key: <access_key>.<secret_key>

An API key acts as the user who created it, with that user's permissions. Revoke it with DELETE /api/auth/api-keys/{key_id}. You can also trade a key for a normal session with POST /api/auth/login/api-key.

Warning

Treat the secret key like a password. Store it in your CI system's secret store, never in a repository.

Choosing a project

Most data belongs to a project. Each request works in one project:

  • the X-Project-Id header, or
  • the project query parameter, or
  • your default project when neither is set.

GET /api/auth/me lists the projects you can use. If you belong to no project, project endpoints return 403 with the code no_project.

Permissions

Each endpoint checks a module and a level (read, modify or full), for example cloud: full to approve an infrastructure deployment. When your role is not enough, the API returns 403 with a message naming the access you need. See Access control.

Errors

Every error has the same JSON shape:

json
{"error": {"code": "not_found", "message": "Integration not found"}}

Validation errors add the fields that failed:

json
{
  "error": {
    "code": "validation_error",
    "message": "Some fields are invalid",
    "details": {"fields": [{"field": "name", "message": "Field required"}]}
  }
}
Status Code Meaning
400 bad_request or a specific code The request can't be done as asked. The message says why.
401 unauthorized, token_expired Not signed in, the session ended, or the access token expired.
403 forbidden, no_project, locked, inactive Your role doesn't allow this, or the account can't sign in.
404 not_found The item doesn't exist, or it isn't in your organization or project.
409 conflict A name is already taken, or the item is in a state that blocks the change.
422 validation_error The body or query failed validation.
429 rate_limited Too many attempts. Sign-in allows 10 tries per minute per address and account.
502 integration_error, integration_auth An outside system (Jenkins, a cloud API, Vault…) returned an error.
500 internal_error Unexpected error. Check the api container logs.

Pagination

Large lists return a page object:

json
{"items": [], "total": 0, "page": 1, "page_size": 25}

Use the page (from 1) and page_size query parameters. The maximum page_size is 200 (100 for a job's runs). These endpoints are paged:

  • GET /api/users
  • GET /api/builds
  • GET /api/audit-logs
  • GET /api/ci/jobs/{job_id}/runs
  • GET /api/cloud/resources (also returns facets)
  • GET /api/notifications/deliveries

Other lists return a plain JSON array.

Examples

List the latest failed builds in a project with an API key:

bash
curl -s "https://opsnexus.example.com/api/builds?status=failed&page_size=10" \
  -H "X-API-Key: $ONX_ACCESS_KEY.$ONX_SECRET_KEY" \
  -H "X-Project-Id: $ONX_PROJECT_ID"

Start a run of an OpsNexus pipeline on a branch, with parameters:

bash
curl -s -X POST "https://opsnexus.example.com/api/ci/jobs/$JOB_ID/build" \
  -H "X-API-Key: $ONX_ACCESS_KEY.$ONX_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"branch": "main", "params": {"ENV": "staging"}}'

Download the audit log as CSV for the last week:

bash
curl -s "https://opsnexus.example.com/api/audit-logs/export.csv?since=2026-11-01T00:00:00Z" \
  -H "Authorization: Bearer $ONX_TOKEN" -o audit-logs.csv

Endpoints

Paths below are relative to the host. Methods follow REST conventions: GET reads, POST creates or runs an action, PUT replaces, PATCH changes some fields, DELETE removes.

Authentication and sessions

Method Path What it does
POST /api/auth/login Sign in with email or username (or Account ID + username) and password. No auth needed.
POST /api/auth/login/api-key Exchange an access key and secret for a session. No auth needed.
POST /api/auth/mfa/verify Finish sign-in with an MFA code. No auth needed.
POST /api/auth/refresh New access token from the session cookie or a refresh token.
POST /api/auth/logout End this browser's session.
GET /api/auth/me The signed-in user, organization, permissions and projects.
PATCH /api/auth/me/preferences Save personal preferences such as theme.
POST /api/auth/password Change your password.
POST /api/auth/mfa/setup Start MFA setup. Returns the secret, otpauth URI and a QR code (qr_svg).
POST /api/auth/mfa/enable Turn MFA on with a code from the app.
POST /api/auth/mfa/disable Turn MFA off (refused when the organization requires MFA).
GET /api/auth/api-keys Your API keys.
POST /api/auth/api-keys Create an API key. The secret is returned once.
DELETE /api/auth/api-keys/{key_id} Revoke an API key.
GET /api/auth/sso/providers Which SSO providers are set up. No auth needed.
GET /api/auth/sso/{provider}/start Start Google or Microsoft sign-in (browser redirect).
GET /api/auth/sso/{provider}/callback Where the SSO provider sends the browser back.

Profile

Method Path What it does
GET /api/profile Your profile.
PATCH /api/profile Update your profile fields.
PUT /api/profile/avatar Upload your avatar.
DELETE /api/profile/avatar Remove your avatar.
GET /api/profile/sessions Your active sessions.
DELETE /api/profile/sessions/{session_id} Sign out one session.
GET /api/avatars/{user_id}/{version} A user's avatar image.

Access control

Method Path What it does
GET /api/users Users of the organization (paged, q to search).
POST /api/users Add a user.
PATCH /api/users/{user_id} Change a user's name, role or status, or unlock the account.
DELETE /api/users/{user_id} Remove a user.
GET /api/users/{user_id}/logins A user's sign-in history.
GET /api/roles/modules Modules and levels that roles can grant.
GET /api/roles Roles.
POST /api/roles Create a role.
PUT /api/roles/{role_id} Change a role.
DELETE /api/roles/{role_id} Delete a role.
GET /api/teams Teams and groups.
POST /api/teams Create a team.
PUT /api/teams/{team_id} Change a team and its members.
DELETE /api/teams/{team_id} Delete a team.

Projects

Method Path What it does
GET /api/projects Projects you can see, with counts.
POST /api/projects Create a project.
GET /api/projects/sharing Which kinds of items may be shared with all projects.
PUT /api/projects/sharing Allow or stop sharing for agents, secrets and variables, notifications and plugins.
GET /api/projects/people Everyone's project access, for the user manager.
GET /api/projects/users/{user_id} One user's access in every project.
PUT /api/projects/users/{user_id} Set one user's access in every project.
GET /api/projects/{project_id} One project.
PATCH /api/projects/{project_id} Rename or describe a project.
DELETE /api/projects/{project_id} Delete a project (organization admins; Default can't be deleted).
GET /api/projects/{project_id}/members Members and their project roles.
GET /api/projects/{project_id}/candidates People and teams that can be added.
POST /api/projects/{project_id}/members Add a person or team with a role (or custom permissions).
PATCH /api/projects/{project_id}/members/{member_id} Change a member's role.
DELETE /api/projects/{project_id}/members/{member_id} Remove a member.

Organization and settings

Method Path What it does
GET /api/organization Organization details.
PATCH /api/organization Change organization details.
GET /api/settings/password-policy Password, lockout and MFA policy.
PUT /api/settings/password-policy Change the policy.
GET /api/settings/theme Organization default theme.
PUT /api/settings/theme Change the default theme.
GET /api/settings/health Health of the database, cache and secret store (System status page).
GET /api/search Search everything you can see (q, limit).

Integrations (external CI/CD tools)

Method Path What it does
GET /api/integrations/types Supported tools and the fields each one needs.
GET /api/integrations Connected tools.
POST /api/integrations/test Test connection details before saving.
POST /api/integrations Connect a tool.
GET /api/integrations/{integration_id} One integration.
PATCH /api/integrations/{integration_id} Change settings, including whether write actions are allowed.
DELETE /api/integrations/{integration_id} Disconnect a tool.
POST /api/integrations/{integration_id}/test Test a saved integration.
POST /api/integrations/{integration_id}/sync Sync pipelines and builds now.
GET /api/integrations/{integration_id}/runs Sync history with logs.

Pipelines and builds (all tools)

Method Path What it does
GET /api/pipelines Pipelines from every tool, in one list.
GET /api/pipelines/stats Counts and success rates.
GET /api/pipelines/{pipeline_id} One pipeline with recent builds.
GET /api/builds Builds from every tool (paged; filter by pipeline_id, platform, status, branch).
POST /api/pipelines/{pipeline_id}/trigger Start a build, optionally on a branch.
POST /api/builds/{build_id}/cancel Cancel a build.

OpsNexus pipelines

Method Path What it does
GET /api/ci/meta Job types, agents, labels and credentials for the editor.
GET /api/ci/overview CI/CD overview numbers.
POST /api/ci/validate Check a pipeline file.
POST /api/ci/scm/verify Check a repository, branch, credential and pipeline file before saving.
POST /api/ci/cron/preview Show the next times a schedule fires.
GET /api/ci/jobs Jobs and folders.
POST /api/ci/jobs Create a job.
GET /api/ci/jobs/{job_id} One job.
PUT /api/ci/jobs/{job_id} Change a job.
DELETE /api/ci/jobs/{job_id} Delete a job.
POST /api/ci/jobs/{job_id}/build Start a run (branch, params).
POST /api/ci/jobs/{job_id}/scan Scan a multibranch or organization folder now.
POST /api/ci/jobs/{job_id}/webhook/rotate Issue a new webhook URL for the job.
GET /api/ci/jobs/{job_id}/runs A job's runs (paged).
GET /api/ci/runs/{run_id} One run with stages and steps.
GET /api/ci/runs/{run_id}/log The run's console output.
GET /api/ci/runs/{run_id}/log.txt The console output as plain text.
POST /api/ci/runs/{run_id}/cancel Stop a queued, running or waiting run.
POST /api/ci/runs/{run_id}/approve Approve or reject a waiting approval stage (stage, approve, comment).
POST /api/ci/runs/{run_id}/replay Run again with the same inputs.
GET /api/ci/runs/{run_id}/artifacts Files archived by a run.
GET /api/ci/artifacts Build artifacts across pipelines (filter by pipeline, type, name).
GET /api/ci/artifacts/{artifact_id}/download Download an artifact (?inline=true to view).
DELETE /api/ci/artifacts/{artifact_id} Delete an artifact.
POST /api/ci/hooks/{token} Push webhook from GitHub or GitLab, or a remote trigger. Authenticated by the token in the URL.

The runner endpoints are called by build agents with their agent ID and secret, not by users:

Method Path What it does
POST /api/ci/runner/claim Agent asks for the next run it can build.
POST /api/ci/runner/runs/{run_id}/plan Agent reports the run's plan.
POST /api/ci/runner/runs/{run_id}/events Agent streams log lines and step results.
POST /api/ci/runner/runs/{run_id}/finish Agent reports the end of the run.
POST /api/ci/runner/runs/{run_id}/artifacts Agent uploads one archived file (?path=).

Pipeline plugins

Method Path What it does
GET /api/plugins Installed plugins.
GET /api/plugins/catalog Built-in plugins you can install.
GET /api/plugins/starter A starter manifest for a custom plugin.
POST /api/plugins/validate Check a plugin manifest.
POST /api/plugins/install/{name} Install a built-in plugin.
POST /api/plugins Create a custom plugin.
POST /api/plugins/{name}/versions Publish a new version.
GET /api/plugins/{name} One plugin.
GET /api/plugins/{name}/versions/{version} One version.
GET /api/plugins/{name}/export Download the manifest.
PATCH /api/plugins/{name} Change plugin settings.
DELETE /api/plugins/{name} Remove a plugin.

Build agents

Method Path What it does
POST /api/agents/tokens Create a single-use registration token (expires_in_hours, default 24, up to 168; shared for all projects).
GET /api/agents/install-info The address agents use (AGENT_URL or PUBLIC_URL) and whether it's local-only.
GET /api/agents/download/{os_name} Installer script for Linux, macOS or Windows.
GET /api/agents/download/docker.tar.gz Build context for the agent Docker image.
GET /api/agents Agents.
GET /api/agents/summary Counts by status.
GET /api/agents/{agent_id} One agent.
GET /api/agents/{agent_id}/metrics CPU, memory, disk and network over time.
GET /api/agents/{agent_id}/build-stats Builds run by this agent.
POST /api/agents/{agent_id}/actions Enable, disable, maintenance on or off, restart or upgrade.
PUT /api/agents/{agent_id}/build-config Change executors and labels.
DELETE /api/agents/{agent_id} Unregister an agent. Its secret stops working at once.
POST /api/agents/register Called by the installer with a registration token.
POST /api/agents/heartbeat Called by the agent every 15 seconds with its agent ID and secret.

Secrets and variables

Method Path What it does
GET /api/secrets/kinds Credential types and their fields.
GET /api/secrets Secrets (names and metadata, never values).
POST /api/secrets Create a secret.
POST /api/secrets/{secret_id}/rotate Store a new value.
PATCH /api/secrets/{secret_id} Change a secret's details.
GET /api/secrets/{secret_id}/usage Where a secret is used.
POST /api/secrets/{secret_id}/reveal Show the value (recorded in the audit log).
DELETE /api/secrets/{secret_id} Delete a secret.
GET /api/variables Variables.
PUT /api/variables Create or change a variable.
DELETE /api/variables/{variable_id} Delete a variable.

Cloud accounts, resources and cost

Method Path What it does
GET /api/cloud/providers AWS, Azure, Google Cloud and Oracle, with the fields each sign-in method needs.
GET /api/cloud/accounts Connected cloud accounts.
POST /api/cloud/accounts Connect an account.
POST /api/cloud/accounts/{account_id}/sync Sync inventory and cost now.
DELETE /api/cloud/accounts/{account_id} Remove an account.
GET /api/cloud/resources Resources (paged, with facets).
GET /api/cloud/kubernetes Managed Kubernetes clusters found in cloud accounts.
GET /api/cloud/vpcs Cost by VPC.
GET /api/cloud/vpcs/{vpc_id} One VPC: resources, connections and cost.
GET /api/cloud/summary Dashboard numbers: month to date, last month, forecast, credits.
GET /api/cloud/costs Daily cost, grouped.
GET /api/cloud/cost-report Cost report as PDF or Excel (days up to 90, format=pdf or xlsx).
GET /api/cloud/recommendations Savings and hygiene suggestions.
GET /api/cloud/budgets Budgets with spend and forecast.
POST /api/cloud/budgets Create a monthly budget.
DELETE /api/cloud/budgets/{budget_id} Delete a budget.

Infra designer

Method Path What it does
GET /api/infra/catalog Resource types, fields, regions and templates.
GET /api/infra/stacks Stacks in the project.
POST /api/infra/stacks Create a stack, blank or from a template.
GET /api/infra/stacks/{stack_id} A stack with its spec and problems.
PUT /api/infra/stacks/{stack_id} Save a stack (validates and returns problems).
DELETE /api/infra/stacks/{stack_id} Delete a stack.
POST /api/infra/validate Validate a spec without saving.
GET /api/infra/stacks/{stack_id}/terraform Preview the generated Terraform files.
GET /api/infra/stacks/{stack_id}/export.zip Download the Terraform and JSON as a zip.
GET /api/infra/stacks/{stack_id}/spec.json Download the JSON spec.
GET /api/infra/stacks/{stack_id}/diagram The architecture diagram as groups, nodes and edges.
GET /api/infra/aws/options Live, read-only AWS lookups: zones, instance types, engine versions.
GET /api/infra/aws/rds-classes RDS instance classes from your account.
POST /api/infra/stacks/{stack_id}/key-pairs/{resource_id}/generate Generate an EC2 key pair.
GET /api/infra/stacks/{stack_id}/key-pairs Key pairs of the stack.
GET /api/infra/stacks/{stack_id}/key-pairs/{resource_id}/private-key Download a generated private key (.pem).
GET /api/infra/deploy-credentials AWS access key credentials usable for deploys.
POST /api/infra/stacks/{stack_id}/runs Start a plan, deploy or destroy.
GET /api/infra/stacks/{stack_id}/runs Deployment history.
GET /api/infra/runs/{run_id} One deployment with its plan and outputs.
POST /api/infra/runs/{run_id}/approve Approve the plan (needs cloud: full).
POST /api/infra/runs/{run_id}/reject Reject the plan.
POST /api/infra/runs/{run_id}/cancel Cancel a deployment.
GET /api/infra/stacks/{stack_id}/state Terraform state versions and lock.
GET /api/infra/stacks/{stack_id}/state.json Download the current state (admins).
POST /api/infra/stacks/{stack_id}/state/unlock Force-unlock the state (admins).
POST /api/infra/stacks/{stack_id}/permission-check Simulate the credential's IAM permissions for this stack.
GET /api/infra/stacks/{stack_id}/permission-policy A ready IAM policy with the permissions the stack needs.
GET /api/infra/stacks/{stack_id}/connect SSH, RDP, Session Manager and Instance Connect commands per instance.
POST /api/infra/stacks/{stack_id}/connect/{resource_id}/windows-password Decrypt a Windows instance's password.

Called by the deployment pipeline with a one-time run token, not by users:

Method Path What it does
GET /api/infra/runs/{run_id}/bundle.zip The frozen Terraform bundle for a run.
POST /api/infra/runs/{run_id}/plan Upload the plan.
POST /api/infra/runs/{run_id}/outputs Upload outputs after apply.
GET, POST, DELETE /api/infra/state/{stack_id} Terraform HTTP backend: read, write and delete state.
POST or LOCK /api/infra/state/{stack_id}/lock Terraform HTTP backend: lock state.
POST or UNLOCK /api/infra/state/{stack_id}/unlock Terraform HTTP backend: unlock state.

Kubernetes

Method Path What it does
GET /api/k8s/clusters Connected clusters with a health summary.
GET /api/k8s/setup Help for connecting: discovered EKS clusters, AWS accounts and a read-only service-account script.
POST /api/k8s/clusters Connect a cluster.
GET /api/k8s/clusters/{cluster_id} A cluster with its latest snapshot.
GET /api/k8s/clusters/{cluster_id}/history Availability, pods and CPU and memory over time.
POST /api/k8s/clusters/{cluster_id}/sync Refresh now (EKS and token clusters).
PATCH /api/k8s/clusters/{cluster_id} Change cluster settings.
POST /api/k8s/clusters/{cluster_id}/agent-manifest Issue a new in-cluster agent token and manifest. The old token stops working.
DELETE /api/k8s/clusters/{cluster_id} Remove a cluster.
POST /api/k8s/agent/push Called by the in-cluster agent to send snapshots.

Servers, SSH and Remote Desktop

Method Path What it does
GET /api/remote/hosts Servers.
POST /api/remote/hosts Add a server (protocol is ssh or rdp).
GET /api/remote/hosts/{host_id} One server.
PATCH /api/remote/hosts/{host_id} Change a server.
DELETE /api/remote/hosts/{host_id} Delete a server.
POST /api/remote/hosts/{host_id}/test Test the connection and sign-in.
POST /api/remote/hosts/{host_id}/reset-host-key Forget the pinned SSH host key.
POST /api/remote/hosts/{host_id}/sessions Open a session. Returns a single-use ticket valid for 60 seconds.
GET /api/remote/sessions Open and past sessions.
POST /api/remote/sessions/{session_id}/terminate End a session.
WebSocket /api/ws/terminal/{ticket} The terminal or desktop stream. Authenticated by the ticket.

Monitoring, alerts and notifications

Method Path What it does
GET /api/monitoring/metrics Metrics alert rules can watch.
GET /api/monitoring/summary Monitoring overview.
GET /api/alert-rules Alert rules.
GET /api/alert-rules/recommended Recommended rules.
POST /api/alert-rules/recommended Add the recommended rules.
POST /api/alert-rules Create a rule.
PUT /api/alert-rules/{rule_id} Change a rule.
DELETE /api/alert-rules/{rule_id} Delete a rule.
POST /api/alert-rules/evaluate Evaluate the rules now.
GET /api/alerts Alerts.
POST /api/alerts/{alert_id}/ack Acknowledge an alert.
POST /api/alerts/{alert_id}/resolve Resolve an alert.
GET /api/notifications/catalog Channel types and events.
GET /api/notifications/channels Channels.
POST /api/notifications/channels Create a channel.
PATCH /api/notifications/channels/{channel_id} Change a channel.
DELETE /api/notifications/channels/{channel_id} Delete a channel.
POST /api/notifications/channels/{channel_id}/test Send a test message.
GET /api/notifications/rules Notification rules.
POST /api/notifications/rules Create a rule.
PUT /api/notifications/rules/{rule_id} Change a rule.
DELETE /api/notifications/rules/{rule_id} Delete a rule.
GET /api/notifications/digests Summaries.
POST /api/notifications/digests Create a summary.
PUT /api/notifications/digests/{digest_id} Change a summary.
DELETE /api/notifications/digests/{digest_id} Delete a summary.
POST /api/notifications/digests/{digest_id}/send Send a summary now.
GET /api/notifications/deliveries Delivery history (paged).
POST /api/notifications/deliveries/{delivery_id}/ack Acknowledge a delivery.
POST /api/notifications/deliveries/{delivery_id}/retry Retry a failed delivery.

Domains, SEO and traffic

Method Path What it does
GET /api/domains Domains.
POST /api/domains Add a domain.
GET /api/domains/{domain_id} One domain.
PATCH /api/domains/{domain_id} Change a domain.
DELETE /api/domains/{domain_id} Delete a domain.
POST /api/domains/{domain_id}/check Check the domain now.
GET /api/domains/{domain_id}/checks Check history.
POST /api/domains/{domain_id}/seo Run an SEO report.
GET /api/domains/{domain_id}/seo SEO reports.
GET /api/domains/{domain_id}/traffic/source Where traffic data comes from.
PUT /api/domains/{domain_id}/traffic/source Use Cloudflare analytics or the tracking snippet.
GET /api/domains/{domain_id}/traffic Visitors, countries, devices, sources and pages.
GET /api/t/script.js The tracking snippet. No auth needed.
POST /api/t/collect Page views sent by the snippet. No auth needed.

Artifacts, registries, marketplace and security

Method Path What it does
GET /api/artifacts/registry-types Supported container registries.
GET /api/artifacts/summary Totals for the Artifacts page.
GET /api/registries Connected registries.
POST /api/registries Connect a registry.
PATCH /api/registries/{registry_id} Change a registry.
PUT /api/registries/{registry_id}/settings Change name and connection fields, then sync.
DELETE /api/registries/{registry_id} Remove a registry.
POST /api/registries/{registry_id}/sync Sync now.
GET /api/registries/{registry_id}/repositories Repositories.
GET /api/repositories/{repository_id}/tags Tags of a repository.
DELETE /api/tags/{tag_id} Delete a tag.
GET /api/retention-policies Cleanup policies.
POST /api/retention-policies Create a policy.
DELETE /api/retention-policies/{policy_id} Delete a policy.
GET /api/retention-policies/{policy_id}/preview Tags the policy would delete (dry run).
POST /api/retention-policies/{policy_id}/apply Delete the tags the policy selects.
GET /api/dockerhub/search Search Docker Hub.
GET /api/dockerhub/tags Tags of a Docker Hub image.
GET /api/marketplace/tools Tools you can deploy.
GET /api/marketplace/tools/{key}/versions Versions of a tool.
GET /api/marketplace/hub/search Search every public image on Docker Hub.
GET /api/marketplace/images Images in your connected registries.
POST /api/marketplace/image-versions Tags of an image.
POST /api/marketplace/checks Run the pre-deploy checks without deploying.
POST /api/marketplace/compose Get a docker-compose.yml for a Docker host.
GET /api/deploy-targets Deploy targets.
POST /api/deploy-targets Add a target.
POST /api/deploy-targets/{target_id}/test Test a target.
DELETE /api/deploy-targets/{target_id} Remove a target.
GET /api/deployments Deployments.
POST /api/deployments Deploy a tool or image.
GET /api/deployments/{deployment_id} One deployment.
GET /api/deployments/{deployment_id}/logs Deployment logs.
POST /api/deployments/{deployment_id}/upgrade Upgrade, or roll back to a revision.
DELETE /api/deployments/{deployment_id} Uninstall.
POST /api/security/scans Upload a scanner report (use an API key from CI).
GET /api/security/scans Uploaded scans.
GET /api/security/summary Findings by severity.
GET /api/security/findings Findings, with facets.
PATCH /api/security/findings/{finding_id} Accept the risk, mark a false positive, or re-open.
GET /api/security/sonarqube SonarQube connections.
POST /api/security/sonarqube Connect SonarQube.
POST /api/security/sonarqube/{connection_id}/sync Sync SonarQube now.
DELETE /api/security/sonarqube/{connection_id} Remove a SonarQube connection.

Dashboards and reports

Method Path What it does
GET /api/dashboards/catalog Widgets you can add.
GET /api/dashboards Dashboards.
POST /api/dashboards Create a dashboard.
POST /api/dashboards/validate Check a dashboard definition.
GET /api/dashboards/data Data for a widget.
GET /api/dashboards/{dashboard_id} One dashboard.
PUT /api/dashboards/{dashboard_id} Change a dashboard.
POST /api/dashboards/{dashboard_id}/duplicate Copy a dashboard.
POST /api/dashboards/{dashboard_id}/default Make it your default.
DELETE /api/dashboards/{dashboard_id} Delete a dashboard.
GET /api/reports/catalog Report types.
POST /api/reports/generate Generate a report now.
GET /api/reports/runs Generated reports.
GET /api/reports/runs/{run_id}/download Download a report.
GET /api/reports/schedules Report schedules.
POST /api/reports/schedules Create a schedule.
PUT /api/reports/schedules/{schedule_id} Change a schedule.
DELETE /api/reports/schedules/{schedule_id} Delete a schedule.
POST /api/reports/schedules/{schedule_id}/run Run a schedule now.
GET /api/report-plugins PDF report plugins, styles and this project's saved layouts.
POST /api/report-plugins/layouts Save a report layout.
PUT /api/report-plugins/layouts/{layout_id} Change a layout.
DELETE /api/report-plugins/layouts/{layout_id} Delete a layout.
POST /api/report-plugins/{key}/render Render a report plugin as PDF.

Backup, VS Code and system

Method Path What it does
GET /api/backups/config Backup schedule, retention and remote copies.
PUT /api/backups/config Change backup settings.
GET /api/backups Backups.
POST /api/backups Back up now.
GET /api/backups/{backup_id}/download Download a backup file.
POST /api/backups/restore Restore from an uploaded backup file.
POST /api/backups/{backup_id}/restore Restore a backup kept on the server.
GET /api/vscode/info VS Code extension version and setup details.
GET /api/vscode/opsnexus.vsix Download the VS Code extension.
GET /api/audit-logs Audit log (paged; filter by category, q, result, since).
GET /api/audit-logs/export.csv Audit log as CSV, including each entry's hash.
GET /api/overview Numbers for the home dashboard.
GET /api/health/live Liveness check. No auth needed.
GET /api/health/ready Readiness check: database and Redis answer. No auth needed.
WebSocket /api/ws Live events (agent heartbeats, sync results) for the browser. Auth: ?token=<access token>.