Nebula stores what your agents learn so they can retrieve it later. Five nouns carry the whole model.
The hierarchy
Resources belong to this hierarchy:
Organization → Account → Workspace → Collection → MemoryYour verified credential selects the organization. URLs name the resource:
/v2/workspaces discovers accessible workspaces,
/v2/workspaces/{workspace_id}/collections lists or creates collections, and
/v2/collections/{collection_id}/memories reads or stores memories. The server
resolves the collection's workspace and checks your current access. SDK
constructors need only an API key.
Organization — the billing and ownership boundary.
Account — a tenant inside an organization.
Workspace — an isolated environment. Workspaces are read-only over the
public API: list them with workspaces.list, fetch one with workspaces.get.
A workspace is active or suspended; calls against a suspended workspace
fail with workspace_suspended.
Collection — the unit you create and delete, and the boundary that search
runs inside. A collection has a collection_id you choose, a name, and
optional metadata.
Memory — the thing you store. A memory has a memory_id you choose, a
kind, and content. See Memories.
Two things worth knowing early
Identifiers are UUIDs, and the clients generate them. collection_id,
memory_id and retrieval_id are format: uuid on the wire — a human-readable
slug is rejected. The TypeScript and Python clients generate one when you omit
it, so the common path is to let them.
Pass your own UUID when you want the write to be idempotent: the same id with the same content is safe to retry, which matters because the store path is asynchronous. Note that path parameters are plain strings up to 128 characters — only the create/store/search bodies constrain the format.
Writes are asynchronous. memory.store, memory.delete and
collections.delete return 202 with an
operation rather than the finished resource. A memory is
not searchable the moment the call returns — it becomes searchable when its
operation reports search_ready.
Reads (workspaces.*, collections.get, collections.list, memory.get,
memory.list, memory.search) are synchronous.