Skip to main content

API Reference

Complete API reference for Nekzus. All endpoints are documented with request/response formats, authentication requirements, and example usage.


Overview​

Nekzus provides a RESTful API for managing services, devices, containers, and system configuration. The API follows standard HTTP conventions and returns JSON responses.

Base URL​

https://localhost:8443/api/v1    # HTTPS (recommended)
http://localhost:8080/api/v1 # HTTP (development only, requires --insecure-http flag)

API Version​

All responses include an X-API-Version header indicating the current API version.

Content Type​

All requests and responses use application/json unless otherwise specified.


Authentication​

Nekzus supports multiple authentication methods depending on the use case.

Authentication Methods​

MethodUse CaseHeader Format
JWT TokenMobile apps, external clientsAuthorization: Bearer <jwt-token>
Bootstrap TokenInitial device pairingAuthorization: Bearer <bootstrap-token>
API KeyExternal integrations, CI/CDX-API-Key: nekzus_<64-char-hex>
IP-BasedLocal network requestsNo header required for localhost

JWT Tokens​

JWT tokens are obtained through the device pairing flow and are valid for 12 hours.

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Token Refresh

Use the /api/v1/auth/refresh endpoint to obtain a new token before expiration. The refresh endpoint accepts both valid and recently expired tokens.

Bootstrap Tokens​

Short-lived tokens (5 minutes) used only for initial device pairing. Obtained from QR code scanning.

API Keys​

Permanent tokens for external integrations. Format: nekzus_<64-character-hex-string>

X-API-Key: nekzus_a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456
API Key Security

The full API key is only shown once at creation. Store it securely as it cannot be retrieved again.

Permission Scopes​

ScopeDescription
read:catalogRead app catalog and routes
read:eventsSubscribe to real-time events
read:*All read permissions
write:*All write permissions
access:adminAdministrative access

Rate Limiting​

All endpoints are rate-limited per IP address. Exceeding limits returns 429 Too Many Requests.

Endpoint CategoryRate LimitBurst
Health checks10 req/sec50
Authentication10 req/min10
QR code generation1 req/sec5
WebSocket connections6 req/min3
Device management30 req/min30
Container operations30 req/min20
General API30 req/min30

Rate limit headers are included in responses:

X-RateLimit-Limit: 30
X-RateLimit-Remaining: 29
X-RateLimit-Reset: 1736949720

Error Handling​

All errors return a consistent JSON structure:

{
"error": {
"code": "ERROR_CODE",
"message": "Human-readable error message"
}
}

Common Error Codes​

CodeHTTP StatusDescription
UNAUTHORIZED401Authentication required
FORBIDDEN403Insufficient permissions
NOT_FOUND404Resource not found
METHOD_NOT_ALLOWED405HTTP method not supported
RATE_LIMIT_EXCEEDED429Too many requests
INTERNAL_ERROR500Server error
STORAGE_UNAVAILABLE503Storage service unavailable

Health Endpoints​

Health check endpoints for monitoring and orchestration. No authentication required.

GET /healthz​

Returns detailed health status.

curl https://localhost:8443/healthz

GET /livez​

Kubernetes liveness probe. Returns 200 if the process is alive.

curl https://localhost:8443/livez

GET /readyz​

Kubernetes readiness probe. Returns 200 if ready to serve traffic.

curl https://localhost:8443/readyz

Authentication Endpoints​

GET /api/v1/auth/qr​

Generates a QR code for mobile app pairing. The QR code contains a minimal payload with the base URL and a short pairing code. The mobile app uses this code to retrieve the full pairing configuration via GET /api/v1/pair/{code}.

Authentication: None Rate Limit: 1 req/sec, burst 5

ParameterTypeDescription
formatqueryResponse format: json (default) or png
curl https://localhost:8443/api/v1/auth/qr
QR Code Contents

The QR code encodes a minimal JSON payload:

  • u: Base URL of the Nekzus instance
  • c: Short pairing code (8 characters, valid for 5 minutes)

The code field is also returned separately for manual entry when QR scanning is not possible.

POST /api/v1/pair​

Redeems a pairing code and returns the full pairing configuration. This is the second step of the v2 pairing flow after scanning the QR code.

Authentication: None Rate Limit: 10 req/min (per-IP) + global rate limiting Required Header: X-Pairing-Request: true

ParameterTypeDescription
codebody8-character pairing code from QR scan
curl -X POST https://localhost:8443/api/v1/pair \
-H "Content-Type: application/json" \
-H "X-Pairing-Request: true" \
-d '{"code": "ABCD1234"}'
Security Features
  • Single Use: Codes are invalidated after first successful redemption
  • 5-Minute Expiry: Codes expire 5 minutes after generation
  • Rate Limiting: Both per-IP and global rate limits are enforced
  • Code Locking: Codes are locked after 5 failed redemption attempts
  • Required Header: The X-Pairing-Request: true header prevents CSRF attacks

POST /api/v1/auth/pair​

Pairs a new device using a bootstrap token from QR code.

Authentication: Bootstrap token Rate Limit: 10 req/min

curl -X POST https://localhost:8443/api/v1/auth/pair \
-H "Authorization: Bearer bootstrap_a1b2c3d4e5f6" \
-H "Content-Type: application/json" \
-d '{
"device": {
"id": "my-iphone-123",
"model": "iPhone 15 Pro",
"platform": "ios",
"pushToken": "apns_token_xyz"
}
}'

Supported Platforms: ios, android, web, desktop, linux, macos, windows

POST /api/v1/auth/refresh​

Refreshes an existing JWT token.

Authentication: JWT token (can be expired) Rate Limit: 10 req/min

curl -X POST https://localhost:8443/api/v1/auth/refresh \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."

GET /api/v1/auth/setup-status​

Checks if initial setup is required (no users exist).

Authentication: None

curl https://localhost:8443/api/v1/auth/setup-status

POST /api/v1/auth/setup​

Creates the first admin user. Only works if no users exist.

Authentication: None

curl -X POST https://localhost:8443/api/v1/auth/setup \
-H "Content-Type: application/json" \
-d '{
"username": "admin",
"password": "secure-password-here"
}'

POST /api/v1/auth/login​

Authenticates a user with username and password.

Authentication: None

curl -X POST https://localhost:8443/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{
"username": "admin",
"password": "secure-password-here"
}'

GET /api/v1/auth/me​

Returns the current authenticated user's information.

Authentication: JWT token

curl https://localhost:8443/api/v1/auth/me \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."

POST /api/v1/auth/logout​

Logs out the current user. Currently client-side only (discards token).

Authentication: JWT token

curl -X POST https://localhost:8443/api/v1/auth/logout \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."

Admin Endpoints​

GET /api/v1/admin/info​

Returns Nekzus instance information.

Authentication: IP-based (local) or JWT

curl https://localhost:8443/api/v1/admin/info

GET /api/v1/stats​

Returns aggregated system statistics.

Authentication: IP-based (local) or JWT

curl https://localhost:8443/api/v1/stats

GET /api/v1/activity/recent​

Returns recent activity events.

Authentication: IP-based (local) or JWT

ParameterTypeDefaultDescription
limitquery50Maximum events to return
offsetquery0Number of events to skip
curl "https://localhost:8443/api/v1/activity/recent?limit=10"

GET /api/v1/audit-logs​

Returns audit logs with optional filtering.

Authentication: JWT token (strict)

ParameterTypeDescription
actionqueryFilter by action type
actorqueryFilter by actor (device/user ID)
limitqueryMaximum logs to return (default: 100, max: 1000)
offsetqueryNumber of logs to skip
curl "https://localhost:8443/api/v1/audit-logs?limit=50" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."

Apps and Routes​

GET /api/v1/apps​

Returns all registered applications with health status.

Authentication: IP-based (local) or JWT with read:catalog scope

curl https://localhost:8443/api/v1/apps

GET /api/v1/apps/{appId}/favicon​

Returns the favicon for an application.

Authentication: IP-based (local) or JWT

curl https://localhost:8443/api/v1/apps/grafana/favicon -o favicon.ico

GET /api/v1/routes​

Returns all registered proxy routes.

Authentication: IP-based (local) or JWT

curl https://localhost:8443/api/v1/routes

PUT /api/v1/routes/{routeId}​

Updates an existing route.

Authentication: IP-based (local) or JWT with write:* scope

curl -X PUT https://localhost:8443/api/v1/routes/route_grafana \
-H "Content-Type: application/json" \
-d '{
"routeId": "route_grafana",
"appId": "grafana",
"pathBase": "/apps/grafana/",
"to": "http://grafana:3000",
"websocket": true,
"icon": "chart-line"
}'

DELETE /api/v1/routes/{routeId}​

Deletes a route.

Authentication: IP-based (local) or JWT with write:* scope

curl -X DELETE https://localhost:8443/api/v1/routes/route_grafana

Discovery​

GET /api/v1/discovery/proposals​

Returns pending service discovery proposals.

Authentication: IP-based (local) or JWT

curl https://localhost:8443/api/v1/discovery/proposals

POST /api/v1/discovery/proposals/{proposalId}/approve​

Approves a discovery proposal, adding it to the catalog.

Authentication: IP-based (local) or JWT with write:* scope

curl -X POST https://localhost:8443/api/v1/discovery/proposals/proposal_abc123/approve \
-H "Content-Type: application/json" \
-d '{"port": 3000}'

POST /api/v1/discovery/proposals/{proposalId}/dismiss​

Dismisses a discovery proposal.

Authentication: IP-based (local) or JWT with write:* scope

curl -X POST https://localhost:8443/api/v1/discovery/proposals/proposal_abc123/dismiss

POST /api/v1/discovery/rediscover​

Triggers a fresh discovery scan by clearing dismissed proposals.

Authentication: IP-based (local) or JWT

curl -X POST https://localhost:8443/api/v1/discovery/rediscover

Devices​

GET /api/v1/devices​

Returns all paired devices.

Authentication: IP-based (local) or JWT

ParameterTypeDefaultDescription
limitquery-1Maximum devices to return (-1 = no limit)
offsetquery0Number of devices to skip
curl https://localhost:8443/api/v1/devices

GET /api/v1/devices/{deviceId}​

Returns details for a specific device.

Authentication: IP-based (local) or JWT

curl https://localhost:8443/api/v1/devices/dev-a1b2c3d4

PATCH /api/v1/devices/{deviceId}​

Updates device metadata.

Authentication: IP-based (local) or JWT

curl -X PATCH https://localhost:8443/api/v1/devices/dev-a1b2c3d4 \
-H "Content-Type: application/json" \
-d '{"deviceName": "John'\''s New iPhone"}'

DELETE /api/v1/devices/{deviceId}​

Revokes device access. All existing tokens become invalid.

Authentication: IP-based (local) or JWT

curl -X DELETE https://localhost:8443/api/v1/devices/dev-a1b2c3d4

API Keys​

GET /api/v1/apikeys​

Returns all API keys (without the actual key values).

Authentication: IP-based (local) or JWT with access:admin scope

curl https://localhost:8443/api/v1/apikeys

POST /api/v1/apikeys​

Creates a new API key.

Authentication: IP-based (local) or JWT with access:admin scope

One-Time Display

The full API key is only returned once at creation. Store it securely.

curl -X POST https://localhost:8443/api/v1/apikeys \
-H "Content-Type: application/json" \
-d '{
"name": "Production CI/CD Pipeline",
"scopes": ["read:catalog", "read:events"],
"expiresAt": "2026-01-15T00:00:00Z"
}'

GET /api/v1/apikeys/{keyId}​

Returns details for a specific API key.

Authentication: IP-based (local) or JWT with access:admin scope

curl https://localhost:8443/api/v1/apikeys/key_abc123def456

DELETE /api/v1/apikeys/{keyId}​

Revokes or permanently deletes an API key.

Authentication: IP-based (local) or JWT with access:admin scope

ParameterTypeDefaultDescription
permanentqueryfalsePermanently delete the key
curl -X DELETE https://localhost:8443/api/v1/apikeys/key_abc123def456

Containers​

Container management endpoints require Docker integration to be enabled.

Runtime Support

Nekzus supports both Docker and Kubernetes runtimes. Use the runtime query parameter to specify the target runtime.

GET /api/v1/containers​

Lists all containers from configured runtimes.

Authentication: IP-based (local) or JWT

ParameterTypeDescription
runtimequeryFilter by runtime: docker or kubernetes
namespacequeryKubernetes namespace filter
curl https://localhost:8443/api/v1/containers

GET /api/v1/containers/{containerId}​

Returns detailed information about a container.

Authentication: IP-based (local) or JWT

curl https://localhost:8443/api/v1/containers/abc123def456

POST /api/v1/containers/{containerId}/start​

Starts a container asynchronously. Returns 202 Accepted immediately.

Authentication: IP-based (local) or JWT with write:* scope

curl -X POST https://localhost:8443/api/v1/containers/abc123def456/start

WebSocket Notification:

{
"type": "container.start.completed",
"data": {
"containerId": "abc123def456",
"status": "started",
"message": "Container started successfully",
"timestamp": 1701388801
}
}

POST /api/v1/containers/{containerId}/stop​

Stops a container asynchronously.

Authentication: IP-based (local) or JWT with write:* scope

ParameterTypeDefaultDescription
timeoutquery10Grace period in seconds (1-300)
curl -X POST "https://localhost:8443/api/v1/containers/abc123def456/stop?timeout=30"

POST /api/v1/containers/{containerId}/restart​

Restarts a container asynchronously.

Authentication: IP-based (local) or JWT with write:* scope

ParameterTypeDefaultDescription
timeoutquery10Grace period in seconds (1-300)
curl -X POST https://localhost:8443/api/v1/containers/abc123def456/restart

GET /api/v1/containers/{containerId}/stats​

Returns resource usage statistics for a container.

Authentication: IP-based (local) or JWT

curl https://localhost:8443/api/v1/containers/abc123def456/stats

GET /api/v1/containers/stats​

Returns stats for all running containers.

Authentication: IP-based (local) or JWT

curl https://localhost:8443/api/v1/containers/stats

Bulk Operations​

POST /api/v1/containers/start-all​

Starts all stopped containers.

POST /api/v1/containers/stop-all​

Stops all running containers.

POST /api/v1/containers/restart-all​

Restarts all containers.

POST /api/v1/containers/batch​

Performs operations on multiple containers.

curl -X POST https://localhost:8443/api/v1/containers/batch \
-H "Content-Type: application/json" \
-d '{
"operation": "restart",
"containerIds": ["abc123", "def456", "ghi789"]
}'

Toolbox​

One-click Docker Compose service deployment.

GET /api/v1/toolbox/services​

Lists all available services in the toolbox catalog.

Authentication: IP-based (local) or JWT

ParameterTypeDescription
categoryqueryFilter by category
curl https://localhost:8443/api/v1/toolbox/services

GET /api/v1/toolbox/services/{id}​

Returns details for a specific service template.

Authentication: IP-based (local) or JWT

POST /api/v1/toolbox/deploy​

Deploys a service from the toolbox.

Authentication: IP-based (local) or JWT

curl -X POST https://localhost:8443/api/v1/toolbox/deploy \
-H "Content-Type: application/json" \
-d '{
"serviceId": "portainer",
"serviceName": "my-portainer",
"envVars": {
"ADMIN_PASSWORD": "secure-password"
},
"customPort": 9000,
"autoStart": true
}'

GET /api/v1/toolbox/deployments​

Lists all deployments.

Authentication: IP-based (local) or JWT

ParameterTypeDescription
statusqueryFilter by status

GET /api/v1/toolbox/deployments/{id}​

Returns deployment status.

Authentication: IP-based (local) or JWT

DELETE /api/v1/toolbox/deployments/{id}​

Removes a deployment.

Authentication: IP-based (local) or JWT

ParameterTypeDefaultDescription
removeVolumesqueryfalseAlso remove associated volumes

Scripts​

Script execution and workflow automation.

GET /api/v1/scripts​

Lists all registered scripts.

Authentication: IP-based (local) or JWT

ParameterTypeDescription
categoryqueryFilter by category

GET /api/v1/scripts/available​

Lists scripts found in the scripts directory that haven't been registered.

Authentication: IP-based (local) or JWT

POST /api/v1/scripts​

Registers a new script.

Authentication: IP-based (local) or JWT

curl -X POST https://localhost:8443/api/v1/scripts \
-H "Content-Type: application/json" \
-d '{
"name": "Backup Database",
"description": "Creates a database backup",
"category": "maintenance",
"scriptPath": "/scripts/backup-db.sh",
"timeoutSeconds": 300,
"parameters": [
{
"name": "output_dir",
"type": "string",
"required": true,
"default": "/backups"
}
]
}'

GET /api/v1/scripts/{id}​

Returns script details.

PUT /api/v1/scripts/{id}​

Updates a script.

DELETE /api/v1/scripts/{id}​

Deletes a script.

POST /api/v1/scripts/{id}/execute​

Executes a script.

Authentication: IP-based (local) or JWT

curl -X POST https://localhost:8443/api/v1/scripts/backup-database/execute \
-H "Content-Type: application/json" \
-d '{
"parameters": {
"output_dir": "/backups/daily"
},
"dryRun": false
}'

POST /api/v1/scripts/{id}/dry-run​

Executes a script in dry-run mode.

GET /api/v1/executions​

Lists script executions.

ParameterTypeDescription
scriptIdqueryFilter by script ID
statusqueryFilter by status
limitqueryMaximum results (default: 50, max: 100)
offsetquerySkip results

GET /api/v1/executions/{id}​

Returns execution details.

Workflows​

GET /api/v1/workflows​

Lists all workflows.

POST /api/v1/workflows​

Creates a workflow.

GET /api/v1/workflows/{id}​

Returns workflow details.

DELETE /api/v1/workflows/{id}​

Deletes a workflow.

Schedules​

GET /api/v1/schedules​

Lists all schedules.

POST /api/v1/schedules​

Creates a schedule.

curl -X POST https://localhost:8443/api/v1/schedules \
-H "Content-Type: application/json" \
-d '{
"scriptId": "backup-database",
"cronExpression": "0 2 * * *",
"parameters": {"output_dir": "/backups/nightly"},
"enabled": true
}'

GET /api/v1/schedules/{id}​

Returns schedule details.

DELETE /api/v1/schedules/{id}​

Deletes a schedule.


Certificates​

TLS certificate management.

POST /api/v1/certificates/generate​

Generates a new self-signed certificate.

Authentication: JWT token

curl -X POST https://localhost:8443/api/v1/certificates/generate \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
-H "Content-Type: application/json" \
-d '{
"domains": ["localhost", "192.168.1.100", "nekzus.local"],
"provider": "self-signed"
}'

GET /api/v1/certificates​

Lists all certificates.

Authentication: JWT token

{
"certificates": [
{
"domain": "localhost",
"issuer": "Nekzus Self-Signed CA",
"not_before": "2025-01-15T00:00:00Z",
"not_after": "2026-01-15T00:00:00Z",
"sans": ["localhost", "192.168.1.100"],
"fingerprint": "SHA256:abc123...",
"expires_in_days": 365
}
],
"count": 1
}

GET /api/v1/certificates/suggest​

Suggests domains for certificate generation based on local network.

Authentication: JWT token

{
"suggestions": ["localhost", "macbook-pro.local", "192.168.1.100"],
"count": 3
}

GET /api/v1/certificates/{domain}​

Returns certificate details for a domain.

DELETE /api/v1/certificates/{domain}​

Deletes a certificate.


Backups​

Backup and disaster recovery.

GET /api/v1/backups​

Lists all backups.

Authentication: IP-based (local) or JWT

POST /api/v1/backups​

Creates a new backup.

Authentication: IP-based (local) or JWT

curl -X POST https://localhost:8443/api/v1/backups \
-H "Content-Type: application/json" \
-d '{"description": "Pre-upgrade backup"}'

GET /api/v1/backups/{id}​

Returns backup details.

DELETE /api/v1/backups/{id}​

Deletes a backup.

POST /api/v1/backups/{id}/restore​

Restores from a backup.

curl -X POST https://localhost:8443/api/v1/backups/backup_123/restore \
-H "Content-Type: application/json" \
-d '{
"restoreApps": true,
"restoreRoutes": true,
"restoreDevices": false
}'

GET /api/v1/backups/scheduler/status​

Returns backup scheduler status.

POST /api/v1/backups/scheduler/trigger​

Triggers a scheduled backup manually.


System​

GET /api/v1/system/resources​

Returns system resource usage (CPU, RAM, disk).

Authentication: IP-based (local) or JWT

curl https://localhost:8443/api/v1/system/resources

GET /api/v1/stats/quick​

Returns quick stats optimized for mobile/widgets.

Authentication: JWT token (strict)

GET /api/v1/services/{appId}/health​

Returns health status for a specific service.

Authentication: IP-based (local) or JWT

curl https://localhost:8443/api/v1/services/grafana/health

Webhooks​

External notification endpoints.

POST /api/v1/webhooks/activity​

Creates an activity event via webhook.

Authentication: API key or JWT

curl -X POST https://localhost:8443/api/v1/webhooks/activity \
-H "X-API-Key: nekzus_abc123..." \
-H "Content-Type: application/json" \
-d '{
"message": "Deployment completed",
"icon": "CheckCircle",
"iconClass": "success",
"details": "Version 2.0.0 deployed successfully",
"deviceIds": ["dev-a1b2c3d4"]
}'

POST /api/v1/webhooks/notify​

Sends an arbitrary notification via WebSocket.

Authentication: API key or JWT

curl -X POST https://localhost:8443/api/v1/webhooks/notify \
-H "X-API-Key: nekzus_abc123..." \
-H "Content-Type: application/json" \
-d '{
"type": "custom_event",
"data": {
"title": "Build Complete",
"status": "success"
},
"deviceIds": []
}'

Federation​

Peer-to-peer federation for multi-Nexus deployments.

GET /api/v1/federation/peers​

Lists all federation peers.

Authentication: IP-based (local) or JWT

GET /api/v1/federation/peers/{id}​

Returns peer details.

DELETE /api/v1/federation/peers/{id}​

Removes a peer from the federation.

POST /api/v1/federation/sync​

Triggers a catalog sync with all peers.

GET /api/v1/federation/status​

Returns federation status and health.

{
"enabled": true,
"local_peer_id": "peer_abc123",
"local_peer_name": "nekzus-primary",
"peer_count": 3,
"peers_by_status": {
"connected": 2,
"disconnected": 1
},
"running": true
}

WebSocket​

Real-time bidirectional communication.

GET /api/v1/ws​

Establishes a WebSocket connection for real-time updates.

Rate Limit: 6 req/min, burst 3

Connection Flow​

  1. Client connects to /api/v1/ws
  2. Client sends auth message with JWT token
  3. Server responds with auth_success or auth_failed
  4. Server sends hello message with connection info
  5. Bidirectional messaging with ping/pong keepalive

Authentication Message​

{
"type": "auth",
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
}

Message Types​

TypeDirectionDescription
authClient -> ServerAuthentication request
auth_successServer -> ClientAuthentication succeeded
auth_failedServer -> ClientAuthentication failed
helloServer -> ClientConnection established
ping / pongBidirectionalKeepalive
discoveryServer -> ClientService discovery event
config_reloadServer -> ClientConfiguration changed
device_pairedServer -> ClientNew device paired
device_revokedServer -> ClientDevice access revoked
health_changeServer -> ClientService health changed
webhookServer -> ClientWebhook notification
container.start.completedServer -> ClientContainer started
container.stop.completedServer -> ClientContainer stopped
container.restart.completedServer -> ClientContainer restarted
container.logs.dataServer -> ClientContainer log data
notification_ackClient -> ServerNotification acknowledged

Example: Subscribe to Container Logs​

{
"type": "container.logs.subscribe",
"data": {
"containerId": "abc123def456",
"tail": 100,
"follow": true,
"timestamps": true
}
}

Metrics​

GET /metrics​

Prometheus metrics endpoint.

Authentication: None Rate Limit: 30 req/min

Returns Prometheus-formatted metrics for monitoring.

curl https://localhost:8443/metrics

Reverse Proxy​

/apps/{appId}/*​

Proxies requests to registered applications.

Authentication: IP-based (local) or JWT (configurable per route)

The proxy supports:

  • HTTP/HTTPS proxying
  • WebSocket upgrades (when enabled on route)
  • Server-Sent Events (SSE)
  • Path prefix stripping
  • Header forwarding
  • Response caching (configurable)

Example:

# Access Grafana through the proxy
curl https://localhost:8443/apps/grafana/

Session Cookies​

Mobile webview session persistence.

GET /api/v1/session-cookies​

Lists stored session summaries (no cookie values).

Authentication: JWT token (strict)

DELETE /api/v1/session-cookies​

Clears all sessions for the device.

DELETE /api/v1/session-cookies/{appId}​

Clears sessions for a specific app.


Export​

Container configuration export for migration.

GET /api/v1/containers/{containerId}/export/preview​

Previews export configuration.

Authentication: IP-based (local) or JWT

POST /api/v1/containers/{containerId}/export​

Exports container configuration.

Authentication: IP-based (local) or JWT

POST /api/v1/containers/batch/export/preview​

Previews batch export configuration.

POST /api/v1/containers/batch/export​

Exports multiple container configurations.