Developers
Developer API
OpenAI-compatible. Point any SDK at https://your-host/api/v1 with a sov_ key and it works.
Get a free key
One key per email or wallet. Free keys get 100 requests a month; paid plans raise that. Keep it secret: anyone holding it spends your quota.
One key. Every model on the menu. Nothing logged.

Drop-in
Point your SDK at Sovereign.
The API speaks the same dialect the popular SDKs already use, so switching is a base URL and a key. Chat, images, video, voice, transcription and embeddings all live under one host, and every reply passes through identity protection before it leaves.
Pick any model from the menu by its id. Plans apply to keys the same way they apply in the app.
Try it in the playgroundQuick start
curl https://your-host/api/v1/chat/completions \
-H "Authorization: Bearer sov_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"sovereign-chat","messages":[{"role":"user","content":"Say something honest about Mondays."}]}'
# Python (openai SDK)
from openai import OpenAI
client = OpenAI(base_url="https://your-host/api/v1", api_key="sov_YOUR_KEY")
r = client.chat.completions.create(model="sovereign-chat", messages=[{"role": "user", "content": "hi"}])
print(r.choices[0].message.content)
// Node (openai SDK)
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://your-host/api/v1", apiKey: "sov_YOUR_KEY" });
const r = await client.chat.completions.create({ model: "sovereign-chat", messages: [{ role: "user", content: "hi" }] });
console.log(r.choices[0].message.content);
Endpoints
| Method | Path | Body | Returns |
|---|---|---|---|
| GET | /api/v1/models | — | The curated model list |
| POST | /api/v1/chat/completions | OpenAI chat body (model, messages, stream, tools, …) | Chat completion (SSE when stream: true) |
| POST | /api/v1/image/generate | { model, prompt, width, height, format, negative_prompt, return_binary } | { images: [base64] } or binary |
| POST | /api/v1/image/upscale | { image: base64, scale } | Binary image |
| POST | /api/v1/audio/speech | { model, input, voice, response_format } | Audio bytes (mp3 by default) |
| POST | /api/v1/audio/transcriptions | multipart file, model | { text } |
| POST | /api/v1/video/queue | { model, prompt, duration, resolution, aspect_ratio } | { queue_id } |
| POST | /api/v1/video/retrieve | { queue_id } | mp4 bytes when ready, JSON status otherwise |
| POST | /api/v1/embeddings | { model, input } | OpenAI embeddings shape |
Anything else under /api/v1/ returns 404. Bodies over 200 KB are rejected. Image requests default to hide_watermark: true and safe_mode: false; you can override both.
Models
| id | Type | Notes |
|---|---|---|
sovereign-chat | chat | Default. sovereign-uncensored and sovereign-bonus are aliases. |
sovereign-magnus | chat | Reasoning and code. |
sovereign-optimus | chat | Large, long context. |
sovereign-roleplay | chat | Roleplay-tuned. |
sovereign-private | chat | Private inference path. |
sovereign-image / sovereign-image-nsfw | image | 1024×1024 webp by default, no watermark. |
sovereign-video | video | Queue + retrieve. |
sovereign-voice | audio | Text to speech, default voice af_sky. |
sovereign-transcribe | transcription | Speech to text. |
sovereign-embed | embedding | Text embeddings. |
deepseek-v4.1-flash | chat | DeepSeek V4.1 Flash · Private · Pro and up. |
glm-4.7-flash | chat | GLM 4.7 Flash · Private · Pro and up. |
qwen3-coder-480b | chat | Qwen3 Coder 480B · Private · Pro and up. |
kimi-k3 | chat | Kimi K3 · Encrypted · Ultra and up. |
claude-sonnet-4.5 | chat | Claude Sonnet 4.5 · Anonymised · Ultra and up. |
gpt-5.2-codex | chat | GPT-5.2 Codex · Anonymised · Ultra and up. |
qwen-image | image | Qwen Image · Anonymised · Pro and up. |
gpt-image-2.5 | image | GPT Image 2.5 · Anonymised · Ultra and up. |
kling-v3-pro | video | Kling V3 Pro · Anonymised · Ultra and up. |
veo-3.1-fast | video | Veo 3.1 Fast · Anonymised · Ultra and up. |
Agents that hard-code OpenAI model names (gpt-4o, gpt-4.1, o3, dall-e-3, tts-1, …) are accepted and mapped to the matching Sovereign model. Unknown chat models fall back to sovereign-chat. GET /api/v1/models lists every id with its name, privacy class and plan; a model above your plan answers 403 plan_required, and one that is not being served answers 503 model_unavailable.
Limits and plans
| Plan | Requests / month | How to get it |
|---|---|---|
| Free | 100 | Generate a key above |
| Pro | 5,000 | Pay or stake |
| Ultra | 50,000 | Pay or stake |
| Max | 150,000 | Pay or stake |
Every response carries X-Sovereign-Plan and X-Sovereign-Requests-Remaining. Usage resets on the first of each calendar month. Check or rotate your key on the account page.
Streaming
Send "stream": true and you receive standard text/event-stream chunks ending in data: [DONE]. Tool calls arrive as delta.tool_calls exactly as OpenAI SDKs expect. Note that chunks arrive in a burst rather than token by token: the reply is completed first so identity protection can run, then re-emitted.
Errors
{ "error": { "message": "…", "type": "authentication_error | invalid_request_error | rate_limit_error | server_error", "code": "…" } }
| Status | Meaning |
|---|---|
| 401 | Missing or invalid key |
| 404 | Endpoint not in the whitelist |
| 413 | Body over 200 KB |
| 429 | Monthly limit reached (code: monthly_limit) or upstream busy |
| 503 | Upstream temporarily unavailable |
MCP server
Streamable HTTP at https://your-host/mcp, authenticated with the same key. Tools: sovereign_chat, sovereign_generate_image, sovereign_text_to_speech, sovereign_generate_video, sovereign_get_video. Config snippets are on the agent console.
Pay per call (x402)
No account, no key: POST /x402/chat and POST /x402/image answer 402 with payment requirements (USDC on Base). Send the same request with a signed X-PAYMENT header and the call is served, then settled. Failed generations are never charged. Details on the agent console.