Loom exposes its full functionality via a versioned REST API.
All endpoints are rooted at /api/v1.
Authentication
All endpoints except POST /api/v1/login, the OAuth2 routes, /api/v1/health and the OpenAPI
document itself require a JWT bearer token:
Authorization: Bearer <token>
Obtain a token via the Authentication flow.
Base URL
http://<host>:8092/api/v1
Default port is 8092 (overridable via LOOM_SERVER_REST_PORT).
OpenAPI Specification
The complete API surface — every route, its path and query parameters, its request and response examples and the authentication it requires — is described by an OpenAPI 3.0 document. It is generated from the server’s endpoint registry, never written by hand, so it cannot drift away from the running code.
Download the spec
Feed it to a client generator, an API workbench (Postman, Insomnia, Bruno) or your editor's HTTP client.
Explore it
Browse the API by resource group in the explorer below — filter by keyword, expand an operation to see its parameters and examples, and link straight to it.
A running server serves the same document for its own endpoint set, with its own address filled in as the server URL:
curl http://localhost:8092/api/v1/openapi # YAML (default)
curl http://localhost:8092/api/v1/openapi.yaml # YAML
curl http://localhost:8092/api/v1/openapi.json # JSON
Generating a typed client from the spec is a one-liner with any OpenAPI generator:
openapi-generator-cli generate \
-i https://metaloom.io/docs/examples/openapi.yaml \
-g python -o ./loom-client
|
Tip
|
Loom also ships a maintained, typed Java client — see Java Client. Prefer it over a generated one when you work in Java. |
API Explorer
The explorer below renders the bundled specification. Operations are grouped by resource; use the filter box to narrow the list, and expand an operation to see its parameters, request body and response examples.
To call a live server from here, set the server URL to your instance, click Authorize and paste a
JWT obtained from POST /api/v1/login or an API token from the
Loom UI admin area. Note that the API must allow your browser’s origin
(CORS) for in-page calls to succeed.
Endpoint Reference
The tables below are a reading guide to the most-used routes, grouped the way you are likely to need them. They are a summary — the API Explorer above is the complete and authoritative list.
Auth
| Method | Path | Description |
|---|---|---|
POST |
|
Login with username + password, returns a JWT and sets the session cookie |
GET |
|
Start the OAuth2 (BFF) flow — redirects to the identity provider |
GET |
|
Handle the identity provider callback and set the Loom JWT |
GET |
|
Clear the session cookie |
GET |
|
Load the currently authenticated user |
CRUD |
|
Manage long-lived API tokens |
Assets
| Method | Path | Description |
|---|---|---|
POST |
|
Create a new asset |
GET |
|
List assets (paged) |
POST |
|
Bulk-create assets |
POST |
|
Bulk-update assets |
GET |
|
Load asset by SHA-512 hash |
POST |
|
Update asset by SHA-512 hash |
DELETE |
|
Delete asset by SHA-512 hash |
GET |
|
Load asset by UUID |
POST |
|
Update asset by UUID |
DELETE |
|
Delete asset by UUID |
POST |
|
Add tag to asset |
DELETE |
|
Remove tag from asset |
POST |
|
Add reaction |
GET |
|
List reactions |
GET |
|
Load reaction |
POST |
|
Update reaction |
DELETE |
|
Delete reaction |
POST |
|
Upload binary data |
GET |
|
Download binary data |
DELETE |
|
Delete binary data |
POST |
|
Upsert a generic JSON component (schema-agnostic node result sink) |
GET |
|
List an asset’s JSON components |
GET |
|
List typed asset components |
POST |
|
Record a node-result ledger row (asset, nodeKind, nodeId) |
|
Tip
|
json-comps + node-results is the lightweight persistence path used by Cortex nodes. See
Cortex Examples.
|
Users
| Method | Path | Description |
|---|---|---|
POST |
|
Create user |
GET |
|
List users (paged) |
GET |
|
Load user |
POST |
|
Update user |
DELETE |
|
Delete user |
Groups
| Method | Path | Description |
|---|---|---|
POST |
|
Create group |
GET |
|
List groups |
GET |
|
Load group |
POST |
|
Update group |
DELETE |
|
Delete group |
Roles
| Method | Path | Description |
|---|---|---|
POST |
|
Create role |
GET |
|
List roles |
GET |
|
Load role |
POST |
|
Update role |
DELETE |
|
Delete role |
Tags
| Method | Path | Description |
|---|---|---|
POST |
|
Create tag |
GET |
|
List tags |
GET |
|
Load tag |
POST |
|
Update tag |
DELETE |
|
Delete tag |
Pipelines
Pipelines are versioned: each update creates a new immutable version. Runs are executed by Loom’s engine and delegated to registered Cortex workers — see Pipeline Mechanism.
| Method | Path | Description |
|---|---|---|
POST |
|
Create pipeline (writes version 1) |
GET |
|
List pipelines |
GET |
|
Load pipeline (latest version) |
POST |
|
Update pipeline (creates a new version) |
DELETE |
|
Delete pipeline |
POST |
|
Start a run (body: |
GET |
|
List run history with status + counters |
GET |
|
List versions |
GET |
|
Load a specific version |
POST |
|
Restore a version as a new version |
GET |
|
WebSocket: live pipeline run events |
Processors (Cortex workers)
| Method | Path | Description |
|---|---|---|
GET |
|
List registered Cortex workers and their state |
GET |
|
Load one worker (capabilities, node-kind restriction) |
GET |
|
WebSocket: the control channel Cortex workers connect to |
AI Agent — Chats
| Method | Path | Description |
|---|---|---|
POST |
|
Create a chat |
GET |
|
List chats |
GET/POST/DELETE |
|
Load / update / delete a chat |
POST |
|
Send a message; receive the agent run as an SSE stream |
DELETE |
|
Cancel the active run |
See Chat & AI Agent for the streaming event protocol.
AI Agent — Sessions, Skills, Memory
| Method | Path | Description |
|---|---|---|
CRUD |
|
Publishable snapshots of a chat’s working state |
CRUD |
|
User-owned skill instruction packages |
GET |
|
Browse published skills |
POST |
|
Install (copy) a published skill |
GET |
|
List the caller’s memory scopes with usage + quota |
GET |
|
List notes of a scope |
GET/POST/PUT/DELETE |
|
Read / create / upsert / delete a memory note |
Libraries
| Method | Path | Description |
|---|---|---|
POST |
|
Create library |
GET |
|
List libraries |
GET |
|
Load library |
POST |
|
Update library |
DELETE |
|
Delete library |
Collections
| Method | Path | Description |
|---|---|---|
POST |
|
Create collection |
GET |
|
List collections |
GET |
|
Load collection |
POST |
|
Update collection |
DELETE |
|
Delete collection |
Further Endpoints
Additional endpoints exist for: attachments, tasks, comments, reactions,
embeddings, spaces, annotations, persons, clusters, blacklists, pools (asset pools),
tokens (API keys), me, health, and the pipeline node metadata under pipeline/node-descriptors
and pipeline/content-types. Most follow the same CRUD pattern under /api/v1/<resource>.
Error Responses
All errors return the HTTP status code plus a JSON body carrying a human readable message:
{
"message": "Cannot find asset with uuid 'abc'"
}
| Code | Meaning |
|---|---|
400 |
Validation error, or a malformed path/query parameter |
401 |
Missing, expired or invalid token |
403 |
The user lacks the permission the operation requires |
404 |
No such resource |
409 |
Conflict — e.g. a chat run is already active, or a memory entry already exists |
500 |
Internal server error |
503 |
No processor available to accept a pipeline run |