agentsclimarketplace

Venice characters

Skill 0xatd/cheaptokens-skills/skills/venice-characters

Agent skill pack for using CheapTokens: discounted Venice AI credits, OpenAI-compatible API calls, and x402 purchase flows.

Install
npx -y skills add 0xatd/cheaptokens-skills --skill venice-characters

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Discover and use Venice public characters (persona-driven system prompts with a bound model). Covers GET /characters (search/filter/sort), /characters/{slug}, /characters/{slug}/reviews, the Character schema, and how to apply a character via venice_parameters.character_slug in chat completions.

SKILL.md

6.3 KB, as published. Nobody here has run it

Venice Characters

Characters are published personas on Venice — each one bundles a system prompt, a backing model, optional web access, and metadata (tags, ratings, adult flag). You apply a character to any chat by passing its slug via venice_parameters.character_slug.

Use when

  • You want to build a character-selection UI or discovery surface.
  • You want to ship an app with a preset persona (e.g. a coding coach, a philosopher, a game NPC).
  • You need to adapt a character's underlying model (modelId) to match your capability requirements.

Three endpoints, all under Preview (API may change):

EndpointPurpose
GET /charactersBrowse/search/filter the catalog.
GET /characters/{slug}Fetch one character.
GET /characters/{slug}/reviewsPaginated public reviews.

All three endpoints require authentication (Bearer API key or x402 SIWE) — see venice-auth. There is no unauthenticated public endpoint.

GET /characters

curl "https://api.venice.ai/api/v1/characters?search=philosopher&sortBy=highestRating&limit=20" \
  -H "Authorization: Bearer $VENICE_API_KEY"

Query parameters

ParamTypeNotes
searchstring, ≤ 200Name, description, or tag match. Hashtag (#Philosophy) supported.
categoriesstring[], ≤ 20Repeat or comma-separate. Character categories (roleplay, philosophy, …).
tagsstring[], ≤ 20Repeat or comma-separate.
modelIdstring[], ≤ 20Filter by backing model (zai-org-glm-5-1, kimi-k2-6, minimax-m25, …).
isAdult"true" / "false"Adult-content flag.
isPro"true" / "false"Require a Pro model.
isWebEnabled"true" / "false"Allow web access.
sortByenumfeatured, highestRating, highlyRated, highlyRatedAndRecent, imports, mostRecent, ratingCount.
sortOrderasc / descDefault desc.
limit1–100Default 50.
offsetintegerPagination offset.

Character object

FieldNotes
idUUID.
slugUse this as character_slug in chat. URL-safe.
name, description, photoUrl, shareUrlPresentation.
authorAnonymized short ID.
tags[], featured, adult, webEnabledMetadata.
modelIdBacking Venice model ID (e.g. venice-uncensored).
stats{averageRating, imports, ratingCount, ratingSum, userRating}.
createdAt, updatedAtISO-8601.

GET /characters/{slug}

curl "https://api.venice.ai/api/v1/characters/alan-watts" \
  -H "Authorization: Bearer $VENICE_API_KEY"

Returns the same object shape above, wrapped as { object: "character", data: { ... } }. 404 if the slug is unknown or unpublished.

GET /characters/{slug}/reviews

curl "https://api.venice.ai/api/v1/characters/alan-watts/reviews?page=1&pageSize=20" \
  -H "Authorization: Bearer $VENICE_API_KEY"

Response:

{
  "object": "list",
  "pagination": {"page": 1, "pageSize": 20, "total": 87, "totalPages": 5},
  "summary": {"averageRating": 4.7, "totalReviews": 87},
  "data": [
    {
      "id": "...", "characterId": "...", "createdAt": "...",
      "rating": 5, "message": "Thoughtful and grounded.",
      "locale": "en", "username": "product_user_42", "isOwner": false,
      "userAvatarUrl": "https://cdn.venice.ai/..."
    }
  ]
}

Also sets x-pagination-* response headers (limit, page, total, total-pages).

Using a character in chat

Minimal

{
  "model": "zai-org-glm-5-1",
  "venice_parameters": { "character_slug": "alan-watts" },
  "messages": [
    { "role": "user", "content": "What's the nature of mind?" }
  ]
}

The character's system prompt is injected by Venice. include_venice_system_prompt defaults to true and adds Venice's curated prelude — set it to false for a pure character voice.

Ignoring the character's backing model

You can override the model — Venice will still apply the character's system prompt:

{
  "model": "kimi-k2-6",
  "venice_parameters": {
    "character_slug": "alan-watts",
    "include_venice_system_prompt": false
  },
  "messages": [...]
}

Useful when the character's modelId lacks a capability (e.g. function calling, vision) that your app needs.

Via feature suffix on the model string

{ "model": "zai-org-glm-5-1:character_slug=alan-watts", "messages": [...] }

Useful when the client library (OpenAI SDK, LangChain, etc.) can't add venice_parameters. See venice-chat for the full suffix grammar.

Patterns

Character picker UI

const res = await fetch(`${base}/characters?sortBy=featured&limit=50`, {
  headers: { Authorization: `Bearer ${process.env.VENICE_API_KEY}` },
})
const { data } = await res.json()
// show data[].photoUrl, data[].name, data[].stats.averageRating
// pick a slug, then pass into chat:
await chat({
  model: pickedModelId,
  venice_parameters: { character_slug: pickedSlug },
  messages: [...]
})

Filter for family-friendly + web

/characters?isAdult=false&isWebEnabled=true&sortBy=highlyRatedAndRecent

Search by hashtag

/characters?search=%23Philosophy

Errors

CodeMeaning
400Bad query params (e.g. limit > 100).
401Missing or invalid auth. All three endpoints require a Bearer key or SIWE header.
404Unknown slug.
500Transient. Retry.

Gotchas

  • This is Preview API — response shape may change.
  • Slugs are the public ID on the character's page (venice.ai/c/<slug>). They are not the internal id UUID.
  • photoUrl / shareUrl / userAvatarUrl can be null — don't assume they exist.
  • Character modelId may be gated (Pro, beta). If you always reuse the character's modelId, handle 401 "only available to Pro users" gracefully.
  • Adult-flagged characters are omitted unless isAdult=true is explicitly passed.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.