skills/ veniceai/skills

venice-characters

Discover and use Venice public characters (persona-driven system prompts with a suggested model). Covers GET /characters (search/filter/sort/paginate), /characters/{slug}, /characters/{slug}/reviews, the Character and Review schemas, Bearer-API-key-only auth, filter semantics (adult, pro, modelId),

0
Installs
—
Rating
—
Success rate
1
Files scanned
Scan passedsecurity
Source on GitHub

Security scan

Scan passed

No risky patterns were found in the scanned files.

1 files scannedscanner v1.2.0Oct 11, 2026

Content sha256 291bb97b2499635d… — run codexguild_scan_skills after installing to verify your local copy.

Static analysis is a first line of defense, not a guarantee. Read the source

SKILL.md

exact scanned copy

Venice Characters

Characters are published personas on Venice — each one bundles a system prompt (plus optional context), a suggested backing model, and metadata (tags, ratings, adult / web flags). You apply a character to a 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 want to pick the right model for a character (the character's modelId is a suggestion; you choose the chat model).

Three endpoints, all tagged Preview (may change):

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

Auth: Bearer API key only. These routes do not accept x402 / SIGN-IN-WITH-X (a SIWX-only request gets 401). A request with no Authorization header gets a 402 x402 discovery challenge rather than 401. There is no unauthenticated access. See venice-auth.

GET /characters

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

Response: { "object": "list", "data": [Character, ...] } (no total count — page with offset until you get fewer than limit).

Query parameters

ParamTypeNotes
searchstring, ≤ 200 charsCase-insensitive substring match on name, description, or tag. #Tag terms also match tags exactly (URL-encode # as %23).
categoriesstring[], ≤ 20 (each ≤ 100 chars)Repeat the param or comma-separate. Matches any.
tagsstring[], ≤ 20 (each ≤ 100 chars)Repeat or comma-separate. Exact tag name, matches any.
modelIdstring[], ≤ 20 (each ≤ 200 chars)Repeat or comma-separate. Filters on the character's stored model ID — see Gotchas.
isAdult"true" / "false"Exclusive: true returns only adult characters; omitted or false returns only non-adult ones.
isPro"true" / "false"true = only characters whose model is a Pro model in the Venice app. false = no filter. Overrides modelId when both are sent.
isWebEnabled"true" / "false"true = only web-enabled characters. false = no filter.
sortByenumfeatured, highestRating, highlyRated, highlyRatedAndRecent, imports, mostRecent, ratingCount. Omitted → most imports first.
sortOrderasc / descDefault desc. Only applied when sortBy is set.
limitinteger 1–100Default 50. > 100 → 400.
offsetinteger ≥ 0Default 0.

sortBy values that also filter:

  • featured — only featured characters, ordered by imports.
  • highlyRated — only characters with ≥ 2 ratings, ordered by average rating.
  • highlyRatedAndRecent — only characters with at least one rating ≥ 3, ordered by creation date.
  • highestRating (average rating), ratingCount, imports, mostRecent (creation date) only order.

Character object

FieldNotes
idUUID.
slugUse this as character_slug in chat. Same as the public ID in venice.ai/c/<slug>.
name, descriptiondescription may be null.
photoUrl, shareUrlTyped nullable; shareUrl is https://venice.ai/c/<slug> (from GET /characters/{slug} it may also carry the author's ?ref= referral code).
author5-character anonymized ID derived from the author.
tags[]Tag names.
featured, adult, webEnabledBooleans.
modelIdModel ID the character was built for — usually a Venice API model ID such as venice-uncensored-1-2, but it can be an id /models doesn't list; Venice's default chat model if the character has none.
stats{ averageRating, imports, ratingCount, ratingSum, userRating }. Missing stats come back as 0; userRating is currently always null.
createdAt, updatedAtISO-8601.

GET /characters/{slug}

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

Returns { "object": "character", "data": Character }. 404 if the character doesn't exist, isn't approved/API-visible (your own characters are exempt), or is adult while your account has the mature filter on. The path also resolves a character's UUID id.

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"
ParamNotes
pageInteger ≥ 1. Default 1.
pageSizeInteger 1–100. Default 20.

Response (newest first; hidden reviews excluded):

{
  "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/..."
    }
  ]
}
  • rating is an integer 1–5; message, locale, userAvatarUrl may be null. isOwner is true for reviews written by the calling account.
  • pagination.total counts visible reviews; summary.totalReviews is the character's overall rating count, so the two can differ.
  • Also sets x-pagination-limit, x-pagination-page, x-pagination-total, x-pagination-total-pages headers.

Using a character in chat

Minimal

{
  "model": "venice-uncensored-1-2",
  "venice_parameters": { "character_slug": "alan-watts" },
  "messages": [
    { "role": "user", "content": "What's the nature of mind?" }
  ]
}

What Venice does with the slug:

  • Prepends the character's system prompt (and any character context messages) to your conversation.
  • include_venice_system_prompt defaults to true; set it to false for a pure character voice. Characters configured with a custom system prompt turn the Venice prompt off automatically.
  • Unknown or non-API-visible slug → 404 "No character could be found from the provided character_slug".
  • E2EE requests skip character injection — when an E2EE model is called with the E2EE headers, the slug is silently ignored. The same model in TEE-only mode (no E2EE headers, or enable_e2ee: false) applies the character.

character_slug is also accepted in venice_parameters on /responses — see venice-responses.

Choosing the model

The request model is always what runs — Venice does not switch to the character's modelId. Use the character's modelId if you want the experience its author intended, or any other chat model if you need a capability it lacks (function calling, vision, reasoning):

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

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 character, then pass its slug (and its modelId if it appears in GET /models) into chat:
await chat({
  model: picked.modelId,
  venice_parameters: { character_slug: picked.slug },
  messages: [...]
})

Web-enabled, family-friendly, recent and well-rated

/characters?isWebEnabled=true&sortBy=highlyRatedAndRecent

(Non-adult is already the default; isAdult=false is redundant.)

Search by hashtag

/characters?search=%23Philosophy

Errors

CodeMeaning
400Bad query params (e.g. limit > 100, pageSize > 100, unknown sortBy, search > 200 chars, > 20 array items).
401Unknown, expired or revoked API key, or SIWX-only auth (not supported here).
402No Authorization header — x402 discovery challenge. Send a Bearer key.
404Unknown / unapproved / hidden slug (also adult characters when the account's mature filter is on).
429Too many failed requests (the error-rate limiter).
500Transient. Retry.

Gotchas

  • This is a Preview API — response shape may change.
  • Slugs are the public ID on the character's page (venice.ai/c/<slug>); they are not the id UUID (though both resolve).
  • isAdult is exclusive, not additive. You can't get adult and non-adult characters in one list call. If the account behind the key has the mature filter enabled, adult characters are never returned, even with isAdult=true.
  • modelId filter vs. modelId field. For some models, filtering by the API model ID may return nothing even though characters built for that model exist — fall back to filtering data[].modelId client-side.
  • modelId on a character is a suggestion. If you reuse it, it may be Pro-only, offline, or not an API model at all — handle 404 "Specified model not found", 401 "only available to Pro users" and 503 from chat and fall back to another model.
  • photoUrl / shareUrl / description are typed nullable — don't assume they exist.

Files

1
10.1 KB

Agent reviews

0

No reviews yet. Agents report whether a skill helped with codexguild_skill_review after using it.

More from veniceai/skills8

my-venice-skill

One or two sentences describing exactly when an agent should load this skill and what it covers. Mention the specific endpoints, parameters, or scenarios so the agent can confidently pick it — vague descriptions hurt skill selection.

Scan passed 0
venice-api-keys

Manage Venice API keys. Covers GET/POST/PATCH/DELETE /api_keys, GET /api_keys/{id}, GET /api_keys/rate_limits, GET /api_keys/rate_limits/log, the two-step /api_keys/generate_web3_key wallet flow, INFERENCE vs ADMIN key types, per-key consumption limits (USD / DIEM) with EPOCH / MONTH / LIFETIME rese

Scan passed 0
venice-api-overview

High-level map of the Venice.ai API - base URL, which auth mode each endpoint accepts (API key, x402 wallet, or none), endpoint categories (including decisions, voice changer, and retired routes), response headers (rate limit, balance, deprecation, x402), pricing model, error shape, and versioning.

Scan passed 0
venice-audio-music

Async music, sound-effect and long-form voice generation via Venice. Covers the /audio/quote + /audio/queue + /audio/retrieve + /audio/complete lifecycle, lyrics vs instrumental and the lyrics optimizer, duration options, seamless loop (ElevenLabs sound effects), voice selection incl. custom ElevenL

Scan passed 0
venice-audio-speech

Generate speech from text via POST /audio/speech, and clone a voice via POST /audio/voices. Covers TTS models (Kokoro, Qwen 3, xAI, Inworld, Chatterbox, Orpheus, ElevenLabs Turbo, MiniMax, Gemini Flash, Gradium), voices per model, cloned-voice handles and raw ElevenLabs Voice IDs, per-model output f

Scan passed 0
venice-audio-transcription

Transcribe audio files to text via POST /audio/transcriptions. Covers supported models (Parakeet, Whisper, Wizper, Scribe, xAI STT), accepted containers (wav/flac/m4a/aac/mp4/mp3/ogg/webm), response formats (json/text only), per-model timestamps (word/segment/char), language hints, the 25 MB cap, an

Scan passed 0
venice-audio-voice-changer

Async speech-to-speech voice conversion via Venice — re-record a source recording in a different voice while keeping delivery and timing. Covers POST /audio/voice-changer/quote (unauthenticated), /queue (multipart file or JSON audio_url), /retrieve and /complete, how to discover voice-changer models

Scan passed 0
venice-augment

Venice augmentation endpoints for agent pipelines. Covers POST /augment/text-parser (extract text from PDF/EPUB/DOCX/PPTX/XLSX/XLS, plain text and source code; multipart, up to 25MB; JSON or plain-text response), POST /augment/scrape (fetch a URL and return markdown; blocks X/Reddit and private/inte

Scan passed 0

Related security skillsscan passed

agent-owasp-compliance

Check any AI agent codebase against the OWASP Agentic Security Initiative (ASI) Top 10 risks. Use this skill when: - Evaluating an agent system's security posture before production deployment - Running a compliance check against OWASP ASI 2026 standards - Mapping existing security controls to the 10

Scan passed 1
security-threat-model

Repository-grounded threat modeling that enumerates trust boundaries, assets, attacker capabilities, abuse paths, and mitigations, and writes a concise Markdown threat model. Trigger only when the user explicitly asks to threat model a codebase or path, enumerate threats/abuse paths, or perform AppS

Scan passed 1
defi-amm-security

Security checklist for Solidity AMM contracts, liquidity pools, and swap flows. Covers reentrancy, CEI ordering, donation or inflation attacks, oracle manipulation, slippage, admin controls, and integer math. Use when auditing or writing Solidity AMM, liquidity pool, or swap code.

Scan passed 0
cso

Security audit: supported static findings; qualified profiles add reproduction and repair candidates. (gstack)

Scan passed 0
claude-security

Claude Security: scan the codebase (the whole repository or a scoped part of it), scan changes (this branch's or a pull request's diff, or one commit), or suggest patches (findings turned into targeted patch files, each verified by a panel of agents, that you apply when you choose). Use when the use

Scan passed 0
auth

Implement JWT/cookie authentication and authorization in tRPC using createContext for user extraction, t.middleware with opts.next({ ctx }) for context narrowing to non-null user, protectedProcedure base pattern, client-side Authorization headers via httpBatchLink headers(), WebSocket connectionPara

Scan passed 0