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 |
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.
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 themfa_tokenand the 6-digitcodetoPOST /api/auth/mfa/verifywithin 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.
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-Idheader, or - the
projectquery 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:
{"error": {"code": "not_found", "message": "Integration not found"}}Validation errors add the fields that failed:
{
"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:
{"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/usersGET /api/buildsGET /api/audit-logsGET /api/ci/jobs/{job_id}/runsGET /api/cloud/resources(also returnsfacets)GET /api/notifications/deliveries
Other lists return a plain JSON array.
Examples
List the latest failed builds in a project with an API key:
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:
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:
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.csvEndpoints
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>. |
Related
- Access control explains modules and permission levels.
- Audit logs covers what the API records.
- Environment variables lists
ACCESS_TOKEN_MINUTES,REFRESH_TOKEN_DAYSand the other settings mentioned here.