Quickstart
Get an API key and make your first authenticated Venna gateway call in minutes.
The Venna gateway speaks the OpenAI Chat Completions API — your first call is one request away.
What's live
Chat Completions, the Responses API,
embeddings,
audio (speech + transcription),
image generation/edit, and async
video are all live on the gateway. Most remaining endpoints
still answer 501 until they ship — one, /v1/images/variations, is a permanent 501 with no
upstream support. The API reference flags each one. Authenticate with a
workspace vk_ key, or skip the key and pay per call from a wallet — see
Authentication.
Get an API key
Create a key in the Venna Console — a long-lived secret prefixed
vk_, shown in full only at creation. Export it so it stays out of your shell history and
commits:
export VENNA_API_KEY="vk_your_key_here"Make your first call
Send a chat completion to https://gateway.venna.net/v1/chat/completions with the key as a
bearer token and the standard OpenAI body — a model and a messages array:
curl https://gateway.venna.net/v1/chat/completions \
-H "Authorization: Bearer $VENNA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "venna-fast",
"messages": [
{ "role": "user", "content": "In one sentence, what is Venna?" }
]
}'import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://gateway.venna.net/v1",
apiKey: process.env.VENNA_API_KEY,
});
const completion = await client.chat.completions.create({
model: "venna-fast",
messages: [{ role: "user", content: "In one sentence, what is Venna?" }],
});
console.log(completion.choices[0]?.message.content);import os
from openai import OpenAI
client = OpenAI(
base_url="https://gateway.venna.net/v1",
api_key=os.environ["VENNA_API_KEY"],
)
completion = client.chat.completions.create(
model="venna-fast",
messages=[{"role": "user", "content": "In one sentence, what is Venna?"}],
)
print(completion.choices[0].message.content)import { createOpenAI } from "@ai-sdk/openai";
import { generateText } from "ai";
const venna = createOpenAI({
baseURL: "https://gateway.venna.net/v1",
apiKey: process.env.VENNA_API_KEY,
});
const { text } = await generateText({
model: venna("venna-fast"),
prompt: "In one sentence, what is Venna?",
});
console.log(text);No vk_ key? Pay per call from a wallet on Base instead, with no prepaid plan — see the
x402 guide.
The response is an OpenAI-compatible completion: a choices array holding the assistant
message, plus a usage block with your billed tokens.
Stream the response
Add "stream": true for server-sent events — tokens arrive as data: chunks and the stream
closes with a final data: [DONE] line:
curl https://gateway.venna.net/v1/chat/completions \
-H "Authorization: Bearer $VENNA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "venna-fast",
"messages": [
{ "role": "user", "content": "Stream a haiku about throughput." }
],
"stream": true
}'Explore the capabilities
Chat is the fastest first call, but the gateway carries the same vk_ key across every modality:
Tooling
Let a model call your own functions through the OpenAI-compatible tools API.
Embeddings
Vector embeddings from bge-m3 or qwen3-embedding-4b, metered by tokens.
Audio
Speech synthesis and transcription with kokoro, chatterbox, and whisper-large-v3.
Images
Generate and edit images with qwen-image, flux-2-klein, and qwen-image-edit.
Video
Async text-to-video with wan-2.2-t2v, billed by generated seconds.
x402 payments
Pay per call straight from a wallet instead of a workspace key.
Next steps
- Text generation — chat completions and the Responses API in depth.
- Authentication — when to reach for a plan JWT or an x402
wallet payment instead of a
vk_key. - API reference — every endpoint, generated from the live gateway OpenAPI spec.