Nodaro Docs
DocumentationNode ReferenceModelsAI Agents (MCP)DevelopersSelf-hostingResearch
TypeScript SDK

Community library

Browse the Nodaro community library from TypeScript, clone shared characters, locations and objects into your account, favorite them, and report a listing.

Available on Nodaro Cloud · Business edition

client.community reads the community library, the shared collection of characters, locations and objects curated by the Nodaro team. You can browse and search it, read a listing, clone a listing into your own account, favorite it, and report it for moderation. The methods call the Community REST API. See Community library for the feature and its likeness and consent rules.

The community library exists on multi-user installs: Nodaro Cloud and Business edition. A single-user Community edition install answers every call with NotFoundError.

Methods

MethodWhat it does
browse(params?)Browse and search the listings
get(slug)Read one listing
getFull(slug)Read one listing with its full public snapshot
favorites()List the listings you favorited
clone(id, entityType)Copy a listing into your account
favorite(id)Add or remove a favorite
report(id, reason)Report a listing for moderation

Publishing is not part of the SDK: the SDK's personal and OAuth tokens cannot publish.

client.community

A listing is a CommunityCard. Its fields use snake_case, as the API sends them. CommunityEntityType is "character", "location" or "object".

browse(params?)

Returns a page of public listings and a nextCursor (GET /v1/community/browse). Pass nextCursor back as cursor for the next page; it is null on the last page.

browse(params?: BrowseCommunityParams): Promise<{ data: CommunityCard[]; nextCursor: string | null }>

Prop

Type

const { data: listings, nextCursor } = await client.community.browse({
  entityType: "character",
  sort: "popular",
  limit: 20,
})

get(slug)

Reads one listing by its slug (GET /v1/community/detail/:slug).

get(slug: string): Promise<{ data: CommunityCard }>

Prop

Type

const { data: listing } = await client.community.get("detective-mara")

Throws NotFoundError when the listing does not exist or is no longer active.

getFull(slug)

Reads one listing with its full public snapshot: its images, voice and text, as a detail page shows them (GET /v1/community/detail/:slug/full).

getFull(slug: string): Promise<{ data: CommunityFullDetail }>

Prop

Type

const { data: detail } = await client.community.getFull("detective-mara")

favorites()

Lists the listings you favorited (GET /v1/community/favorites).

favorites(): Promise<{ data: CommunityCard[] }>
const { data: favorites } = await client.community.favorites()

clone(id, entityType)

Copies a listing into your library as an independent copy (POST /v1/community/listings/:id/clone). Its files are copied into your own storage, so the copy stays when the original changes or is removed. It returns the kind and id of your new asset.

clone(id: string, entityType: "character" | "location" | "object"): Promise<{ entityType: string; id: string }>

Prop

Type

const { id: characterId } = await client.community.clone(listingId, "character")
const character = await client.characters.get(characterId)

An OAuth token needs the assets:write scope. Throws StorageExceededError when your storage is full.

favorite(id)

Adds a listing to your favorites, or removes it when it is already there (POST /v1/community/listings/:id/favorite). It returns the new state.

favorite(id: string): Promise<{ favorited: boolean }>

Prop

Type

const { favorited } = await client.community.favorite(listingId)

report(id, reason)

Reports a listing for moderation (POST /v1/community/listings/:id/report).

report(id: string, reason: CommunityReportReason): Promise<{ ok: true }>

Prop

Type

await client.community.report(listingId, "real_person_no_consent")

Frequently asked questions

Last updated on

On this page