Skip to main content

API Endpoints

Complete reference for the Proxima Console REST API.

Infrastructure (no auth)​

MethodPathDescription
GET/healthzLiveness check
GET/readyzReadiness check (DB + NATS)
GET/metricsPrometheus metrics

Setup Status​

MethodPathDescription
GET/api/v1/setup/statusCheck initial setup completion status (public, no auth)

Clients​

MethodPathDescription
GET/api/v1/clientsList clients
POST/api/v1/clientsCreate client
GET/api/v1/clients/:idGet client
PUT/api/v1/clients/:idUpdate client
DELETE/api/v1/clients/:idDelete client
GET/api/v1/clients/:id/environmentsList environments for client
GET/api/v1/clients/:id/hostsList hosts for a client
GET/api/v1/clients/:id/integrationsList integrations detected on the client's hosts
GET/api/v1/clients/:id/install-tokensList install tokens
POST/api/v1/clients/:id/install-tokensCreate install token. Single-use by default — omitting max_uses stores 1, so one leaked token enrolls at most one agent. Pass max_uses: n (n≥1) to bound it, or max_uses: 0 to opt into unlimited. Negative is 400.
DELETE/api/v1/clients/:id/install-tokens/:tokenIDDelete install token
GET/api/v1/clients/:id/notification-settingsGet client notification settings
PUT/api/v1/clients/:id/notification-settingsUpdate client notification settings
GET/api/v1/clients/:id/retention-settingsGet client change-retention overrides (admin)
PUT/api/v1/clients/:id/retention-settingsUpdate client change-retention overrides (admin)
PUT/api/v1/clients/:id/covering-teamAssign the client's escalation covering team
DELETE/api/v1/clients/:id/covering-teamClear the client's escalation covering team
GET/api/v1/clients/:id/llm-usageGet the client's LLM usage and spend
GET/api/v1/clients/:id/healthcheck/scoreGet the client's healthcheck score

Environments​

MethodPathDescription
POST/api/v1/clients/:id/environmentsCreate environment for client
GET/api/v1/environments/:envIdGet environment
PUT/api/v1/environments/:envIdUpdate environment
DELETE/api/v1/environments/:envIdDelete environment
GET/api/v1/environments/:id/hostsList hosts in environment
GET/api/v1/environments/:envID/healthcheck/scoreGet the environment's healthcheck score
GET/api/v1/environments/:envID/inventory/exportExport the environment's inventory
GET/api/v1/environments/:envID/log-source-statusList log-source status for the environment's hosts

Assets (CMDB)​

MethodPathDescription
GET/api/v1/assetsList all assets (paginated, filterable by type/status/search)
GET/api/v1/assets/summaryAsset counts grouped by type and status
GET/api/v1/assets/:idGet single asset
GET/api/v1/clients/:id/assetsList assets for a client
GET/api/v1/environments/:id/assetsList assets for an environment

All asset endpoints require assets:read permission and are scoped to the caller's allowed clients. See Assets & CMDB for full documentation.

Clusters (K8s Inventory)​

MethodPathDescription
GET/api/v1/clustersList all clusters (paginated, filterable by client/environment/status/search; ?include=capacity adds capacity, pods_not_running, warning_events_1h)
GET/api/v1/clusters/:clusterIDGet single cluster with full details
GET/api/v1/clusters/:clusterID/summaryCluster health digest from the inventory: node/pod counts, waiting reasons, pending pods, restarters, workloads not ready, capacity (assets:read)
GET/api/v1/clusters/:clusterID/metrics/:queryOne of ten allow-listed cluster metric queries (cpu_by_node, memory_by_namespace, restarts, pods_by_phase, cpu_by_workload, cpu_by_namespace, cpu_by_pod, memory_by_pod, restarts_by_workload, replicas); start, end, namespace, workload, workload_kind, instant (metrics:read)
GET/api/v1/cloud-resources/:resourceID/metrics/:nameOne allow-listed metric of a Hetzner Cloud load balancer (hcloud_lb_*) or of a Hetzner Cloud server with no Console agent (hcloud_server_*), in the host metrics shape; resourceID is the topology node's cloud.resource_id; start, end (metrics:read on the resource's pull source: its environment when pinned, the whole project when not)
GET/api/v1/clusters/:clusterID/nodesList nodes in a cluster (with host linkage)
GET/api/v1/clusters/:clusterID/nodes/capacityEvery node (up to 1,000) with allocatable, requested, limits and used CPU/memory, pods, status; truncated and total (assets:read)
GET/api/v1/clusters/:clusterID/nodes/:nodeIDOne node of the cluster; another cluster's node is 404 (assets:read)
GET/api/v1/clusters/:clusterID/namespacesList namespaces in a cluster
GET/api/v1/clusters/:clusterID/namespaces/usageEvery namespace with requested/limits CPU and memory, pods, restarts, workload count (assets:read)
GET/api/v1/clusters/:clusterID/workloadsList workloads in a cluster (filterable by namespace/kind)
GET/api/v1/clusters/:clusterID/workloads/:workloadIDOne workload of the cluster; another cluster's workload is 404 (assets:read)
GET/api/v1/clusters/:clusterID/podsList pods in a cluster (filterable by namespace, phase)
GET/api/v1/clusters/:clusterID/nodes/:nodeID/podsList pods on a specific node
GET/api/v1/clusters/:clusterID/workloads/:workloadID/podsList pods for a specific workload
GET/api/v1/clusters/:clusterID/servicesList services in a cluster (filterable by namespace)
GET/api/v1/clusters/:clusterID/ingressesList ingresses in a cluster (filterable by namespace)
GET/api/v1/clusters/:clusterID/pvcsList PVCs in a cluster (filterable by namespace, phase)
GET/api/v1/clusters/:clusterID/eventsList K8s events in a cluster (filterable by type: Normal/Warning)
GET/api/v1/clusters/:clusterID/jobsList jobs/cronjobs in a cluster (filterable by namespace, kind)
GET/api/v1/clusters/:clusterID/hpasList HPAs in a cluster (filterable by namespace)
GET/api/v1/clusters/:clusterID/network-policiesList network policies in a cluster (filterable by namespace)
GET/api/v1/clusters/:clusterID/resource-quotasList resource quotas in a cluster (filterable by namespace)
GET/api/v1/clusters/:clusterID/endpoint-slicesList endpoint slices in a cluster (filterable by namespace)
GET/api/v1/clusters/:clusterID/live/manifestOne object (kind, namespace, name) read live through the cluster agent, redacted in the agent; ConfigMaps and Secrets refused. Cluster agent v0.8.0+ (409 agent_too_old), 60 reads a minute per user shared with revisions
GET/api/v1/clusters/:clusterID/live/revisionsA workload's newest 20 revisions with redacted pod templates, read live. Cluster agent v0.8.0+
GET/api/v1/clusters/:clusterID/live/logsOne container's recent output read live from the pod, secret-sanitized, never stored (namespace, pod, container, tail ≤ 300, previous, since_time). Needs logs:read, not assets:read; 30 reads a minute per user
GET/api/v1/clusters/:clusterID/events/timelineKubernetes events from the 14-day VictoriaLogs copy, newest first; validated exact-match filters (namespace, involved_kind, involved_name, workload + workload_kind, type, reason), window ≤ 14 days, limit ≤ 1000; 60 reads a minute per user
GET/api/v1/clusters/:clusterID/changes"What changed?" timeline for the cluster, a namespace or a workload: recorded changes, ArgoCD deploys, Kubernetes events and alerts in one list, newest first; namespace, workload, kind, from, to (window ≤ 30 days). Each source needs its own permission (changes:read, alerts:read, assets:read); a missing one empties that source, holding none is 403
GET/api/v1/clusters/:clusterID/argocd/applicationsArgoCD Applications reported by this cluster's agent or mapped to it (same client only), each with its destination mapping, sync/health and revisions; report.state and notes explain unknown data (agent_too_old, crd_absent, forbidden, …). assets:read on the cluster's environment; rows naming another cluster the caller cannot read are hidden
GET/api/v1/clusters/:clusterID/workloads/:workloadID/driftArgoCD drift of one workload: the Applications mapped to this cluster that manage it (group/kind/namespace/name), with the workload's own sync and health. assets:read; the workload must belong to the cluster
GET/api/v1/clients/:id/clustersList clusters for a client
GET/api/v1/environments/:envID/clustersList clusters for an environment

All cluster endpoints require assets:read permission unless noted, and are scoped to the caller's allowed clients. See Kubernetes Inventory for full documentation.

Cluster Onboarding​

MethodPathDescription
POST/api/v1/clients/:id/cluster-onboardingRecord the intent to onboard a cluster and mint the install token the collector enrolls with (24h, max_uses unlimited so every StatefulSet replica can enroll, pinned to one environment). Idempotent per (environment_id, cluster_slug): a second call resumes the attempt and returns it without a new token. hosts:write on the client and the environment
GET/api/v1/clients/:id/cluster-onboardingList the client's attempts that are neither abandoned nor finished. hosts:read; an environment-scoped caller sees only attempts in environments it may read
GET/api/v1/cluster-onboarding/:onboardingID/statusRecompute both tracks and return every gate with its verdict and its sentence. Always recomputed; the stored last_status is a list-view cache, never the authority. hosts:read on the attempt's client
POST/api/v1/cluster-onboarding/:onboardingID/probeSend one GET /version through the cluster's agent, impersonating the caller with the groups their roles' kube_specs resolve for this cluster, and record the outcome. Fixed path, 5s timeout, one probe per 15s per attempt (429), single-flighted (409), 404 until the cluster has appeared in Console. kubernetes:read on the cluster's client and environment
DELETE/api/v1/cluster-onboarding/:onboardingIDMark the attempt abandoned so it leaves the open-attempts list. Never deletes or unlinks the cluster, its inventory or its agent. hosts:write on the attempt's client and environment

There is no clusters:* permission; onboarding borrows hosts:* for its own records and kubernetes:read for the one call that reaches into a cluster. See Cluster Onboarding for the tracks, the gate states and what the round-trip proves.

Databases (CMDB)​

MethodPathDescription
GET/api/v1/database-clustersList database clusters (filterable by client/environment/engine/status/search)
GET/api/v1/database-clusters/:databaseClusterIDGet single database cluster
GET/api/v1/databasesList databases (filterable by client/environment/cluster/host/engine/role/status/search)
GET/api/v1/databases/:databaseIDGet single database instance

All database endpoints require assets:read permission and are scoped to the caller's allowed clients. See Database Inventory for full documentation.

Hosts​

MethodPathDescription
GET/api/v1/hostsList all hosts (paginated, client-scoped)
GET/api/v1/hosts/:idGet host details
DELETE/api/v1/hosts/:idDelete host
GET/api/v1/hosts/:id/servicesList services
GET/api/v1/hosts/:id/packagesList packages
GET/api/v1/hosts/:id/portsList open ports
GET/api/v1/hosts/:id/interfacesList network interfaces
GET/api/v1/hosts/:id/usersList users
GET/api/v1/hosts/:id/hardwareGet hardware details (CPUs, disks, filesystems, firewall rules, kernel modules, certificates)
GET/api/v1/hosts/:id/securityGet security posture (firewall, SELinux, AppArmor, etc.)
GET/api/v1/hosts/:id/cron-jobsList cron jobs
GET/api/v1/hosts/:id/gpu-devicesList GPU devices
GET/api/v1/hosts/:id/containersList Docker containers
GET/api/v1/hosts/:id/containers/metrics/latestLatest metrics for all containers on a host
GET/api/v1/hosts/:id/containers/:containerID/metricsPer-container metric history (CPU, memory, network, block I/O)
GET/api/v1/hosts/:id/processesList running processes (CPU-descending)
GET/api/v1/hosts/:id/processes/:pid/metricsPer-process metric history (CPU, memory, RSS, threads)
GET/api/v1/hosts/exportExport the host inventory (all hosts in scope)
POST/api/v1/hosts/exportExport a selected subset of hosts

Host Lifecycle​

MethodPathDescription
POST/api/v1/hosts/:id/deactivateDeactivate host (marks offline, revokes NATS credentials)
POST/api/v1/hosts/:id/activateRe-activate a deactivated host
POST/api/v1/hosts/:id/revokeRevoke host NATS credentials (force disconnect)

Entity Tags​

User-defined key=value tags on entities. Currently supports hosts; extensible to other entity types.

MethodPathDescription
GET/api/v1/hosts/:id/tagsList tags for a host
PUT/api/v1/hosts/:id/tagsBulk set (upsert) tags
DELETE/api/v1/hosts/:id/tags/:keyDelete a single tag
GET/api/v1/tags/keysAutocomplete tag keys
GET/api/v1/tags/valuesAutocomplete tag values for a key

Query Parameters for /tags/keys​

ParameterRequiredDescription
prefixNoFilter keys starting with this prefix

Query Parameters for /tags/values​

ParameterRequiredDescription
keyYesTag key to search values for
prefixNoFilter values starting with this prefix

Tag Key Validation​

Tag keys must match ^[a-z0-9][a-z0-9._-]{0,99}$ — lowercase alphanumeric with dots, hyphens, and underscores, 1-100 characters. Tag values are limited to 500 characters.

Entity Extensibility​

The entity_tags table uses a polymorphic entity_type column. Adding tags to new entity types (services, containers) requires adding one map entry in AllowedEntityTypes and registering new routes.

Search (PQL)​

Search across infrastructure using the Proxima Query Language (PQL). Results are scoped to the authenticated user's accessible clients (super admins see all).

MethodPathDescription
GET/api/v1/searchSearch hosts using PQL query
GET/api/v1/search/countCount matching hosts
GET/api/v1/search/fieldsList searchable fields and operators
POST/api/v1/search/validateValidate PQL syntax
GET/api/v1/search/aggregateAggregate results by a field
GET/api/v1/search/valuesAutocomplete field values
POST/api/v1/search/translateTranslate a natural-language question into PQL
ParameterDefaultDescription
q— (required)PQL query string
page1Page number
per_page20Items per page (max 100)
formatjsonResponse format: json or csv

Query Parameters for /search/count​

ParameterRequiredDescription
qYesPQL query string

Query Parameters for /search/aggregate​

ParameterRequiredDescription
qYesPQL query string
group_byYesField to group by (e.g. host.os, host.arch)

Query Parameters for /search/values​

ParameterRequiredDescription
fieldYesPQL field name (e.g. host.os, tag.env, label.role)
prefixNoFilter values starting with this prefix
limitNoMax results (default 20, max 100)

Validate Request Body​

{ "query": "host.os = \"Ubuntu\"" }

PQL Syntax​

host.os = "Ubuntu"
host.arch IN ("amd64", "arm64")
host.hostname ~ "web-*"
service.name = "nginx" AND host.agent_status = "online"
label.role = "web" AND tag.tier = "production"
host.cpu_cores > 4 AND host.memory_total_bytes > 8000000000
NOT tag.owner EXISTS

Field prefixes: host.*, label.* (agent labels), tag.* (user-defined tags), service.*, container.*, package.*

Operators: =, !=, ~ (glob wildcard), >, <, >=, <=, IN, NOT IN, EXISTS

Combinators: AND, OR, NOT, parenthesized grouping

Saved Searches​

Save PQL queries for quick access. Users see their own saved searches plus shared searches from other users.

MethodPathDescription
GET/api/v1/saved-searchesList saved searches (own + shared)
POST/api/v1/saved-searchesSave a PQL query
GET/api/v1/saved-searches/:idGet saved search
PUT/api/v1/saved-searches/:idUpdate saved search (owner or super admin)
DELETE/api/v1/saved-searches/:idDelete saved search (owner or super admin)

Create/Update Request Body​

{
"name": "Ubuntu production servers",
"query": "host.os ~ \"Ubuntu*\" AND tag.tier = \"production\"",
"description": "All Ubuntu hosts tagged as production tier",
"is_shared": true
}

Metrics (per-host)​

MethodPathDescription
GET/api/v1/hosts/:id/metricsList distinct metric names
GET/api/v1/hosts/:id/metrics/:nameQuery time-series data points
GET/api/v1/hosts/:id/metrics/:name/seriesList distinct label keys

Query Parameters for /metrics/:name​

ParameterDefaultDescription
start1 hour agoStart time (RFC3339)
endnowEnd time (RFC3339)
labels_key""Filter by labels key (e.g. device=sda1,mount=/)
derivativefalseCompute rate of change for counter metrics (true/false)

For time ranges ≤6 hours, returns 1-minute bucketed data from the raw table. For longer ranges, returns hourly aggregates.

Batch Endpoints​

MethodPathDescription
GET/api/v1/hosts/metrics/latestBatch query latest metric values for multiple hosts
GET/api/v1/hosts/tags/batchBatch query tags for multiple hosts

Query Parameters for /hosts/metrics/latest​

ParameterRequiredDescription
host_idsYesComma-separated host IDs (UUIDs)
metricsYesComma-separated metric names

Returns the most recent value per (host, metric) pair within the last hour. Designed to replace per-host metric fetching on the hosts list page (1 request instead of 3 per host). Limited to 100 host IDs and 50 metric names per request.

Aggregate Metrics (environment / client)​

Aggregate endpoints return metrics averaged (AVG) across all hosts in an environment or client. Same query parameters and response format as per-host metrics.

Environment-level​

MethodPathDescription
GET/api/v1/environments/:id/metricsList metric names across all hosts
GET/api/v1/environments/:id/metrics/:nameQuery aggregated data points
GET/api/v1/environments/:id/metrics/:name/seriesList series across all hosts

Client-level​

MethodPathDescription
GET/api/v1/clients/:id/metricsList metric names across all hosts
GET/api/v1/clients/:id/metrics/:nameQuery aggregated data points
GET/api/v1/clients/:id/metrics/:name/seriesList series across all hosts
GET/api/v1/clients/:id/metrics/:name/hostsPer-host series — one per host and labels_key, never averaged (below)

The environment and project Metrics dashboards no longer use the averaged endpoints; they read /clients/:id/metrics/:name/hosts.

Per-host series (client)​

GET /api/v1/clients/:id/metrics/:name/hosts returns {series: [{host_id, labels_key, data}], truncated, hosts_total} in one VictoriaMetrics query. With neither host_ids nor top, the server keeps at most 100 hosts — the highest CPU usage peaks over the window — and sets truncated and hosts_total; host_ids above 100 is a 400. Parameters: start, end, derivative, plus environment_id (one environment of the client — 404 if it belongs to another client, 403 if the caller cannot read it), host_ids (comma-separated UUIDs, at most 100) and top (1–100, keep the N series with the highest peak — it ranks series, not hosts, so it is meant for cpu_usage_ratio, where the two coincide). Requires metrics:read on the client; an environment-scoped caller is confined to its environments, and the query always names the environments it reads, so host_ids cannot reach another client's hosts.

Aggregation Semantics (the averaged endpoints)​

  • AVG is used as the default aggregation across hosts — appropriate for percentage metrics (CPU, memory, disk utilization).
  • MIN/MAX are computed as the overall min/max across all hosts.
  • sample_count is summed across all hosts.
  • Derivative support (?derivative=true) computes per-host rates first, then averages across hosts.

Events Timeline​

MethodPathDescription
GET/api/v1/events/timelineGet aggregated events for chart markers

Query Parameters for /events/timeline​

ParameterRequiredDescription
startYesStart time (RFC3339)
endYesEnd time (RFC3339)
host_idNoFilter by host (UUID)
environment_idNoFilter by environment (UUID)
event_typeNoFilter by type: deploy, file_change, agent_status
limitNoMax results (default 100)

MetricsQL Query​

MethodPathDescription
POST/api/v1/metrics/queryExecute MetricsQL expression with tenant filtering

Backend injects extra_filters[] for tenant isolation. Response streams Prometheus-format JSON.

Annotations​

MethodPathDescription
POST/api/v1/annotationsCreate a chart note (host / environment / client scope; annotations:write at that scope; signed-in user only)
GET/api/v1/annotationsNotes a host / environment / client chart inherits in [start, end] (metrics:read)
PUT/api/v1/annotations/:idEdit a note (author only)
DELETE/api/v1/annotations/:idDelete a note (author, annotations:write moderator at its scope, or super-admin)
GET/api/v1/chart-markersAlert windows + completed deploys for a host / environment / client chart (metrics:read; alerts need alerts:read, deploys changes:read)

See Chart Notes & Markers for scopes, permissions and marker rules.

Change Detection​

File integrity monitoring — tracks file changes, watched files, and file version history.

MethodPathDescription
GET/api/v1/changesList all change events (filtered, paginated)
GET/api/v1/changes/:idGet a single change event
GET/api/v1/hosts/:id/changesList change events for a host
GET/api/v1/hosts/:id/filesList watched files for a host
GET/api/v1/hosts/:id/files/:fileID/versionsList file version history
GET/api/v1/clients/:id/changesList change events for a client
GET/api/v1/environments/:id/changesList change events for an environment
GET/api/v1/changes/catalogGet the change catalog (known change sources and kinds)
GET/api/v1/changes/:id/citationsList incidents that cited this change as a candidate cause

Query Parameters for change event endpoints​

ParameterDefaultDescription
page1Page number
per_page20Items per page (max 100)
source—Filter by source (agent, gitlab, github, deployment)
event_type—Filter by type (file_created, file_modified, file_deleted, file_metadata_changed, push, merge_request, tag, release, pipeline_completed, pipeline_failed, workflow_completed, workflow_failed, sync, sync_failed, health_degraded)
severity—Filter by severity (info, warning, critical)
start—Start time (RFC3339)
end—End time (RFC3339)

Global /changes also supports host_id, client_id, and environment_id query parameters.

Query Parameters for /hosts/:id/files​

ParameterDefaultDescription
page1Page number
per_page20Items per page (max 100)
include_deletedfalseInclude soft-deleted files

Compliance​

Frameworks​

MethodPathDescription
GET/api/v1/frameworksList compliance frameworks
GET/api/v1/frameworks/:idGet framework details
POST/api/v1/frameworksCreate compliance framework
PUT/api/v1/frameworks/:idUpdate framework
DELETE/api/v1/frameworks/:idDelete framework
POST/api/v1/frameworks/:id/resetReset framework evaluations
GET/api/v1/frameworks/:id/controlsList a framework's controls (compliance:read)
POST/api/v1/frameworks/:id/controlsCreate control under framework

Controls​

MethodPathDescription
GET/api/v1/controls/:idGet control details
PUT/api/v1/controls/:idUpdate control
DELETE/api/v1/controls/:idDelete control
GET/api/v1/controls/:id/mappingsList mappings for a control
POST/api/v1/controls/:id/mappingsCreate mapping for a control

Mappings​

MethodPathDescription
GET/api/v1/mappings/:idGet mapping by ID
PUT/api/v1/mappings/:idUpdate mapping
DELETE/api/v1/mappings/:idDelete mapping

Compliance Posture (Host / Environment / Client)​

MethodPathDescription
GET/api/v1/hosts/:id/complianceGet host compliance posture
GET/api/v1/hosts/:id/compliance/evaluationsList host compliance evaluations
POST/api/v1/hosts/:id/compliance/evaluateTrigger compliance evaluation for host
GET/api/v1/environments/:envID/complianceGet environment compliance posture
GET/api/v1/environments/:envID/compliance/top-failuresTop compliance failures in environment
GET/api/v1/clients/:id/complianceGet client compliance posture
GET/api/v1/clients/:id/compliance/top-failuresTop compliance failures for client
GET/api/v1/clients/:id/compliance/expiring-exceptionsExpiring exceptions for client

Attestations​

MethodPathDescription
GET/api/v1/attestationsList attestations (filterable, client-scoped)
POST/api/v1/attestationsCreate manual attestation
PUT/api/v1/attestations/:idUpdate attestation
DELETE/api/v1/attestations/:idDelete attestation

Exceptions​

MethodPathDescription
GET/api/v1/exceptionsList compliance exceptions (filterable, client-scoped)
POST/api/v1/exceptionsCreate compliance exception
PUT/api/v1/exceptions/:idUpdate exception
DELETE/api/v1/exceptions/:idDelete exception

Agent Config (Environment-Level)​

Manage environment-wide agent operational config. Changes are pushed to all online hosts. See Config Sync.

MethodPathDescription
GET/api/v1/environments/:envID/agent-configsList all configs for an environment
GET/api/v1/environments/:envID/agent-configs/:configTypeGet a specific config
PUT/api/v1/environments/:envID/agent-configs/:configTypeCreate or update config (pushes to all online hosts)
DELETE/api/v1/environments/:envID/agent-configs/:configTypeDelete a config

Agent Config (Host-Level)​

Per-host config overrides and effective config resolution. See Config Sync.

MethodPathDescription
GET/api/v1/hosts/:hostID/agent-configs/effectiveGet all resolved configs with secrets redacted
GET/api/v1/hosts/:hostID/agent-configs/:configTypeGet effective (resolved) config for a host
PUT/api/v1/hosts/:hostID/agent-configs/:configTypeCreate or update host override (pushes to agent)
DELETE/api/v1/hosts/:hostID/agent-configs/:configTypeDelete host override (reverts to environment config)

Allowed Config Types​

agent_settings, change_detection, collectors, healthcheck, intervals, labels, log_collection, watch_files. Other values return 400 Bad Request.

Credentials​

Manage encrypted credentials for collector plugins. Credentials are encrypted at rest using Vault Transit. See Credentials for full documentation.

MethodPathDescription
POST/api/v1/clients/:clientID/credentialsCreate a credential
GET/api/v1/clients/:clientID/credentialsList credentials for a client
GET/api/v1/clients/:clientID/credentials/:credentialIDGet credential metadata
PUT/api/v1/clients/:clientID/credentials/:credentialIDUpdate credential (rotate if data changes)
DELETE/api/v1/clients/:clientID/credentials/:credentialIDDelete credential (409 if referenced)
POST/api/v1/clients/:clientID/credentials/:credentialID/testTest credential (decrypt + validate)
GET/api/v1/credentialsList all credentials across the caller's clients
GET/api/v1/credentials/typesList supported credential types

Alert Sources​

MethodPathPermissionDescription
POST/api/v1/clients/:id/alert-sourcesalertsources:writeCreate alert source (returns token once)
GET/api/v1/clients/:id/alert-sourcesalertsources:readList alert sources for a client
GET/api/v1/clients/:id/alert-sources/:idalertsources:readGet alert source
PUT/api/v1/clients/:id/alert-sources/:idalertsources:writeUpdate alert source
DELETE/api/v1/clients/:id/alert-sources/:idalertsources:deleteDelete alert source
POST/api/v1/alert-sourcesalertsources:writeCreate alert source (top-level form; client_id in body)
GET/api/v1/alert-sourcesalertsources:readList alert sources. client_id is optional: present, it lists that one client (re-checked per client in the handler); absent, it lists across every client on which the caller holds alertsources:read — a super-admin sees all, a caller who holds it on no client gets []
GET/api/v1/alert-sources/:sourceIDalertsources:readGet alert source
PUT/api/v1/alert-sources/:sourceIDalertsources:writeUpdate alert source
DELETE/api/v1/alert-sources/:sourceIDalertsources:deleteDelete alert source
GET/api/v1/alert-sources/:sourceID/tokenalertsources:readReveal the source's ingest token

Alert Label Mappings​

MethodPathPermissionDescription
GET/api/v1/clients/:id/alert-label-mappingsalertsources:readList label mappings for a client
POST/api/v1/clients/:id/alert-label-mappingsalertsources:writeCreate label mapping
PUT/api/v1/clients/:id/alert-label-mappings/:idalertsources:writeUpdate label mapping
DELETE/api/v1/clients/:id/alert-label-mappings/:idalertsources:deleteDelete label mapping
GET/api/v1/alert-label-mappingsalertsources:readList label mappings across the caller's clients
POST/api/v1/alert-label-mappingsalertsources:writeCreate label mapping (top-level form)
PUT/api/v1/alert-label-mappings/:mappingIDalertsources:writeUpdate label mapping
DELETE/api/v1/alert-label-mappings/:mappingIDalertsources:deleteDelete label mapping

Alerts​

MethodPathPermissionDescription
GET/api/v1/alertsalerts:readList alert groups (filterable by client_id, environment_id, host_id, status, severity, from, to)
GET/api/v1/alerts/:idalerts:readGet alert group detail with correlation, alerts, and log
GET/api/v1/alerts/countsalerts:readAlert counts by status (scoped to user's clients)
POST/api/v1/alerts/:id/acknowledgealerts:writeAcknowledge alert group
POST/api/v1/alerts/:id/resolvealerts:writeManually resolve alert group
POST/api/v1/alerts/:id/silencealerts:writeSilence alert group until timestamp
POST/api/v1/alerts/:id/unsilencealerts:writeRemove silence from alert group
POST/api/v1/alerts/bulk/acknowledgealerts:writeBulk acknowledge alert groups
POST/api/v1/alerts/bulk/resolvealerts:writeBulk resolve alert groups
POST/api/v1/alerts/bulk/silencealerts:writeBulk silence alert groups
POST/api/v1/alerts/:alertGroupID/notesalerts:writeAdd a note to an alert group
POST/api/v1/alerts/:alertGroupID/confirmalerts:writeConfirm you are still handling an acknowledged group (answers the ack confirm loop)
GET/api/v1/alerts/:alertGroupID/contextalerts:readGet the alert's deterministic context pack (the triage input)
POST/api/v1/alerts/:alertGroupID/triagealerts:writeTrigger an on-demand L1 investigation
POST/api/v1/alerts/:alertGroupID/fix-workedalerts:writeRecord whether the known fix worked (feeds the learning loop). Returns 501 when the memory store is not wired.
POST/api/v1/alerts/:alertGroupID/resolution/approvealerts:writeApprove a resolution into L1 memory
POST/api/v1/alerts/webhook/grafana/:tokennone (token in URL)Receive a Grafana legacy webhook

Query Parameters for /alerts​

ParameterDefaultDescription
page1Page number
per_page20Items per page (max 100)
client_id—Filter by client (UUID)
environment_id—Filter by environment (UUID)
host_id—Filter by host (UUID)
status—Filter by status: firing, acknowledged, resolved, silenced
severity—Filter by severity: critical, warning, info
from—Start time (RFC3339)
to—End time (RFC3339)

Silence Request Body​

{
"until": "2026-03-16T08:00:00Z"
}

Alertmanager Webhook Receiver (public, token-authenticated)​

MethodPathDescription
POST/api/v1/alerts/webhook/alertmanager/:tokenReceive Alertmanager webhook (returns 202 Accepted)

No JWT or API key required. Authentication is via the token embedded in the URL. The request is published to NATS for async processing.

Watch Config (Legacy)​

Per-host file watch configuration management. Config changes are persisted and pushed to agents via NATS.

MethodPathDescription
GET/api/v1/hosts/:id/watch-configGet current watch config for a host (404 if not set)
PUT/api/v1/hosts/:id/watch-configCreate or update watch config (pushes to agent via NATS)

Logs​

Log querying and exploration via VictoriaLogs proxy.

MethodPathDescription
POST/api/v1/logs/queryQuery logs via LogsQL with tenant-scoped filtering
GET/POST/api/v1/logs/select/*Reverse proxy to VictoriaLogs VMUI and API
GET/api/v1/logs/select/:pathProxy to the VictoriaLogs select API (tenant filters injected server-side)
GET/api/v1/logs/select/vmui/:pathProxy VMUI static assets

Query parameters:

ParameterDescription
client_idClient ID (required for multi-client users and super admins)

Request body (POST /api/v1/logs/query):

{
"query": "level:error",
"start": "2024-01-01T00:00:00Z",
"end": "2024-01-02T00:00:00Z",
"limit": 1000
}

Response: NDJSON stream (one JSON object per line).

Admin: Users​

MethodPathPermissionDescription
GET/api/v1/usersusers:readList users (paginated)
POST/api/v1/usersusers:writeCreate user (status=invited, sends invite email)
GET/api/v1/users/:idusers:readGet user with team memberships + client assignments
PUT/api/v1/users/:idusers:writeUpdate user
DELETE/api/v1/users/:idusers:deleteDisable user + revoke sessions
POST/api/v1/users/:id/resend-inviteusers:writeResend invitation email
POST/api/v1/users/:id/reset-passwordusers:writeSend password reset email
GET/api/v1/users/:id/clientsusers:readList direct client assignments
POST/api/v1/users/:id/clientsusers:writeAssign user to client with role
PUT/api/v1/users/:id/clients/:cidusers:writeChange assignment role
DELETE/api/v1/users/:id/clients/:cidusers:writeRemove assignment
POST/api/v1/users/:id/invite-consoleusers:writeInvite a Telegram-only user to the Console
DELETE/api/v1/users/:id/clients/:cid/environments/:eidusers:writeRemove an environment-scoped grant (create/update fold into the client-assignment routes via environment_id)

Admin: Teams​

MethodPathPermissionDescription
GET/api/v1/teamsteams:readList teams
POST/api/v1/teamsteams:writeCreate team
GET/api/v1/teams/:idteams:readGet team with members + clients
PUT/api/v1/teams/:idteams:writeUpdate team
DELETE/api/v1/teams/:idteams:deleteDelete team (cascades)
POST/api/v1/teams/:id/membersteams:writeAdd member
PUT/api/v1/teams/:id/members/:uidteams:writeChange member role
DELETE/api/v1/teams/:id/members/:uidteams:writeRemove member
POST/api/v1/teams/:id/clientsteams:writeAdd client
DELETE/api/v1/teams/:id/clients/:cidteams:writeRemove client
DELETE/api/v1/teams/:id/clients/:cid/environments/:eidteams:writeRemove environment-scoped client coverage from a team

Admin: Roles & Permissions​

MethodPathPermissionDescription
GET/api/v1/rolesroles:readList roles (system first)
POST/api/v1/rolesroles:writeCreate custom role
GET/api/v1/roles/:idroles:readGet role
PUT/api/v1/roles/:idroles:writeUpdate role (not system roles)
DELETE/api/v1/roles/:idroles:deleteDelete role (not system roles)
GET/api/v1/permissionsroles:readList all available permissions
GET/api/v1/roles/:id/usageroles:readGet role usage (who and what is bound to this role)

Admin: Service Accounts​

MethodPathPermissionDescription
GET/api/v1/service-accountsusers:readList service accounts
POST/api/v1/service-accountsusers:writeCreate service account (returns API key once)
GET/api/v1/service-accounts/:idusers:readGet service account
PUT/api/v1/service-accounts/:idusers:writeUpdate service account
DELETE/api/v1/service-accounts/:idusers:deleteDelete service account (permanent — to disable reversibly, PUT with is_active=false)
POST/api/v1/service-accounts/:id/rotateusers:writeRotate the API key (returns the new key once)

Admin: Audit Log​

MethodPathPermissionDescription
GET/api/v1/audit-logaudit:readQuery audit log (filterable by actor, action, resource, date range)

Webhook Sources (Management)​

MethodPathPermissionDescription
GET/api/v1/webhook-sourceswebhooks:readList webhook sources (paginated)
POST/api/v1/webhook-sourceswebhooks:writeCreate webhook source (returns token once)
GET/api/v1/webhook-sources/:idwebhooks:readGet webhook source
PUT/api/v1/webhook-sources/:idwebhooks:writeUpdate webhook source
DELETE/api/v1/webhook-sources/:idwebhooks:deleteDelete webhook source
POST/api/v1/webhook-sources/:id/rotatewebhooks:writeRotate token (invalidates old URL)
GET/api/v1/webhook-sources/:id/deliverieswebhooks:readList recent deliveries for a source

Webhook Receivers (Public, token-authenticated)​

These endpoints receive webhook payloads from external tools. No JWT or API key required — authentication is via the token embedded in the URL. Request body limit: 1 MB.

MethodPathDescription
POST/api/v1/webhooks/gitlab/:tokenReceive GitLab webhook (validates X-Gitlab-Token if secret configured)
POST/api/v1/webhooks/github/:tokenReceive GitHub webhook (validates X-Hub-Signature-256 HMAC if secret configured)
POST/api/v1/webhooks/argocd/:tokenReceive ArgoCD webhook (validates X-Argocd-Token if secret configured)

Runbooks​

MethodPathDescription
GET/api/v1/runbooksList runbooks (client-scoped)
POST/api/v1/runbooksCreate runbook
GET/api/v1/runbooks/actionsList available runbook actions
GET/api/v1/runbooks/:idGet runbook
PUT/api/v1/runbooks/:idUpdate runbook
DELETE/api/v1/runbooks/:idDelete runbook
GET/api/v1/runbooks/:id/versionsList runbook versions
GET/api/v1/runbooks/:id/versions/:versionGet specific runbook version
GET/api/v1/runbooks/:id/accessGet client access for runbook
PUT/api/v1/runbooks/:id/accessSet client access for runbook
POST/api/v1/runbooks/:id/executeExecute runbook on a host
POST/api/v1/runbooks/:id/previewPreview runbook execution (dry run)

Runbook Executions​

MethodPathDescription
GET/api/v1/runbook-executionsList runbook executions (filterable by runbook, host, status)
GET/api/v1/runbook-executions/:idGet execution details
POST/api/v1/runbook-executions/:id/cancelCancel a running execution

Fleet Management​

Agent fleet visibility and self-update rollouts (canary → batched). All routes require agents:read; the rollout mutation routes additionally require agents:write. The agent list is tenant-scoped to the caller's allowed clients.

MethodPathPermissionDescription
GET/api/v1/fleet/versionsagents:readVersion compatibility info (current backend, minimum supported, recommended agent version)
GET/api/v1/fleet/agentsagents:readList agents with computed version-skew status (client-scoped)
GET/api/v1/fleet/updatesagents:readList update rollouts
GET/api/v1/fleet/updates/:idagents:readGet a rollout with its per-agent update rows
POST/api/v1/fleet/updatesagents:writeCreate an update rollout (canary + batch, rate-limited)
POST/api/v1/fleet/updates/:id/pauseagents:writePause an in-progress rollout
POST/api/v1/fleet/updates/:id/resumeagents:writeResume a paused rollout
POST/api/v1/fleet/updates/:id/abortagents:writeAbort a rollout
POST/api/v1/fleet/agents/:agentID/rotate-credentialsagents:writeRotate one agent's NATS credentials

Terminal​

MethodPathDescription
GET/api/v1/terminal/wsWebSocket connect for interactive terminal (browser)
GET/api/v1/terminal/ws/joinWebSocket join an active session as observer/participant
GET/api/v1/terminal/sessionsList terminal sessions (?active=true/false)
GET/api/v1/terminal/sessions/:sessionIDGet terminal session details
DELETE/api/v1/terminal/sessions/:sessionIDKill a terminal session
GET/api/v1/terminal/sessions/:sessionID/recordingGet presigned download URL for session recording
GET/api/v1/hosts/:id/terminal/accessCheck terminal access for a host (allowed logins)
POST/api/v1/hosts/:id/files/uploadUpload file to host (multipart, max 768 KB)
GET/api/v1/hosts/:id/files/downloadDownload file from host (?path=/remote/path)

gRPC endpoints (proxied through nginx on port 443):

RPCServiceDescription
SessionTerminalServiceBidirectional streaming for pc ssh terminal sessions
JoinSessionTerminalServiceBidirectional streaming for pc sessions join
PortForwardTerminalServiceBidirectional streaming for pc ssh -L port forwarding

AI Chat​

MethodPathDescription
POST/api/v1/chatSend chat message (SSE streaming response)
POST/api/v1/chat/:conversationID/confirmConfirm pending tool call in a conversation

Conversations​

MethodPathDescription
GET/api/v1/conversationsList conversations for current user
GET/api/v1/conversations/:idGet conversation with decrypted messages
DELETE/api/v1/conversations/:idDelete conversation
PATCH/api/v1/conversations/:idUpdate conversation (rename)

Service Desk​

Tickets & Kanban​

MethodPathDescription
GET/api/v1/service-desk/ticketsList tickets (ClickHouse, filterable)
GET/api/v1/service-desk/tickets/:issueKeyGet ticket details
POST/api/v1/service-desk/ticketsCreate ticket (JSM write)
GET/api/v1/service-desk/kanbanGet kanban board view
GET/api/v1/service-desk/projectsList fixed-price projects
GET/api/v1/service-desk/activityGet recent activity
GET/api/v1/service-desk/tickets/countsGet ticket status counts
GET/api/v1/service-desk/on-callGet the selected project's current on-call engineer
GET/api/v1/service-desk/support-hoursGet the client's support-hours usage for the current billing period
GET/api/v1/service-desk/notification-settingsGet the caller's reporter-notification toggle
PUT/api/v1/service-desk/notification-settingsUpdate the caller's reporter-notification toggle
POST/api/v1/service-desk/reports/export/sendSend a tasks report to the caller's Telegram chat
GET/api/v1/service-desk/viewsList saved views
POST/api/v1/service-desk/viewsCreate saved view
GET/api/v1/service-desk/views/:idGet saved view
PUT/api/v1/service-desk/views/:idUpdate saved view
DELETE/api/v1/service-desk/views/:idDelete saved view
GET/api/v1/service-desk/tickets/:issueKey/feedbackGet the ticket's CSAT rating
POST/api/v1/service-desk/tickets/:issueKey/feedbackSubmit a CSAT rating
GET/api/v1/service-desk/tickets/:issueKey/attachments/:attachmentId/downloadDownload an attachment
GET/api/v1/service-desk/tickets/:issueKey/attachments/:attachmentId/download-urlGet a signed attachment download URL
GET/api/v1/service-desk/tickets/:issueKey/attachments/:attachmentId/download-signedDownload an attachment via signed URL
POST/api/v1/internal/service-desk/ticket-statusUpsert a ticket status overlay (service-account only)
POST/api/v1/internal/service-desk/ticket-projectionUpsert a ticket projection (service-account only)
POST/api/v1/internal/notify/ticket-reporterSend a reporter push DM (service-account only)

Metrics & Reports​

MethodPathDescription
GET/api/v1/service-desk/metrics/slaSLA metrics
GET/api/v1/service-desk/metrics/deliveryDelivery metrics
GET/api/v1/service-desk/metrics/summaryMetrics summary
GET/api/v1/service-desk/reports/exportExport tickets as CSV

Ticket Sub-resources (JSM proxy)​

MethodPathDescription
GET/api/v1/service-desk/tickets/:issueKey/commentsList comments
POST/api/v1/service-desk/tickets/:issueKey/commentsAdd comment
GET/api/v1/service-desk/tickets/:issueKey/approvalsList approvals
POST/api/v1/service-desk/tickets/:issueKey/approvals/:approvalIdSubmit approval decision
GET/api/v1/service-desk/tickets/:issueKey/transitionsList available transitions
POST/api/v1/service-desk/tickets/:issueKey/transitionExecute status transition
GET/api/v1/service-desk/tickets/:issueKey/attachmentsList attachments
POST/api/v1/service-desk/tickets/:issueKey/attachmentsAdd attachment
GET/api/v1/service-desk/tickets/:issueKey/actionsList audit trail actions for ticket
GET/api/v1/service-desk/request-types/:requestTypeId/fieldsGet fields for a request type

Organization Mappings​

MethodPathDescription
GET/api/v1/service-desk/organizationsList client-scoped organizations
GET/api/v1/service-desk/admin/organizationsList all organizations (admin)
POST/api/v1/service-desk/admin/organizationsCreate organization mapping
PUT/api/v1/service-desk/admin/organizations/:idUpdate organization mapping
DELETE/api/v1/service-desk/admin/organizations/:idDelete organization mapping

Access Audit​

MethodPathDescription
GET/api/v1/admin/access-audit/by-user/:userIdAudit effective access for a user
GET/api/v1/admin/access-audit/by-client/:clientIdAudit who has access to a client

Auth — Public (5/min rate limit, configurable via PROXIMA_AUTH_RATE_LIMIT)​

MethodPathDescription
POST/api/v1/auth/loginLogin with email + password
POST/api/v1/auth/refreshRefresh access token
POST/api/v1/auth/mfa/verifyVerify MFA code during login
POST/api/v1/auth/forgot-passwordRequest password reset email
POST/api/v1/auth/reset-passwordReset password with token
POST/api/v1/auth/accept-inviteAccept invitation, set password
GET/api/v1/auth/configAuth configuration (Google SSO enabled)

Auth — Google OIDC SSO (no auth required)​

These endpoints are only registered when PROXIMA_GOOGLE_CLIENT_ID is configured. When disabled, they return 404.

MethodPathDescription
GET/api/v1/auth/googleRedirect (307) to Google authorization endpoint
GET/api/v1/auth/google/callbackOAuth 2.0 callback from Google (validates state, exchanges code, issues tokens)
POST/api/v1/auth/google/exchangeExchange one-time auth code for JWT tokens
POST/api/v1/auth/google/cli-mfaVerify MFA for a CLI Google login

The flow is: frontend redirects to /auth/google -> Google authenticates -> callback creates a one-time code -> frontend exchanges code for tokens via /auth/google/exchange. See Authentication — Google OIDC SSO for the full flow diagram.

Auth — Protected (JWT required)​

MethodPathDescription
POST/api/v1/auth/logoutLogout (revoke session)
GET/api/v1/auth/meCurrent user profile + permissions
PUT/api/v1/auth/profileUpdate current user profile (display name)
POST/api/v1/auth/mfa/setupStart MFA setup
POST/api/v1/auth/mfa/confirmConfirm MFA with TOTP code
DELETE/api/v1/auth/mfaDisable MFA
PUT/api/v1/auth/passwordChange password
GET/api/v1/auth/sessionsList active sessions
DELETE/api/v1/auth/sessions/:idRevoke session
DELETE/api/v1/auth/sessionsRevoke all sessions
POST/api/v1/auth/onboarding-tourRecord onboarding-tour state
PUT/api/v1/auth/ui-preferencesUpdate the caller's UI preferences
POST/api/v1/auth/telegram/admin/link-codeGenerate a Telegram link code for a user (admin)

Auth — Passkeys (WebAuthn)​

Passkey endpoints are only registered when PROXIMA_WEBAUTHN_RP_ID is configured. When disabled, they return 404.

Public (rate-limited with auth routes)​

MethodPathDescription
POST/api/v1/auth/passkey/login/beginBegin passkey login ceremony
POST/api/v1/auth/passkey/login/finishComplete passkey login ceremony
POST/api/v1/auth/passkey/mfa/beginBegin passkey MFA verification
POST/api/v1/auth/passkey/mfa/finishComplete passkey MFA verification
POST/api/v1/auth/passkey/accept-invite/beginBegin passkey registration during invite acceptance
POST/api/v1/auth/passkey/accept-invite/finishComplete passkey registration during invite acceptance

Protected (JWT required)​

MethodPathDescription
POST/api/v1/auth/passkey/register/beginBegin passkey registration for current user
POST/api/v1/auth/passkey/register/finishComplete passkey registration
GET/api/v1/auth/passkey/credentialsList registered passkey credentials
PUT/api/v1/auth/passkey/credentials/:idRename a passkey credential
DELETE/api/v1/auth/passkey/credentials/:idDelete a passkey credential

Feedback​

MethodPathDescription
POST/api/v1/feedbackSubmit user feedback (creates Jira issue if configured, otherwise logs to structured logs)

Request body:

FieldTypeRequiredDescription
categorystringYesOne of: bug, feature_request, ux_issue, suggestion
titlestringYesBrief summary (max 200 characters)
descriptionstringYesDetailed description (max 2000 characters)
page_urlstringNoCurrent page URL (auto-populated by frontend)
screenshotstringNoBase64-encoded PNG screenshot (max 5MB decoded)

Response (201):

{
"data": {
"jira_key": "PDD-42",
"jira_url": "https://yourorg.atlassian.net/browse/PDD-42"
}
}

When Jira is not configured, jira_key and jira_url are empty strings. The overall request body limit is 8MB (to accommodate base64-encoded screenshots).

Agent Enrollment & Credentials​

Public, token-authenticated agent lifecycle endpoints. Rate-limited by PROXIMA_CREDENTIAL_RATE_LIMIT.

MethodPathDescription
POST/api/v1/agents/enrollEnroll an agent with an install token. Returns 409 on an enroll conflict (identity-takeover protection).
POST/api/v1/agents/credentials/renew/nonceIssue a server-side renewal challenge nonce
POST/api/v1/agents/credentials/renewRenew agent NATS credentials. The nonce becomes mandatory when PROXIMA_REQUIRE_RENEWAL_NONCE=true.

Briefing​

MethodPathDescription
GET/api/v1/briefingGet the Home page: per-section objects (projects, alerts, on-call, monitors, fleet, vulnerabilities, Service Desk) plus degraded_sections. Optional client_id (403 if not accessible) and period (7d/30d/90d, default 30d)

Healthcheck​

Scanner runs, findings, rules, and scores. See Healthcheck.

MethodPathDescription
GET/api/v1/healthcheck/categoriesList healthcheck categories
GET/api/v1/healthcheck/rulesList healthcheck rules
GET/api/v1/healthcheck/rules/:ruleIDGet a healthcheck rule
PUT/api/v1/healthcheck/rules/:ruleIDUpdate a healthcheck rule
GET/api/v1/hosts/:hostID/healthcheck/scoreGet a host's healthcheck score
GET/api/v1/hosts/:hostID/healthcheck/runsList healthcheck runs for a host
GET/api/v1/hosts/:hostID/healthcheck/runs/latestGet the latest healthcheck run for a host
GET/api/v1/hosts/:hostID/healthcheck/runs/:runIDGet healthcheck run detail
GET/api/v1/hosts/:hostID/healthcheck/runs/:runID/findingsList scanner findings for a run
GET/api/v1/hosts/:hostID/findingsList scanner findings for a host
POST/api/v1/hosts/:hostID/healthcheck/triggerTrigger an on-demand healthcheck run

Integrations​

Collector integrations detected on hosts (PostgreSQL, nginx, Docker, …).

MethodPathDescription
GET/api/v1/integrationsList integrations across the caller's clients
GET/api/v1/integrations/:integrationIDGet an integration
GET/api/v1/integrations/:integrationID/hostsList hosts running an integration
GET/api/v1/hosts/:hostID/integrationsList integrations on a host

On-Call Schedules​

Native on-call: schedules, rotations, overrides, and the resolved "who is on call" view. See Schedules and On-Call Management.

MethodPathDescription
GET/api/v1/oncall/nowWho is on call now (and next) per schedule
GET/api/v1/oncall/schedulesList on-call schedules
POST/api/v1/oncall/schedulesCreate an on-call schedule
GET/api/v1/oncall/schedules/:idGet an on-call schedule tree
PATCH/api/v1/oncall/schedules/:idUpdate an on-call schedule
DELETE/api/v1/oncall/schedules/:idDelete an on-call schedule
GET/api/v1/oncall/schedules/:id/shiftsMaterialize shifts over a range
GET/api/v1/oncall/schedules/:id/calendarLayered on-call calendar over a range
POST/api/v1/oncall/schedules/:id/rotationsCreate a rotation
PATCH/api/v1/oncall/rotations/:idUpdate a rotation
DELETE/api/v1/oncall/rotations/:idDelete a rotation
PUT/api/v1/oncall/rotations/:id/usersReplace a rotation's ordered users
POST/api/v1/oncall/schedules/:id/overridesCreate an override
PATCH/api/v1/oncall/overrides/:idMove, resize, or reassign an override
DELETE/api/v1/oncall/overrides/:idDelete an override
GET/api/v1/users/:userID/oncall-profileGet a user's on-call profile
PUT/api/v1/users/:userID/oncall-profileSet a user's on-call phone
POST/api/v1/users/:userID/oncall-profile/verify-phoneVerify a user's on-call phone

On-Call Readiness​

See Readiness Drill and Resolution Safety.

MethodPathDescription
GET/api/v1/oncall/readinessList on-call readiness drills fired in a window. Optional from/to (RFC3339) bound fired_at as half-open [from, to); omitted, they default to the last 30 days. from after to is a 400; a window wider than 90 days is clamped to its most recent 90 rather than refused. A readinessMaxRows = 5000 safety cap on the response logs a WARN when hit
GET/api/v1/oncall/readiness/coverageList per-client paging coverage
POST/api/v1/oncall/readiness/:userID/clear-degradedManually clear an on-call's readiness-degraded state ("engineer is back")

Escalation Policies & Routes​

An alert pages a human if and only if an enabled route matches it. See Escalation and Paging Control.

MethodPathDescription
GET/api/v1/escalation/policiesList escalation policies
POST/api/v1/escalation/policiesCreate an escalation policy
GET/api/v1/escalation/policies/:idGet an escalation policy
PATCH/api/v1/escalation/policies/:idUpdate an escalation policy
DELETE/api/v1/escalation/policies/:idDelete an escalation policy
GET/api/v1/escalation/policies/:id/routesList the routes linked to a policy
GET/api/v1/escalation/routesList escalation routes
POST/api/v1/escalation/routesCreate an escalation route
PATCH/api/v1/escalation/routes/:idUpdate an escalation route
DELETE/api/v1/escalation/routes/:idDelete an escalation route
PUT/api/v1/escalation/routes/orderReorder escalation routes (match order is significant)
GET/api/v1/users/:id/notification-policyGet a user's notification chains
PUT/api/v1/users/:id/notification-policyReplace a user's notification chains

On-Call Cutover (admin)​

Gate for migrating a team from shadow paging to Console paging.

MethodPathDescription
GET/api/v1/admin/oncall-cutoverList cutover gate status per team
POST/api/v1/admin/oncall-cutover/:teamIDFlip a team to Console paging (live)
DELETE/api/v1/admin/oncall-cutover/:teamIDRevert a team to shadow paging
GET/api/v1/admin/settings/oncallList the on-call configuration in force

Incidents​

Incident grouping, the L1 investigation session, and the remediation approval loop.

MethodPathDescription
GET/api/v1/incidents/:incidentIDGet incident detail
GET/api/v1/incidents/:incidentID/dependenciesGet the incident's host dependency graph
GET/api/v1/incidents/:incidentID/sessionGet the investigation session
GET/api/v1/incidents/:incidentID/session/streamStream the investigation session (SSE)
POST/api/v1/incidents/:incidentID/feedbackSubmit RCA feedback
GET/api/v1/incidents/:incidentID/remediationGet the remediation proposal
POST/api/v1/incidents/:incidentID/remediation/approveApprove and execute the remediation proposal
POST/api/v1/incidents/:incidentID/remediation/rejectReject the remediation proposal
POST/api/v1/incidents/:incidentID/remediation/fix-workedRecord the did-the-fix-work verdict on an executed remediation

L1 Triage (admin)​

MethodPathDescription
GET/api/v1/l1/modelsList the allowlisted L1 triage models
PUT/api/v1/l1/settings/triage-modelSet the global L1 triage model

Version Currency​

Tracks installed software versions against a product catalog and surfaces CVE exposure.

MethodPathDescription
GET/api/v1/versionsVersion-currency dashboard
GET/api/v1/versions/products/:slugVersion-currency drill-down for a product
GET/api/v1/versions/products/by-name/:nameVersion-currency drill-down by product name
POST/api/v1/versions/triageTriage a product's CVEs for a client
POST/api/v1/versions/syncSync the endoflife.date catalog now
GET/api/v1/versions/aliasesList catalog aliases
POST/api/v1/versions/aliasesUpsert a catalog alias by local name
PUT/api/v1/versions/aliases/:idMap or ignore a catalog alias
GET/api/v1/versions/unmatchedList unmatched inventory names (triage queue)
POST/api/v1/versions/unmatched/dismissDismiss an unmatched inventory name
GET/api/v1/versions/exportExport the version-currency report
POST/api/v1/versions/exportExport a selected version-currency report

Pull Sources (admin)​

Cloud-provider change feeds pulled on a schedule (rather than pushed by webhook).

MethodPathDescription
GET/api/v1/pull-sourcesList pull sources
POST/api/v1/pull-sourcesCreate a pull source
GET/api/v1/pull-sources/:idGet a pull source
PUT/api/v1/pull-sources/:idUpdate a pull source
DELETE/api/v1/pull-sources/:idDelete a pull source

Telegram Groups (admin)​

MethodPathDescription
GET/api/v1/admin/telegram/groupsList discovered Telegram groups
POST/api/v1/admin/telegram/groups/:chat_id/bindBind a group to a client or team
PATCH/api/v1/admin/telegram/groups/:chat_idUpdate group config
DELETE/api/v1/admin/telegram/groups/:chat_idUnbind a group
GET/api/v1/admin/telegram/groups/:chat_id/topicsList the chat's discovery-staged forum topics and its current per-kind routing
PUT/api/v1/admin/telegram/groups/:chat_id/topics/:kindPoint one kind (alerts|tasks) at one staged topic
DELETE/api/v1/admin/telegram/groups/:chat_id/topics/:kindClear a kind's route (it falls back to the binding's thread)

Telegram Ops Bot (service-account only)​

Called by the ops bot with its service-account API key, not by browsers. See Ops Bot.

MethodPathDescription
POST/api/v1/telegram/ops/discoverRegister a discovered Telegram group
POST/api/v1/telegram/ops/bindBind a Telegram group to a client
POST/api/v1/telegram/ops/bind-teamBind a Telegram group to a team
POST/api/v1/telegram/ops/callbackAlert action callback (ack / resolve / silence from a bot button)
POST/api/v1/telegram/ops/topicPoint one routing kind at the forum topic /topic was run in
POST/api/v1/telegram/ops/engageReactive listening-bot engage
POST/api/v1/internal/telegram/notify-targetsResolve Telegram notification targets
GET/api/v1/internal/notification-configRead a notification pipeline config value

Global Notification Settings (admin)​

MethodPathDescription
GET/api/v1/admin/notification-settingsList global notification settings
PUT/api/v1/admin/notification-settings/:keySet a global notification setting

Voice Callbacks (public, provider-signed)​

Twilio callbacks. Authenticated by the X-Twilio-Signature HMAC, not by JWT. See Voice Paging.

MethodPathDescription
POST/api/v1/twilio/voice/twiml/:callIDServe the call-flow TwiML
POST/api/v1/twilio/voice/gatherDTMF gather — the on-call presses 1 to acknowledge (2 no longer resolves; it re-gathers)
POST/api/v1/twilio/voice/statusCall status callback

Kubernetes Access​

See Kubernetes Access.

MethodPathDescription
POST/api/v1/kube/tokenIssue a short-lived kube proxy token for pc kube
GET/api/v1/kube/role-metadataRole-authoring metadata (namespaces, resources, verbs) for the kube_spec editor

SSH Certificates​

Backs pc ssh certificate-based access. See OpenSSH Architecture.

MethodPathDescription
POST/api/v1/ssh/certsIssue an SSH user certificate
GET/api/v1/ssh/host-caGet the SSH Host CA public key

System Status​

MethodPathDescription
GET/api/v1/system/statusSystem status (dependency health as seen by the backend)

Authentication​

All /api/v1/ endpoints (outside /auth) support two authentication methods:

  • JWT Bearer: Authorization: Bearer <jwt> (user sessions)
  • API Key: X-API-Key: <key> (service accounts)

Pagination​

List endpoints support pagination with the following query parameters:

ParameterDefaultMaxDescription
page1—Page number
per_page20100Items per page