Venice Characters
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.
MCP get_skill({ skillId: "venice-characters-d11b3096" })Use this skill with your agent
Create a free account and connect via MCP
# 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):
| Endpoint | Purpose |
|---|---|
| `GET /characters` | Browse/search/filter the catalog. |
| `GET /characters/{slug}` | Fetch one character. |
| `GET /characters/{slug}/reviews` | Paginated public reviews. |
All three endpoints require authentication (Bearer API key or x402 SIWE) — see [`venice-auth`](../venice-auth/SKILL.md). There is no unauthenticated public endpoint.
## `GET /characters`
```bash
curl "https://api.venice.ai/api/v1/characters?search=philosopher&sortBy=highestRating&limit=20" \
-H "Authorization: Bearer $VENICE_API_KEY"
```
### Query parameters
| Param | Type | Notes |
|---|---|---|
| `search` | string, ≤ 200 | Name, description, or tag match. Hashtag (`#Philosophy`) supported. |
| `categories` | string[], ≤ 20 | Repeat or comma-separate. Character categories (`roleplay`, `philosophy`, …). |
| `tags` | string[], ≤ 20 | Repeat or comma-separate. |
| `modelId` | string[], ≤ 20 | Filter 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. |
| `sortBy` | enum | `featured`, `highestRating`, `highlyRated`, `highlyRatedAndRecent`, `imports`, `mostRecent`, `ratingCount`. |
| `sortOrder` | `asc` / `desc` | Default `desc`. |
| `limit` | 1–100 | Default 50. |
| `offset` | integer | Pagination offset. |
### Character object
| Field | Notes |
|---|---|
| `id` | UUID. |
| `slug` | **Use this as `character_slug` in chat**. URL-safe. |
| `name`, `description`, `photoUrl`, `shareUrl` | Presentation. |
| `author` | Anonymized short ID. |
| `tags[]`, `featured`, `adult`, `webEnabled` | Metadata. |
| `modelId` | Backing Venice model ID (e.g. `venice-uncensored`). |
| `stats` | `{averageRating, imports, ratingCount, ratingSum, userRating}`. |
| `createdAt`, `updatedAt` | ISO-8601. |
## `GET /characters/{slug}`
```bash
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`
```bash
curl "https://api.venice.ai/api/v1/characters/alan-watts/reviews?page=1&pageSize=20" \
-H "Authorization: Bearer $VENICE_API_KEY"
```
Response:
```json
{
"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
```json
{
"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:
```json
{
"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
```json
{ "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`](../venice-chat/SKILL.md#model-feature-suffixes) for the full suffix grammar.
## Patterns
### Character picker UI
```ts
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
```bash
/characters?isAdult=false&isWebEnabled=true&sortBy=highlyRatedAndRecent
```
### Search by hashtag
```bash
/characters?search=%23Philosophy
```
## Errors
| Code | Meaning |
|---|---|
| `400` | Bad query params (e.g. `limit > 100`). |
| `401` | Missing or invalid auth. All three endpoints require a Bearer key or SIWE header. |
| `404` | Unknown slug. |
| `500` | Transient. 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.Related Skills
More skills in Data, AI & Research
Ablation Planner
Use when main results pass result-to-claim (`claim_supported = yes` or `partial`) and ablation studies are needed for paper submission. A secondary Codex agent designs ablations from a reviewer's perspective; the local executor reviews feasibility and implements.
Ablation Planner
Use when main results pass result-to-claim (claim_supported=yes or partial) and ablation studies are needed for paper submission.
About
Provides information about the bitwize-music plugin, its version, and its creator. Use when the user asks about the plugin, its purpose, version, or capabilities.
Ab Test Analysis
Analyze A/B test results with statistical significance, sample size validation, confidence intervals, and ship/extend/stop recommendations. Use when evaluating experiment results, checking if a test reached significance, interpreting split test data, or deciding whether to ship a variant.
Academic Search
Search and analyze academic literature. Find papers, understand research methodologies, and synthesize academic findings for research projects.
Adaptyv
How to use the Adaptyv Bio Foundry API and Python SDK for protein experiment design, submission, and results retrieval. Use this skill whenever the user mentions Adaptyv, Foundry API, protein binding assays, protein screening experiments, BLI/SPR assays, thermostability assays, or wants to submit protein sequences for experimental characterization. Also trigger when code imports `adaptyv`, `adaptyv_sdk`, or `FoundryClient`, or references `foundry-api-public.adaptyvbio.com`.
Explore Other Categories
Skills from other categories with shared topics
Venice Augment (text parse / scrape / search)
Venice augmentation endpoints for agent pipelines. Covers POST /augment/text-parser (extract text from PDF/DOCX/XLSX/plain text, multipart, up to 25MB, JSON or plain text response), POST /augment/scrape (fetch a URL and return markdown; blocks X/Reddit), and POST /augment/search (Brave ZDR or anonymized Google; structured title/url/content/date results, up to 20 per query). Privacy (zero data retention), rate limits, and error shapes.
Venice Auth
Authenticate to the Venice API with a Bearer API key or with an x402 / SIWE wallet. Covers header formats, the SIWE message fields, TTL and nonce rules, the venice-x402-client SDK, and how to choose between the two modes.
Venice Billing
Venice billing and usage analytics - GET /billing/balance, GET /billing/usage (paginated per-request ledger, JSON or CSV), and GET /billing/usage-analytics (aggregated by date/model/key). Covers the DIEM/USD/BUNDLED_CREDITS consumption priority and building dashboards. (Beta)