Skip to content
All Skills

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.

Data, AI & Research|v1|Updated 7/14/2026|GitHub source
MCP get_skill({ skillId: "venice-characters-d11b3096" })

Use this skill with your agent

Create a free account and connect via MCP

Get Started Free
# 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.
#broad-capability#image-generation#video-generation#audio-generation#models#characters#prompt#engineeringvenice-api

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.

#broad-capability#wanshuiyin-arisMIT

Ablation Planner

Use when main results pass result-to-claim (claim_supported=yes or partial) and ablation studies are needed for paper submission.

#broad-capability#wanshuiyin-arisMIT

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.

#github#broad-capabilityCC0-1.0

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.

#work-life#productivityMIT

Academic Search

Search and analyze academic literature. Find papers, understand research methodologies, and synthesize academic findings for research projects.

#work-life#officeMIT

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`.

#broad-capability#scienceMIT