Agents API: deploy and manage agent runtimes
Deploy, start, stop, restart, and monitor Nora agent containers. Covers all lifecycle endpoints including live stats and gateway URL resolution.The Agents API is the core of Nora. You use it to deploy new agent containers, control their lifecycle (start, stop, restart, redeploy, delete), poll live resource stats, and retrieve the gateway UI URL for direct browser access. Read endpoints include agents you own directly and agents shared with you through workspaces. Destructive deletion remains limited to the direct agent owner. Agent export and live-filesystem routes are session-only for every backend. Their allowed runtime roots can contain provider credentials, gateway secrets, paired-device state, and conversation sessions, so workspace API keys cannot call
/agents/:id/export or /agents/:id/files/* even when
the agent is assigned to the key’s workspace.
An agent moves through the following statuses:
queued → deploying → running. From running
it can transition to warning, error, or stopped. Use POST /agents/:id/redeploy to recover
an agent that is in warning, error, or stopped state.List agents
Returns all agents accessible to the authenticated user, ordered by creation time (newest first). Usescope=owned when a UI or integration needs only directly owned agents, such as assignment candidates or quota counters.
For workspace API keys, both accessible and owned are evaluated inside the key’s exact bound
workspace, and the response does not include assignments from another workspace.
Query parameters
string
Optional.
accessible (default) includes directly owned and workspace-shared agents. owned
returns only directly owned agents.Deploy an agent
Create and queue a new agent for deployment. The agent record is created immediately with statusqueued; the actual container is started asynchronously by the deployment worker.
Request body
string
Human-readable agent name. Maximum 100 characters. Control characters are stripped. Defaults to
OpenClaw-Agent-<random>.string
default:"server default"
Runtime contract to deploy:
openclaw or hermes. If omitted, Nora uses the control plane’s
configured default runtime family.string
default:"server default"
Placement family: GA
docker or k8s, or experimental remote-docker or proxmox. Registered
targets still require their concrete execution_target_id; Nora does not choose a cluster or
remote host automatically.string
default:"derived from deploy_target"
Concrete placement id. Use
docker for local Docker, k8s:<cluster-id> for an Admin-registered
Kubernetes cluster, remote:<host-id> for a registered Remote Docker host, or proxmox for the
configured Proxmox target.string
default:"standard"
standard or experimental nemoclaw. Hermes supports only standard. nemoclaw requires the
profile to be enabled, and NemoClaw on Proxmox remains blocked. The legacy sandbox field is
still accepted as an alias, but new clients should send sandbox_profile.number
default:"operator deployment default (fallback 1)"
Number of virtual CPUs. On self-hosted deployments, an explicit value is clamped to operator
limits. PaaS ignores the request value and uses the platform-wide deployment default.
number
default:"operator deployment default (fallback 1024)"
RAM allocation in MB. PaaS ignores the request value and uses the platform-wide deployment
default. Minimum
512 when a self-hosted caller supplies a value.number
default:"operator deployment default (fallback 10)"
Requested disk size in GB. PaaS ignores the request value and uses the platform-wide deployment
default. Minimum
1 when a self-hosted caller supplies a value. Kubernetes and Proxmox use this
value for provisioned storage; Docker and Remote Docker store it as deployment metadata but do not
enforce it as a container storage quota.string
Optional migration draft UUID. Migration drafts can contain complete managed state, so this field
is session-only and returns
403 session_required when supplied with a workspace API key.Response
Returns the newly created agent record. When a workspace API key creates a non-Remote agent, Nora creates the agent and its assignment to the key’s workspace in one database statement before publishing any deployment job. Adoption and duplication follow the same workspace-binding rule.string
UUID of the new agent.
string
Agent display name.
string
queued — deployment is pending.string
standard or nemoclaw.string
Resolved runtime family,
openclaw or hermes.string
Resolved placement family, such as
docker, k8s, or remote-docker.string
Exact selected target, such as
docker, k8s:aks-eastus2, or remote:build-host.string
Resolved sandbox profile,
standard or nemoclaw.number
Allocated vCPU count.
number
Allocated RAM in MB.
number
Resolved disk request in GB. For Docker and Remote Docker this is metadata, not an enforced
storage quota.
string
Scheduler node assigned to this agent.
string
Generated runtime resource name, such as a Docker container name or Kubernetes Deployment name.
string
ISO 8601 creation timestamp.
Remote Docker and Hermes
Remote-host administration is intentionally session-only. Register and manually test a personal host in App -> Remote Hosts, or have a platform admin create a platform host in Admin -> Remote Hosts, before using itsremote:<id> target. Workspace API keys cannot call personal
/remote-hosts or platform /admin/remote-hosts management endpoints, and every response masks
stored SSH private keys, passwords, and passphrases.
The dashboard currently lists registered Remote Docker hosts for OpenClaw only. Hermes Remote Docker
is an experimental advanced API path. After registration and testing, deploy it with a session JWT:
editor, admin, or owner role in a
workspace where it is shared. For a platform host, a platform admin, the all-accounts setting, a
direct-user grant, a matching user-group grant, or an editor+ workspace grant permits deployment.
A workspace viewer can see a granted host but cannot deploy to it. The created agent belongs to the
deploying user and is not automatically assigned to any workspace that supplied host access.
Remote Docker placement and every existing-agent Remote Docker operation are session-only. A
workspace API key receives 403 session_required before host lookup, persistence, queue publication,
gateway/file access, or lifecycle cleanup when the source, destination, or persisted agent uses
Remote Docker. API-key deploys to non-Remote targets continue to use the normal agents:write scope
and are automatically assigned to the key’s workspace. After a session Remote Docker deployment,
assign the agent explicitly if workspace access is required. Follow Connect a Remote Docker
host for setup, then use the backend
reference for the full test, networking,
capacity, sharing, and revocation contract.
Adopt an external runtime
Register an already-running OpenClaw or Hermes endpoint without provisioning new compute. Nora stores the gateway credential encrypted, monitors and proxies the runtime, and marks the agent asexternal. Lifecycle actions are unavailable because Nora does not own the process; deleting the
agent only deregisters it.
runtime_family, either url or host plus optional port, and a cryptographically
generated gateway_token. The token must contain at least 32 characters, have no whitespace, and
be generated from a cryptographically secure random source. Hosted PaaS accepts only public
endpoints; self-hosted operators may adopt a private-network endpoint that passes the gateway proxy’s
host and port safety checks. Nora rechecks this contract when an adopted runtime connects, so legacy
rows with weak credential shapes fail closed until the external runtime token is rotated.
agents:write, and successful adoptions are atomically assigned to the key’s bound
workspace.
Get agent
Fetch a single agent by ID. The status is reconciled against the live container state on every call — if the container has stopped unexpectedly the stored status is updated before the response is returned.Path parameters
string
required
Agent UUID.
Start agent
Start a stopped agent’s existing container.Path parameters
string
required
Agent UUID.
status: "running".
Stop agent
Gracefully stop a running agent’s container. The status is set tostopped regardless of whether the container was already stopped.
Path parameters
string
required
Agent UUID.
status: "stopped".
Restart agent
Restart a running agent’s container in place (does not redeploy).Path parameters
string
required
Agent UUID.
Response
boolean
true when the container was restarted.Redeploy agent
Re-queue an agent for a full redeploy. Only available when the agent is inwarning, error, or stopped state. Clears the existing container reference and submits a new deployment job. For Kubernetes-backed agents, the job deletes the previous Deployment, Service, and bootstrap ConfigMap before creating the replacement.
Path parameters
string
required
Agent UUID.
Response
boolean
true when the redeploy job was queued.string
queued.Delete agent
Permanently delete an agent and destroy its container.Path parameters
string
required
Agent UUID.
Response
boolean
true when the agent was deleted.Get live stats
Return a single real-time resource snapshot from the running container. Polls the Docker daemon directly.Path parameters
string
required
Agent UUID.
Response
number
CPU utilisation as a percentage across all cores.
number
Actual memory usage in MB (excludes page cache).
number
Memory limit allocated to the container in MB.
number
Memory usage as a percentage of the limit.
number
Total received bytes across all network interfaces, in MB.
number
Total transmitted bytes across all network interfaces, in MB.
number
Total block device read bytes in MB.
number
Total block device write bytes in MB.
number
Number of processes running inside the container.
number
Seconds since the container last started.
boolean
Whether the container is currently running.
Get stats history
Return time-series container stats stored by the background collector (sampled every 10 seconds, retained for 24 hours).Path parameters
string
required
Agent UUID.
Query parameters
string
default:"15m"
Preset time window. One of
5m, 15m, 30m, 1h, 6h, 24h. Ignored when from and to are
provided.string
ISO 8601 start timestamp for a custom range. Must be used together with
to.string
ISO 8601 end timestamp for a custom range. Must be used together with
from.number
CPU % at sample time.
number
Memory usage in MB at sample time.
number
Memory limit in MB.
number
Memory % at sample time.
number
Cumulative received MB at sample time.
number
Cumulative transmitted MB at sample time.
number
Cumulative disk read MB at sample time.
number
Cumulative disk write MB at sample time.
number
Process count at sample time.
string
ISO 8601 timestamp when the sample was recorded.
Get gateway URL
Resolve the HTTP URL of the agent’s embedded gateway control UI. The agent must be inrunning state.
Path parameters
string
required
Agent UUID.
Response
string
Full HTTP URL to the gateway UI, e.g.
http://localhost:32101.number
Resolved host port number.
Get agent budget
List an agent’s LLM spend budgets with current spend attached. When spend crosses 100% of any cap, Nora pauses the runtime automatically (paused_reason becomes budget_exceeded); a warning event fires at the soft threshold.
Response
array
One entry per period (
daily, weekly, monthly) with limitUsd, softThresholdPct,
currentUsd, pct, and bucket (none | soft | hard).string | null
budget_exceeded while the agent is paused by a cap.Set agent budget
Create or update the budget for one period. Requires theagents:write scope.
Request body
string
required
daily, weekly, or monthly.number
required
Hard cap in USD. Crossing 100% pauses the runtime.
number
Warning threshold percent (default
80). Emits agent.budget_soft_exceeded.Delete agent budget
paused_reason, and the budget sweep re-pauses it within a minute if a cap is still exceeded.
