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

Environments

MethodPathDescription
POST/api/v1/clients/:id/environmentsCreate environment for client
PUT/api/v1/environments/:envIdUpdate environment
DELETE/api/v1/environments/:envIdDelete environment
GET/api/v1/environments/:id/hostsList hosts in environment

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)
GET/api/v1/clusters/:clusterIDGet single cluster with full details
GET/api/v1/clusters/:clusterID/nodesList nodes in a cluster (with host linkage)
GET/api/v1/clusters/:clusterID/namespacesList namespaces in a cluster
GET/api/v1/clusters/:clusterID/workloadsList workloads in a cluster (filterable by namespace/kind)
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/clients/:id/clustersList clusters for a client
GET/api/v1/environments/:envID/clustersList clusters for an environment

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

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)

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
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

Aggregation Semantics

  • 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 metric annotation
GET/api/v1/annotationsList annotations for host/environment
DELETE/api/v1/annotations/:idDelete annotation (creator only)

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

Query Parameters for change event endpoints

ParameterDefaultDescription
page1Page number
per_page20Items per page (max 100)
sourceFilter by source (agent, gitlab, github, deployment)
event_typeFilter 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)
severityFilter by severity (info, warning, critical)
startStart time (RFC3339)
endEnd 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
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)

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

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

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)
GET/api/v1/hosts/:id/alertsalerts:readAlert groups for a host
GET/api/v1/environments/:id/alertsalerts:readAlert groups for an environment
GET/api/v1/clients/:id/alertsalerts:readAlert groups for a client
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

Query Parameters for /alerts

ParameterDefaultDescription
page1Page number
per_page20Items per page (max 100)
client_idFilter by client (UUID)
environment_idFilter by environment (UUID)
host_idFilter by host (UUID)
statusFilter by status: firing, acknowledged, resolved, silenced
severityFilter by severity: critical, warning, info
fromStart time (RFC3339)
toEnd 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

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

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

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

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:deleteSoft-delete service account

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)

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

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

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

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

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).

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
page1Page number
per_page20100Items per page