Skip to main content

Nora REST API overview and base URLs

A complete reference for the Nora REST API: base URLs, authentication, rate limiting, content type, health check, and public config endpoints.
The Nora REST API is a JSON-over-HTTP interface that lets you deploy agents, manage LLM providers, configure channels, and observe platform health programmatically. Every request must be authenticated — with either a session JWT or a workspace API key — except for the public health, config, and webhook endpoints listed below. All request and response bodies use application/json.
Every Nora instance also serves a machine-readable OpenAPI 3.1 spec at GET /api/api.json and an interactive API reference at /api/api-docs. The spec covers agents, schedules and versions, monitoring, LLM providers, auth, workspaces, API keys, alerts, integrations, channels, backups, Agent Hub, self-hosted-only remote hosts, and the admin doctor endpoint. CI drift-tests those operations against the actual routers, so documented routes cannot silently disappear; browser-only admin and experimental surfaces remain intentionally outside the spec.

Base URL

The Nora API is served under the /api path of your Nora origin. In local mode this is:
If you configured a public domain, replace http://localhost:8080 with your origin — for example:
All paths in this reference omit the /api prefix for brevity. When making real requests, include /api — for example http://localhost:8080/api/agents.

Authentication

Protected endpoints accept either of two credentials. 1. A session JWT — supplied as a Bearer token:
Obtain one via POST /auth/login. Tokens are valid for 7 days and are also accepted as an HttpOnly session cookie. See the Authentication page for the full login flow. 2. A workspace API key — supplied as a Bearer token (the key begins with nora_) or in the X-Api-Key header (alias X-Nora-Api-Key):
API keys carry scopes that are enforced per endpoint, drawn from the recognized v1 set: Session-authenticated requests skip scope checks (role-based guards apply instead). A request whose API key lacks the required scope is rejected with 403 and { "code": "missing_scope" }. Explicit Authorization, X-Api-Key, and X-Nora-Api-Key credentials take precedence over the ambient session cookie. Nora rejects conflicting explicit credentials with 400 and { "code": "conflicting_auth" } instead of silently selecting the more privileged identity. Agent scopes are also workspace-bound: an API key can list or address only agents assigned to the workspace where the key was issued, even when its issuing user owns or can access agents elsewhere. Non-Remote agents created through deploy, adopt, or duplicate are atomically assigned to that workspace before queue or runtime work begins. The issuing user must remain an active user and a member or owner of the bound workspace. Removing that issuer makes the key unusable; issue a replacement from another workspace admin instead of allowing a retained credential to impersonate a deleted or removed account.
Some operations are session-only and reject API keys even with a valid scope — including demo activation, migration-draft deployment, Remote Docker placement and existing-agent operations, user-global LLM-provider credentials, platform-wide performance monitoring, workspace writes, and API-key issuance. These return 403 with { "code": "session_required" }. Workspace monitoring and cost reads remain available with their documented scopes, but are restricted to the key’s exact bound workspace.

Rate limiting

Two rate-limit tiers apply to every request: When you exceed a limit the API returns 429 Too Many Requests with:

Content type

All request bodies must be sent as JSON. Set the header on every mutating request:

Public endpoints

These endpoints do not require authentication.

Health check

Returns {"status":"ok"} after the server has finished its startup sequence, including database migrations and catalog seeding. The API does not bind its HTTP listener until that sequence succeeds.

Platform config

Returns the platform mode, runtime/deploy catalogs, safe public feature capabilities, and, in self-hosted deployments, the operator-configured resource limits.
string
Platform mode. One of selfhosted or paas.
object | null
Resource limits when mode is not paas, otherwise null.
boolean
Whether Stripe billing is active.
object
Whether the exact openclaw + local docker + standard runtime tuple required by one-click demo activation is enabled. Includes the tuple, requiresLiveDocker: true, and a public issue when unavailable. The mutation still checks the Docker daemon live before queueing work.

NemoClaw config

Returns the NemoClaw sandbox configuration for the current deployment.
boolean
Whether the NemoClaw sandbox is enabled on this server.
string
Default NVIDIA model identifier.
string
OCI image used for NemoClaw sandboxes.
string[]
List of supported NVIDIA model identifiers.

Quick example

The following request authenticates and lists your agents: