Manage wiki projects and pages—create projects, list pages, get/restore revisions, and fetch resolved content.
Wiki Subclient
The client.wiki subclient lets you manage wiki projects and pages—structured knowledge bases with markdown content, revision history, and AI-assisted generation. Create projects, list and edit pages, restore revisions, and fetch fully resolved content.
Projects API
| Method | Signature | Description |
|---|---|---|
wiki.projects.list | (options?) => Promise<WikiProject[]> | List all wiki projects |
wiki.projects.getById | (id) => Promise<WikiProject | null> | Get project by ID |
wiki.projects.getByName | (name) => Promise<WikiProject | null> | Get project by name |
wiki.projects.create | (params) => Promise<WikiProject> | Create a new project |
wiki.projects.update | (params) => Promise<WikiProject> | Update project settings |
wiki.projects.delete | (params) => Promise<void> | Delete a project |
Pages API
| Method | Signature | Description |
|---|---|---|
wiki.listPages | (projectId) => Promise<WikiPageSummary[]> | List pages in a project |
wiki.getCurrent | (params) => Promise<WikiPageData> | Get current version of a page |
wiki.getRevision | (params) => Promise<WikiPageData> | Get a specific revision |
wiki.getHistory | (params) => Promise<any[]> | Get revision history |
wiki.savePage | (params) => Promise<WikiPageData> | Save or update a page |
wiki.restoreRevision | (params) => Promise<void> | Restore a past revision |
wiki.getResolved | (params) => Promise<string> | Get fully resolved page content |
Projects
wiki.projects.list(options?)
wiki.projects.list(options?: {
includePages?: boolean;
pagesLimit?: number; // default 4, max 8
}): Promise<(WikiProject | WikiProjectWithPages)[]>Lists all wiki projects. Optionally include page summaries per project.
const projects = await client.wiki.projects.list();
const withPages = await client.wiki.projects.list({ includePages: true, pagesLimit: 8 });wiki.projects.getById(id)
wiki.projects.getById(id: string): Promise<WikiProject | null>Fetches a project by ID. Returns null if not found.
const project = await client.wiki.projects.getById('project-uuid');wiki.projects.getByName(name)
wiki.projects.getByName(name: string): Promise<WikiProject | null>Fetches a project by name. Returns null if not found.
const project = await client.wiki.projects.getByName('My World');wiki.projects.create(params)
wiki.projects.create(params: {
name: string;
visibility?: 'public' | 'private';
editability?: 'public' | 'private';
}): Promise<WikiProject>Creates a new wiki project.
const project = await client.wiki.projects.create({
name: 'Game Lore',
visibility: 'public',
editability: 'private',
});wiki.projects.update(params)
wiki.projects.update(params: UpdateProjectParams): Promise<WikiProject>Updates project settings. Include id in params to identify the project.
await client.wiki.projects.update({
id: project.id,
description: 'Updated lore for the game',
web_search_enabled: true,
});wiki.projects.delete(params)
wiki.projects.delete(params: { id?: string; name?: string }): Promise<void>Deletes a project. Provide either id or name.
await client.wiki.projects.delete({ id: project.id });
// or
await client.wiki.projects.delete({ name: 'Game Lore' });Pages
wiki.listPages(projectId)
listPages(projectId: string): Promise<WikiPageSummary[]>Lists all pages in a project.
const pages = await client.wiki.listPages(project.id);wiki.getCurrent(params)
getCurrent(params: { type: string; name: string; projectId: string }): Promise<WikiPageData>Gets the current (latest) version of a page. Use type and name to identify the page (e.g. characters, locations).
const page = await client.wiki.getCurrent({
type: 'characters',
name: 'Hero',
projectId: project.id,
});wiki.getRevision(params)
getRevision(params: {
type: string;
name: string;
revisionId: number;
projectId: string;
}): Promise<WikiPageData>Gets a specific revision of a page.
const page = await client.wiki.getRevision({
type: 'characters',
name: 'Hero',
revisionId: 42,
projectId: project.id,
});wiki.getHistory(params)
getHistory(params: { type: string; name: string; projectId: string }): Promise<any[]>Returns revision history for a page.
const history = await client.wiki.getHistory({
type: 'characters',
name: 'Hero',
projectId: project.id,
});wiki.savePage(params)
savePage(params: {
type: string;
name: string;
project_id: string;
markdown: string;
embedding: number[] | null;
change_summary?: string;
}): Promise<WikiPageData>Saves or updates a wiki page. Provide markdown content and optional change_summary.
const page = await client.wiki.savePage({
type: 'characters',
name: 'Hero',
project_id: project.id,
markdown: '# Hero\n\nA brave adventurer.',
embedding: null,
change_summary: 'Added backstory',
});wiki.restoreRevision(params)
restoreRevision(params: {
title: string;
revisionId: number;
projectId: string;
}): Promise<void>Restores a page to a past revision.
await client.wiki.restoreRevision({
title: 'characters/Hero',
revisionId: 40,
projectId: project.id,
});wiki.getResolved(params)
getResolved(params: {
projectName: string;
type: string;
name: string;
format?: 'md' | 'markdown' | 'html' | 'json';
}): Promise<string>Fetches fully resolved page content—templates expanded, references resolved. Returns raw text in the requested format.
const content = await client.wiki.getResolved({
projectName: 'Game Lore',
type: 'characters',
name: 'Hero',
format: 'html',
});WikiProject Fields
| Field | Type | Description |
|---|---|---|
id | string | Project ID |
name | string | Project name |
description | string | null | Description |
project_prompt | string | null | AI generation prompt |
image_prompt | string | null | Image generation prompt |
text_model | WikiTextModel | null | Text model for generation |
image_model | WikiImageModel | null | Image model |
visibility | 'public' | 'private' | Visibility |
editability | 'public' | 'private' | Who can edit |
members | WikiMember[] | Project members |
theme | WikiTheme | null | Display theme |
web_search_enabled | boolean | Web search for AI |
Code Examples
import { PUClient } from 'pu-client';
const client = new PUClient({ apiKey: process.env.PU_API_KEY! });
const project = await client.wiki.projects.create({
name: 'Story Wiki',
visibility: 'public',
});
await client.wiki.savePage({
type: 'locations',
name: 'Village',
project_id: project.id,
markdown: '# Village\n\nA quaint starting town.',
embedding: null,
});import { PUClient } from 'pu-client';
const client = new PUClient({ apiKey: process.env.PU_API_KEY! });
const project = await client.wiki.projects.getByName('Story Wiki');
if (!project) return;
const pages = await client.wiki.listPages(project.id);
const history = await client.wiki.getHistory({
type: 'locations',
name: 'Village',
projectId: project.id,
});
const content = await client.wiki.getResolved({
projectName: project.name,
type: 'locations',
name: 'Village',
format: 'markdown',
});