Upstreet Docs
    SDK

    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

    MethodSignatureDescription
    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

    MethodSignatureDescription
    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

    FieldTypeDescription
    idstringProject ID
    namestringProject name
    descriptionstring | nullDescription
    project_promptstring | nullAI generation prompt
    image_promptstring | nullImage generation prompt
    text_modelWikiTextModel | nullText model for generation
    image_modelWikiImageModel | nullImage model
    visibility'public' | 'private'Visibility
    editability'public' | 'private'Who can edit
    membersWikiMember[]Project members
    themeWikiTheme | nullDisplay theme
    web_search_enabledbooleanWeb 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',
    });

    Next Steps