Files
sessiongurad/docs/API.md
jbergner 7972ed7e38
All checks were successful
release-tag / release-image (push) Successful in 2m5s
release-main / release-images (push) Successful in 5m5s
Update mit Guacamole-Extension
2026-08-22 15:19:17 +02:00

3.8 KiB
Raw Blame History

HTTP API (v0.3)

All JSON APIs return an error object with an error field on failure unless otherwise stated.

Authentication classes

Public/internal service endpoints

  • GET /healthz
  • GET /metrics
  • POST /api/v1/agents/enroll enrollment-token authenticated in request body
  • POST /api/v1/agents/heartbeat per-agent bearer authentication
  • POST /api/v1/broker/resolve broker bearer API key
  • POST /api/v1/broker/tokens broker bearer API key, form-encoded for Guacamole extension

OIDC-protected admin endpoints

All remaining /api/v1/... endpoints require an authenticated Master OIDC session; write operations additionally require the documented RBAC permission.

Broker

POST /api/v1/broker/resolve

Header:

Authorization: Bearer <SESSIONGUARD_BROKER_API_KEY>

JSON request:

{
  "username": "DOMAIN\\user",
  "connection_id": "42",
  "connection_name": "Office Desktop",
  "resource_id": "optional",
  "farm_id": "optional"
}

Response includes selected agent/hostname, farm/resource, reconnect reason, health score, lease expiry and token map.

POST /api/v1/broker/tokens

Same broker credential. Accepts form fields username, connection_id, connection_name, resource_id, farm_id. Returns URL-encoded token pairs for the Guacamole extension.

Agents and dashboard

  • GET /api/v1/dashboard
  • GET /api/v1/agents/{id}
  • PATCH /api/v1/agents/{id}/control maintenance

Control body:

{
  "mode": "online|drain|maintenance",
  "restart_when_drained": false,
  "tags": {"role":"office"},
  "farm_ids": ["office"]
}

Sessions

  • POST /api/v1/agents/{id}/sessions/{session}/action session
  • POST /api/v1/agents/{id}/sessions/bulk session

Actions: message, disconnect, logoff. Forced logoff additionally requires the server-side role permission checks applicable to the operation.

Bulk request example:

{
  "action": "logoff",
  "scope": "disconnected"
}

Scopes include all, active, and disconnected.

Processes

  • POST /api/v1/agents/{id}/processes/{pid}/kill process

The Master queues an expiring command; it is not a synchronous remote Win32 call.

Policies

  • PUT /api/v1/agents/{id}/policy policy
  • PUT /api/v1/policy/all policy
  • PUT /api/v1/farms/{id}/policy policy
  • GET /api/v1/policy/history policy
  • POST /api/v1/agents/{id}/policy/rollback/{revision} policy
  • POST /api/v1/farms/{id}/policy/rollback/{revision} policy
  • POST /api/v1/policy/global/rollback/{revision} policy

Policy writes are normalized, validated, assigned a fresh revision and appended to policy history.

Farms

  • GET /api/v1/farms
  • POST /api/v1/farms manage
  • PUT /api/v1/farms/{id} manage
  • DELETE /api/v1/farms/{id} manage

Farm fields include name, description, agent_ids, required_tags, optional policy, and enabled.

Published resources

  • GET /api/v1/resources
  • POST /api/v1/resources manage
  • PUT /api/v1/resources/{id} manage
  • DELETE /api/v1/resources/{id} manage

Resource fields include desktop/RemoteApp kind, farm ID, Guacamole connection ID/name and RemoteApp parameters.

Director/history

  • GET /api/v1/history?user=&agent=&limit=
  • GET /api/v1/alerts
  • GET /api/v1/leases
  • GET /api/v1/audit audit
  • GET /api/v1/me current OIDC user, roles and permissions

history_limit bounds retained history. Query limit is additionally constrained server-side.

Agent protocol

model.ProtocolVersion is 3 for v0.3.

Heartbeat snapshots contain server/health/session/process/telemetry/profile/event state. The response contains effective desired policy and pending commands. Agents acknowledge completed commands in later heartbeats.