Skip to main content

Overview

Query functions fetch data from the local SQLite database. All queries are type-safe and follow a consistent pattern.

Query Pattern

All queries follow this structure:
const result = await mediator.executeQuery({
  type: 'query.name',
  accountId: string,
  workspaceId: string,
  // ... query-specific parameters
});

Accounts

account.get

Get a single account by ID.
type
'account.get'
required
Query type identifier
accountId
string
required
Account ID to fetch
output
Account | null
Returns the account or null if not found
const account = await mediator.executeQuery({
  type: 'account.get',
  accountId: 'account-123'
});

account.list

List all accounts.
type
'account.list'
required
Query type identifier
output
Account[]
Array of all accounts
const accounts = await mediator.executeQuery({
  type: 'account.list'
});

account.metadata.list

List all metadata entries for an account.
type
'account.metadata.list'
required
Query type identifier
accountId
string
required
Account ID
const metadata = await mediator.executeQuery({
  type: 'account.metadata.list',
  accountId: 'account-123'
});

Workspaces

workspace.get

Get a single workspace.
type
'workspace.get'
required
Query type identifier
workspaceId
string
required
Workspace ID
accountId
string
required
Account ID
output
Workspace | null
Returns the workspace or null if not found
const workspace = await mediator.executeQuery({
  type: 'workspace.get',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

workspace.list

List all workspaces for an account.
type
'workspace.list'
required
Query type identifier
accountId
string
required
Account ID
output
Workspace[]
Array of workspaces
const workspaces = await mediator.executeQuery({
  type: 'workspace.list',
  accountId: 'account-123'
});

workspace.metadata.list

List workspace metadata (sidebar state, containers, pinned items).
type
'workspace.metadata.list'
required
Query type identifier
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
output
WorkspaceMetadata[]
Array of metadata entries including sidebar, containers, and pinned items
const metadata = await mediator.executeQuery({
  type: 'workspace.metadata.list',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

workspace.storage.get

Get storage usage information for a workspace.
type
'workspace.storage.get'
required
Query type identifier
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
const storage = await mediator.executeQuery({
  type: 'workspace.storage.get',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

Nodes

node.get

Get a single node by ID.
type
'node.get'
required
Query type identifier
nodeId
string
required
Node ID
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
output
LocalNode | null
Returns the node or null if not found. LocalNode is a union type that includes LocalSpaceNode, LocalPageNode, LocalDatabaseNode, LocalFolderNode, LocalFileNode, LocalChannelNode, LocalChatNode, LocalMessageNode, and LocalRecordNode.
const node = await mediator.executeQuery({
  type: 'node.get',
  nodeId: 'node-123',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

if (node?.type === 'page') {
  console.log('Page name:', node.attributes.name);
}

node.children.get

Get all children of a node.
type
'node.children.get'
required
Query type identifier
nodeId
string
required
Parent node ID
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
output
LocalNode[]
Array of child nodes
const children = await mediator.executeQuery({
  type: 'node.children.get',
  nodeId: 'folder-123',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

node.tree.get

Get the full tree structure starting from a node.
type
'node.tree.get'
required
Query type identifier
nodeId
string
required
Root node ID
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
const tree = await mediator.executeQuery({
  type: 'node.tree.get',
  nodeId: 'space-123',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});
Search nodes by text content.
type
'node.search'
required
Query type identifier
searchQuery
string
required
Search text
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
types
string[]
Filter by node types (e.g., [‘page’, ‘database’])
limit
number
Maximum number of results
offset
number
Pagination offset
titleOnly
boolean
Search only in titles, not content
dateRange
'today' | 'week' | 'month'
Filter by updated date
spaceId
string
Filter by space (root_id)
output
NodeSearchResult[]
Array of search results with snippets and ranking
const results = await mediator.executeQuery({
  type: 'node.search',
  searchQuery: 'project documentation',
  accountId: 'account-123',
  workspaceId: 'workspace-456',
  types: ['page', 'database'],
  limit: 20,
  titleOnly: false,
  dateRange: 'week'
});

results.forEach(result => {
  console.log(`${result.nameSnippet} (rank: ${result.rank})`);
  console.log(`Content: ${result.contentSnippet}`);
});

node.recent.list

Get recently accessed nodes.
type
'node.recent.list'
required
Query type identifier
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
const recent = await mediator.executeQuery({
  type: 'node.recent.list',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});
Get popular nodes based on interactions.
type
'node.popular.list'
required
Query type identifier
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
const popular = await mediator.executeQuery({
  type: 'node.popular.list',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

node.reaction.list

Get reactions for a node.
type
'node.reaction.list'
required
Query type identifier
nodeId
string
required
Node ID
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
output
NodeReaction[]
Array of reactions with user info and timestamps
const reactions = await mediator.executeQuery({
  type: 'node.reaction.list',
  nodeId: 'page-123',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

node.reactions.aggregate

Get aggregated reaction counts for a node.
type
'node.reactions.aggregate'
required
Query type identifier
nodeId
string
required
Node ID
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
output
NodeReactionCount[]
Array with reaction emoji, count, and whether current user reacted
const aggregated = await mediator.executeQuery({
  type: 'node.reactions.aggregate',
  nodeId: 'page-123',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

// Result: [{ reaction: '👍', count: 5, reacted: true }, ...]

Spaces

space.list

List all spaces in a workspace.
type
'space.list'
required
Query type identifier
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
output
LocalSpaceNode[]
Array of space nodes
const spaces = await mediator.executeQuery({
  type: 'space.list',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

Databases

database.list

List all databases in a workspace.
type
'database.list'
required
Query type identifier
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
output
LocalDatabaseNode[]
Array of database nodes
const databases = await mediator.executeQuery({
  type: 'database.list',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

database.view.list

List all views for a database.
type
'database.view.list'
required
Query type identifier
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
const views = await mediator.executeQuery({
  type: 'database.view.list',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

Records

record.list

List records in a database.
type
'record.list'
required
Query type identifier
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
output
LocalRecordNode[]
Array of record nodes
const records = await mediator.executeQuery({
  type: 'record.list',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});
Search records within a database.
type
'record.search'
required
Query type identifier
searchQuery
string
required
Search text
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
databaseId
string
required
Database ID to search within
exclude
string[]
Record IDs to exclude from results
output
LocalRecordNode[]
Array of matching records
const records = await mediator.executeQuery({
  type: 'record.search',
  searchQuery: 'task',
  accountId: 'account-123',
  workspaceId: 'workspace-456',
  databaseId: 'database-789',
  exclude: ['record-1', 'record-2']
});

record.field.value.count

Count distinct values for a field.
type
'record.field.value.count'
required
Query type identifier
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
const counts = await mediator.executeQuery({
  type: 'record.field.value.count',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

Users

user.get

Get a single user.
type
'user.get'
required
Query type identifier
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
output
User | null
Returns the user or null if not found
const user = await mediator.executeQuery({
  type: 'user.get',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

user.list

List all users in a workspace.
type
'user.list'
required
Query type identifier
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
output
User[]
Array of users
const users = await mediator.executeQuery({
  type: 'user.list',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});
Search users by name or email.
type
'user.search'
required
Query type identifier
searchQuery
string
required
Search text
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
exclude
string[]
User IDs to exclude from results
output
User[]
Array of matching users
const users = await mediator.executeQuery({
  type: 'user.search',
  searchQuery: 'john',
  accountId: 'account-123',
  workspaceId: 'workspace-456',
  exclude: ['user-1']
});

user.storage.get

Get storage usage for a user.
type
'user.storage.get'
required
Query type identifier
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
const storage = await mediator.executeQuery({
  type: 'user.storage.get',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

Files

file.list

List files in a folder.
type
'file.list'
required
Query type identifier
parentId
string
required
Parent folder ID
page
number
required
Page number for pagination
count
number
required
Items per page
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
output
LocalFileNode[]
Array of file nodes
const files = await mediator.executeQuery({
  type: 'file.list',
  parentId: 'folder-123',
  page: 0,
  count: 50,
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

local.file.get

Get local file path.
type
'local.file.get'
required
Query type identifier
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
const filePath = await mediator.executeQuery({
  type: 'local.file.get',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

upload.list

List file uploads.
type
'upload.list'
required
Query type identifier
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
const uploads = await mediator.executeQuery({
  type: 'upload.list',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

upload.list.pending

List pending file uploads.
type
'upload.list.pending'
required
Query type identifier
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
const pending = await mediator.executeQuery({
  type: 'upload.list.pending',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

download.list.manual

List manual downloads.
type
'download.list.manual'
required
Query type identifier
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
const downloads = await mediator.executeQuery({
  type: 'download.list.manual',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

temp.file.get

Get temporary file information.
type
'temp.file.get'
required
Query type identifier
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
const tempFile = await mediator.executeQuery({
  type: 'temp.file.get',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

file.download.request.get

Get file download request status.
type
'file.download.request.get'
required
Query type identifier
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
const downloadRequest = await mediator.executeQuery({
  type: 'file.download.request.get',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

Documents

document.get

Get a document’s CRDT state.
type
'document.get'
required
Query type identifier
documentId
string
required
Document ID (same as node ID)
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
output
Document | null
Returns the document or null if not found
const document = await mediator.executeQuery({
  type: 'document.get',
  documentId: 'page-123',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

document.state.get

Get document state vector.
type
'document.state.get'
required
Query type identifier
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
const state = await mediator.executeQuery({
  type: 'document.state.get',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

document.updates.list

List document updates/changes.
type
'document.updates.list'
required
Query type identifier
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
const updates = await mediator.executeQuery({
  type: 'document.updates.list',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

Messages

message.list

List messages in a channel or chat.
type
'message.list'
required
Query type identifier
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
const messages = await mediator.executeQuery({
  type: 'message.list',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

Chats

chat.list

List all chats in a workspace.
type
'chat.list'
required
Query type identifier
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
const chats = await mediator.executeQuery({
  type: 'chat.list',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

Servers

server.list

List all configured servers.
type
'server.list'
required
Query type identifier
output
Server[]
Array of server configurations
const servers = await mediator.executeQuery({
  type: 'server.list'
});

Emojis

emoji.get

Get a single emoji by ID.
type
'emoji.get'
required
Query type identifier
const emoji = await mediator.executeQuery({
  type: 'emoji.get'
});

emoji.get.by.skin.id

Get emoji by skin tone ID.
type
'emoji.get.by.skin.id'
required
Query type identifier
const emoji = await mediator.executeQuery({
  type: 'emoji.get.by.skin.id'
});

emoji.list

List all available emojis.
type
'emoji.list'
required
Query type identifier
const emojis = await mediator.executeQuery({
  type: 'emoji.list'
});
Search emojis by name or keyword.
type
'emoji.search'
required
Query type identifier
const emojis = await mediator.executeQuery({
  type: 'emoji.search'
});

emoji.category.list

List emoji categories.
type
'emoji.category.list'
required
Query type identifier
const categories = await mediator.executeQuery({
  type: 'emoji.category.list'
});

Icons

icon.list

List all available icons.
type
'icon.list'
required
Query type identifier
const icons = await mediator.executeQuery({
  type: 'icon.list'
});
Search icons by name.
type
'icon.search'
required
Query type identifier
const icons = await mediator.executeQuery({
  type: 'icon.search'
});

icon.category.list

List icon categories.
type
'icon.category.list'
required
Query type identifier
const categories = await mediator.executeQuery({
  type: 'icon.category.list'
});

Avatars

avatar.get

Get avatar data.
type
'avatar.get'
required
Query type identifier
accountId
string
required
Account ID
const avatar = await mediator.executeQuery({
  type: 'avatar.get',
  accountId: 'account-123'
});

Interactions

radar.data.get

Get radar/activity data.
type
'radar.data.get'
required
Query type identifier
accountId
string
required
Account ID
workspaceId
string
required
Workspace ID
const radarData = await mediator.executeQuery({
  type: 'radar.data.get',
  accountId: 'account-123',
  workspaceId: 'workspace-456'
});

App Metadata

app.metadata.list

List application metadata.
type
'app.metadata.list'
required
Query type identifier
const metadata = await mediator.executeQuery({
  type: 'app.metadata.list'
});

Build docs developers (and LLMs) love