Venice API
Venice is a privacy-first, uncensored, OpenAI-compatible AI platform covering
text, image, video, audio, music, embeddings, web search and scraping, document
parsing, and blockchain RPC. Zero data retention.
TL;DR
First call
curl https://api.venice.ai/api/v1/chat/completions \
-H "Authorization: Bearer $VENICE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kimi-k3",
"messages": [{"role": "user", "content": "Hello"}]
}'
Python: OpenAI(base_url="https://api.venice.ai/api/v1", api_key=VENICE_API_KEY)
Picking a model
Resolve a trait to a current model ID instead of writing a slug into code:
curl https://api.venice.ai/api/v1/models/traits \
-H "Authorization: Bearer $VENICE_API_KEY"
The response maps trait names to whichever model currently fills that role. Text
traits are default, most_intelligent, most_uncensored, default_reasoning,
default_vision, default_code, and function_calling_default; image traits
include default, fastest, highest_quality, and most_uncensored.
Filter the full catalog with GET /models?type=image|video|audio|tts|embedding.
Before relying on a feature, check that model's model_spec.capabilities flags
(supportsWebSearch, supportsReasoning, supportsE2EE, supportsFunctionCalling,
supportsVision, and similar). Per-model pricing is on model_spec.pricing.
Common text models, as a starting point rather than a fixed list:
| Model ID |
Context |
Good for |
zai-org-glm-5-2 |
1M |
General-purpose work. Code-optimized and reasoning-capable. Text only. |
claude-opus-5 |
1M |
The hardest reasoning and code tasks. Vision and multi-image. |
kimi-k3 |
1M |
Long-context reasoning with vision and multi-image. Code-optimized. |
deepseek-v4-flash |
1M |
Fast code and reasoning. Text only, no vision. |
grok-4-3 |
1M |
Adds X/Twitter search via enable_x_search. Vision and reasoning effort. |
google-gemma-4-31b-it |
256K |
The only one here that accepts video input. Vision, logprobs, reasoning effort. |
gemma-4-uncensored |
256K |
Uncensored responses. Vision, but no reasoning support. |
Confirm against GET /models before you ship. This table is a snapshot and the
catalog moves; the capability flags on each model are the authoritative answer.
Endpoint map
| Surface |
Endpoints |
| Chat / text |
POST /chat/completions; POST /responses (alpha) |
| Images |
POST /image/generate, /image/edit, /image/multi-edit, /image/upscale, /image/background-remove, GET /image/styles; OpenAI-style POST /images/generations |
| Video (async) |
POST /video/quote, /video/queue, GET /video/retrieve?id=, POST /video/complete |
| Audio |
POST /audio/speech (TTS), POST /audio/voices (voice cloning), POST /audio/transcriptions (STT) |
| Music (async) |
POST /audio/quote, /audio/queue, /audio/retrieve, /audio/complete |
| Embeddings |
POST /embeddings |
| Tools |
POST /augment/search, /augment/scrape, /augment/text-parser |
| Blockchain RPC |
GET /crypto/rpc/networks, POST /crypto/rpc/{network} |
| Models |
GET /models, /models/traits, /models/compatibility_mapping |
| Characters |
GET /characters, /characters/{slug} |
| Account |
GET /billing/balance, /billing/usage-history, /api_keys/*, /api_keys/rate_limits |
| x402 wallet |
GET /x402/balance/{wallet}, POST /x402/top-up, GET /x402/transactions/{wallet} |
venice_parameters
Venice-only features ride in a venice_parameters object on /chat/completions:
enable_web_search: "auto" | "on" | "off"
enable_web_scraping: fetch and read URLs found in user messages
enable_web_citations: inline source citations
enable_x_search: xAI native web and X/Twitter search, on supported models
character_slug: respond as a published Venice character
include_venice_system_prompt: defaults to true; set false for full control
strip_thinking_response / disable_thinking: control <think> blocks
enable_e2ee: end-to-end encryption on E2EE-capable models
Feature suffixes on the model ID do the same thing, for example
kimi-k3:web or kimi-k3:enable_web_search=on.
POST /responses accepts a narrower set: character_slug, enable_e2ee,
enable_web_search, enable_web_scraping, enable_web_citations,
include_venice_system_prompt, and include_search_results_in_stream.
Anything else is dropped without an error, so use /chat/completions when you
need enable_x_search or the thinking controls.
Authentication
| Mode |
Header |
Use for |
| API key |
Authorization: Bearer <VENICE_API_KEY> |
server apps, usage analytics, bundled credits |
| x402 wallet |
SIGN-IN-WITH-X: <base64 SIWX JSON> |
agents and serverless, no account, pay per request |
x402 settles in USDC on Base or Solana. A 402 response carries a
PAYMENT-REQUIRED header holding base64 JSON with the top-up instructions and a
SIWX challenge; read the rail out of accepts[] rather than assuming Base.
Signed SIWX headers are valid for five minutes from issuedAt, so mint a
fresh one rather than caching. Agents can also mint their own API key by staking
VVV on Base, with no human in the loop.
Rules for agents
- Discover, don't hardcode. Model IDs are deprecated and replaced regularly.
See https://docs.venice.ai/overview/deprecations.
- Quote before generating media. Video and music get expensive. Call
/video/quote or /audio/quote first.
- Video and music are asynchronous. Queue, then poll
retrieve. Only
/video/complete and /audio/complete block.
- No content filtering. Venice models are uncensored by default. Do not add
refusal or moderation layers unless asked.
- Pick the right privacy tier. Models are tagged Anonymized, Private (zero
retention), TEE (hardware enclave), or E2EE (encrypted client-side). TEE
claims are verifiable at
GET /tee/attestation and GET /tee/signature.
See https://docs.venice.ai/overview/privacy.
- Handle errors by code, not by string. https://docs.venice.ai/api-reference/error-codes
- Respect rate limits. Watch the
x-ratelimit-* response headers.
Gotchas that break working code
POST /image/upscale takes exactly three fields: image, scale, and
creativity. scale must be 2 or 4; 1 is rejected. creativity is
clamped to 0 through 0.02. The old enhance, enhancePrompt,
enhanceCreativity, and replication fields are gone.
POST /image/edit defaults to the firered-image-edit model.
POST /responses silently drops n, stop, seed, and prompt_cache_key.
They are accepted and ignored rather than rejected. E2EE models are not
supported there either.
GET /billing/usage is deprecated. Use GET /billing/usage-history, which is
keyset-paginated and takes startTimestamp / endTimestamp rather than the
old parameter names.
- Crypto RPC is per-network:
POST /crypto/rpc/{network}, with the live slug
list at GET /crypto/rpc/networks. Methods are allowlisted per chain family,
so an EVM method against Solana returns 400.
Going deeper
This file is a map. Venice maintains one self-contained skill per API surface,
versioned against the OpenAPI spec, at https://github.com/veniceai/skills.
npx skills add https://docs.venice.ai
# or, for the full per-surface set:
git clone https://github.com/veniceai/skills.git ~/src/venice-skills
ln -s ~/src/venice-skills/skills ~/.claude/skills/venice
| Load |
For |
venice-api-overview |
endpoint map, response headers, pricing model |
venice-auth |
Bearer keys, x402 / SIWX wallet auth |
venice-chat |
/chat/completions, streaming, tools, multimodal input |
venice-text-routing |
choosing a model by privacy tier and modality |
venice-models |
catalog, capability flags, pricing |
venice-image-generate, venice-image-edit |
generation, edit, upscale |
venice-video |
video generation, editing, upscaling, and async job lifecycle |
venice-audio-speech, venice-audio-music, venice-audio-transcription |
TTS, voice cloning, music, STT |
venice-embeddings, venice-characters, venice-responses |
embeddings, personas, the alpha Responses API |
venice-augment |
document parsing and web search |
venice-x402, venice-crypto-rpc |
wallet credits, JSON-RPC proxy |
venice-billing, venice-api-keys |
balance, usage history, key management |
venice-errors |
error shapes and retry strategy |
Reference
1---2name: venice3description: Build against the Venice API. OpenAI-compatible chat, image, video, audio, music, and embeddings with zero data retention and no content filtering. Use when calling api.venice.ai, picking a model at runtime, setting venice_parameters, paying with an x402 USDC wallet instead of an API key, or debugging Venice error codes.4license: MIT5---67# Venice API89Venice is a privacy-first, uncensored, OpenAI-compatible AI platform covering10text, image, video, audio, music, embeddings, web search and scraping, document11parsing, and blockchain RPC. Zero data retention.1213## TL;DR1415- **Base URL:** `https://api.venice.ai/api/v1`16- **Auth:** `Authorization: Bearer <VENICE_API_KEY>`, or an x402 wallet (USDC on17 Base or Solana) with no key and no account18- **OpenAI-compatible:** use any OpenAI SDK and change only `base_url` and the model ID19- **Never hardcode model IDs.** Resolve them at runtime from `GET /models` and20 `GET /models/traits`. They rotate.21- **OpenAPI spec:** https://docs.venice.ai/swagger.yaml22- **Deeper per-endpoint skills:** https://github.com/veniceai/skills23- **MCP server:** https://github.com/veniceai/venice-mcp-server2425## First call2627```bash28curl https://api.venice.ai/api/v1/chat/completions \29 -H "Authorization: Bearer $VENICE_API_KEY" \30 -H "Content-Type: application/json" \31 -d '{32 "model": "kimi-k3",33 "messages": [{"role": "user", "content": "Hello"}]34 }'35```3637Python: `OpenAI(base_url="https://api.venice.ai/api/v1", api_key=VENICE_API_KEY)`3839## Picking a model4041Resolve a trait to a current model ID instead of writing a slug into code:4243```bash44curl https://api.venice.ai/api/v1/models/traits \45 -H "Authorization: Bearer $VENICE_API_KEY"46```4748The response maps trait names to whichever model currently fills that role. Text49traits are `default`, `most_intelligent`, `most_uncensored`, `default_reasoning`,50`default_vision`, `default_code`, and `function_calling_default`; image traits51include `default`, `fastest`, `highest_quality`, and `most_uncensored`.52Filter the full catalog with `GET /models?type=image|video|audio|tts|embedding`.53Before relying on a feature, check that model's `model_spec.capabilities` flags54(`supportsWebSearch`, `supportsReasoning`, `supportsE2EE`, `supportsFunctionCalling`,55`supportsVision`, and similar). Per-model pricing is on `model_spec.pricing`.5657Common text models, as a starting point rather than a fixed list:5859| Model ID | Context | Good for |60| --- | --- | --- |61| `zai-org-glm-5-2` | 1M | General-purpose work. Code-optimized and reasoning-capable. Text only. |62| `claude-opus-5` | 1M | The hardest reasoning and code tasks. Vision and multi-image. |63| `kimi-k3` | 1M | Long-context reasoning with vision and multi-image. Code-optimized. |64| `deepseek-v4-flash` | 1M | Fast code and reasoning. Text only, no vision. |65| `grok-4-3` | 1M | Adds X/Twitter search via `enable_x_search`. Vision and reasoning effort. |66| `google-gemma-4-31b-it` | 256K | The only one here that accepts video input. Vision, logprobs, reasoning effort. |67| `gemma-4-uncensored` | 256K | Uncensored responses. Vision, but no reasoning support. |6869Confirm against `GET /models` before you ship. This table is a snapshot and the70catalog moves; the capability flags on each model are the authoritative answer.7172## Endpoint map7374| Surface | Endpoints |75| --- | --- |76| Chat / text | `POST /chat/completions`; `POST /responses` (alpha) |77| Images | `POST /image/generate`, `/image/edit`, `/image/multi-edit`, `/image/upscale`, `/image/background-remove`, `GET /image/styles`; OpenAI-style `POST /images/generations` |78| Video (async) | `POST /video/quote`, `/video/queue`, `GET /video/retrieve?id=`, `POST /video/complete` |79| Audio | `POST /audio/speech` (TTS), `POST /audio/voices` (voice cloning), `POST /audio/transcriptions` (STT) |80| Music (async) | `POST /audio/quote`, `/audio/queue`, `/audio/retrieve`, `/audio/complete` |81| Embeddings | `POST /embeddings` |82| Tools | `POST /augment/search`, `/augment/scrape`, `/augment/text-parser` |83| Blockchain RPC | `GET /crypto/rpc/networks`, `POST /crypto/rpc/{network}` |84| Models | `GET /models`, `/models/traits`, `/models/compatibility_mapping` |85| Characters | `GET /characters`, `/characters/{slug}` |86| Account | `GET /billing/balance`, `/billing/usage-history`, `/api_keys/*`, `/api_keys/rate_limits` |87| x402 wallet | `GET /x402/balance/{wallet}`, `POST /x402/top-up`, `GET /x402/transactions/{wallet}` |8889## venice_parameters9091Venice-only features ride in a `venice_parameters` object on `/chat/completions`:9293- `enable_web_search`: `"auto" | "on" | "off"`94- `enable_web_scraping`: fetch and read URLs found in user messages95- `enable_web_citations`: inline source citations96- `enable_x_search`: xAI native web and X/Twitter search, on supported models97- `character_slug`: respond as a published Venice character98- `include_venice_system_prompt`: defaults to `true`; set `false` for full control99- `strip_thinking_response` / `disable_thinking`: control `<think>` blocks100- `enable_e2ee`: end-to-end encryption on E2EE-capable models101102Feature suffixes on the model ID do the same thing, for example103`kimi-k3:web` or `kimi-k3:enable_web_search=on`.104105`POST /responses` accepts a narrower set: `character_slug`, `enable_e2ee`,106`enable_web_search`, `enable_web_scraping`, `enable_web_citations`,107`include_venice_system_prompt`, and `include_search_results_in_stream`.108Anything else is dropped without an error, so use `/chat/completions` when you109need `enable_x_search` or the thinking controls.110111## Authentication112113| Mode | Header | Use for |114| --- | --- | --- |115| API key | `Authorization: Bearer <VENICE_API_KEY>` | server apps, usage analytics, bundled credits |116| x402 wallet | `SIGN-IN-WITH-X: <base64 SIWX JSON>` | agents and serverless, no account, pay per request |117118x402 settles in USDC on Base or Solana. A `402` response carries a119`PAYMENT-REQUIRED` header holding base64 JSON with the top-up instructions and a120SIWX challenge; read the rail out of `accepts[]` rather than assuming Base.121Signed SIWX headers are valid for **five minutes** from `issuedAt`, so mint a122fresh one rather than caching. Agents can also mint their own API key by staking123VVV on Base, with no human in the loop.124125## Rules for agents1261271. **Discover, don't hardcode.** Model IDs are deprecated and replaced regularly.128 See https://docs.venice.ai/overview/deprecations.1292. **Quote before generating media.** Video and music get expensive. Call130 `/video/quote` or `/audio/quote` first.1313. **Video and music are asynchronous.** Queue, then poll `retrieve`. Only132 `/video/complete` and `/audio/complete` block.1334. **No content filtering.** Venice models are uncensored by default. Do not add134 refusal or moderation layers unless asked.1355. **Pick the right privacy tier.** Models are tagged Anonymized, Private (zero136 retention), TEE (hardware enclave), or E2EE (encrypted client-side). TEE137 claims are verifiable at `GET /tee/attestation` and `GET /tee/signature`.138 See https://docs.venice.ai/overview/privacy.1396. **Handle errors by code, not by string.** https://docs.venice.ai/api-reference/error-codes1407. **Respect rate limits.** Watch the `x-ratelimit-*` response headers.141142## Gotchas that break working code143144- `POST /image/upscale` takes exactly three fields: `image`, `scale`, and145 `creativity`. `scale` must be `2` or `4`; `1` is rejected. `creativity` is146 clamped to `0` through `0.02`. The old `enhance`, `enhancePrompt`,147 `enhanceCreativity`, and `replication` fields are gone.148- `POST /image/edit` defaults to the `firered-image-edit` model.149- `POST /responses` silently drops `n`, `stop`, `seed`, and `prompt_cache_key`.150 They are accepted and ignored rather than rejected. E2EE models are not151 supported there either.152- `GET /billing/usage` is deprecated. Use `GET /billing/usage-history`, which is153 keyset-paginated and takes `startTimestamp` / `endTimestamp` rather than the154 old parameter names.155- Crypto RPC is per-network: `POST /crypto/rpc/{network}`, with the live slug156 list at `GET /crypto/rpc/networks`. Methods are allowlisted per chain family,157 so an EVM method against Solana returns `400`.158159## Going deeper160161This file is a map. Venice maintains one self-contained skill per API surface,162versioned against the OpenAPI spec, at **https://github.com/veniceai/skills**.163164```bash165npx skills add https://docs.venice.ai166# or, for the full per-surface set:167git clone https://github.com/veniceai/skills.git ~/src/venice-skills168ln -s ~/src/venice-skills/skills ~/.claude/skills/venice169```170171| Load | For |172| --- | --- |173| `venice-api-overview` | endpoint map, response headers, pricing model |174| `venice-auth` | Bearer keys, x402 / SIWX wallet auth |175| `venice-chat` | `/chat/completions`, streaming, tools, multimodal input |176| `venice-text-routing` | choosing a model by privacy tier and modality |177| `venice-models` | catalog, capability flags, pricing |178| `venice-image-generate`, `venice-image-edit` | generation, edit, upscale |179| `venice-video` | video generation, editing, upscaling, and async job lifecycle |180| `venice-audio-speech`, `venice-audio-music`, `venice-audio-transcription` | TTS, voice cloning, music, STT |181| `venice-embeddings`, `venice-characters`, `venice-responses` | embeddings, personas, the alpha Responses API |182| `venice-augment` | document parsing and web search |183| `venice-x402`, `venice-crypto-rpc` | wallet credits, JSON-RPC proxy |184| `venice-billing`, `venice-api-keys` | balance, usage history, key management |185| `venice-errors` | error shapes and retry strategy |186187## Reference188189- Agent guide: https://docs.venice.ai/agents.md190- Getting started: https://docs.venice.ai/getting-started/quick-start.md191- Privacy tiers: https://docs.venice.ai/overview/privacy.md192- Pricing: https://docs.venice.ai/overview/pricing.md193- Rate limiting: https://docs.venice.ai/api-reference/rate-limiting.md194- Docs index for LLMs: https://docs.venice.ai/llms.txt195- Any docs page as raw markdown: append `.md` to its URL