The Tartarus AI API
An OpenAI-compatible HTTP API over models with reduced refusal training. Existing clients, SDKs and agent frameworks work against it with two environment variables changed. Included with the Pro plan.
Why the interface is OpenAI-shaped
The OpenAI chat completions format became the de facto interface for language models, and nearly every client library, editor integration, agent framework and evaluation harness targets it. Implementing it rather than inventing a new one means none of that has to be rewritten.
It also means you are not locked in. Work that runs through a standard interface can be pointed somewhere else with a configuration change, which is the correct amount of commitment to ask of someone evaluating a service.
Authentication
Tokens are minted in the dashboard under Account, CLI access. Pro allows ten active tokens; revoking one takes effect immediately and does not affect the others.
A token outlives the plan that created it, so plan access is rechecked on every request rather than only at mint time. If a plan lapses or is downgraded below the tier that includes API access, existing tokens stop working the same minute.
Environment
export OPENAI_BASE_URL=https://api.tartarusai.chat/api/v1
export OPENAI_API_KEY=<your token>Endpoints
Two, which is the whole surface.
| Method and path | Purpose |
|---|---|
| POST /api/v1/chat/completions | Streaming and non-streaming completions |
| GET /api/v1/models | The models your plan can reach |
Model ids are the public keys fast, deep and coder. There are no version suffixes to pin: the ids are stable and the weights behind them are ours to maintain.
A request
Set stream to true for server-sent events, or leave it out for a single JSON response. Both follow the OpenAI response shape.
curl
curl https://api.tartarusai.chat/api/v1/chat/completions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "coder",
"stream": true,
"messages": [
{ "role": "user", "content": "Refactor this to remove the nested callbacks." }
]
}'With an existing SDK
Nothing about the client changes. The official OpenAI libraries read the same two environment variables, so an existing script usually needs no code edit at all.
Python
from openai import OpenAI
client = OpenAI() # reads OPENAI_BASE_URL and OPENAI_API_KEY
stream = client.chat.completions.create(
model="deep",
messages=[{"role": "user", "content": "Plan the migration in stages."}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="")Limits, and how they differ from chat
API traffic draws on the same weekly and session allowances as the browser. Two limits behave differently over the API, deliberately.
The per-response output cap is larger, because an agent writing a file legitimately needs more room than a chat turn: 24K tokens over the API against 8K in chat.
A request that exceeds the plan's context ceiling is rejected rather than trimmed. The web interface silently drops older turns to make a request fit, which is right for a person and wrong for a program: a client that can compact and retry should be told, not quietly given a different conversation than it sent.
| Pro | |
|---|---|
| Context ceiling | 200K tokens |
| Output per response | 24K tokens |
| Active tokens | 10 |
| Weekly allowance | 60M tokens |
Errors worth handling
The ones that are not simply a bad request.
- 401
- The token is revoked or was never valid. Mint a new one under Account, CLI access.
- 402
- There is no active plan on the account, or the active plan does not include API access. Minting a new token will not help until the plan does.
- 413
- The request exceeds the plan's context ceiling. Compact the conversation and retry — this is the case the web interface handles by trimming.
- 429
- Either the per-minute rate limit or a token allowance. Rate limiting clears in seconds; a spent weekly allowance clears when the week resets, and a spent session allowance when the five-hour window rolls. The error body distinguishes them.
Where it differs from the OpenAI API
Compatibility claims are worth more when the exceptions are published.
- The model catalogue is fast, deep and coder. Passing an OpenAI model name is an error rather than a silent substitution.
- The plan's output cap is authoritative. A max_tokens larger than your plan allows is clamped rather than honoured.
- Only chat completions and model listing are implemented. There is no embeddings, images, audio, files or assistants surface.
- Oversized requests return 413 rather than being truncated.
Questions
- Is there an uncensored AI API?
- Yes. The Tartarus AI API serves the same models as the web interface, with the same reduced refusal training and no moderation classifier on the output. It is available on the Pro plan.
- Is the API OpenAI-compatible?
- Yes, for chat completions and model listing. Existing OpenAI clients work by setting OPENAI_BASE_URL and OPENAI_API_KEY. The known differences are listed above rather than left to be discovered.
- What are the API rate limits?
- 120 requests a minute per account on the API, 60 a minute from the CLI, against 30 chat generations a minute in the browser. Requests also draw on the same weekly and session token allowances as chat. A 429 covers both cases and the error body says which; a 402 means the plan itself does not include API access.
- Can I use the API for an agent or an editor plugin?
- Yes, and the larger output cap over the API exists for exactly that: 24K tokens over the API against 8K in chat. Anything that speaks the OpenAI chat format will work.
- Do API tokens expire?
- They do not expire on a timer, but plan access is checked on every request. If the plan lapses or drops below Pro, existing tokens stop working immediately.
Keep reading
- Using Tartarus AI from the terminalThe same endpoint from a shell, and what changes when you work that way.
- AI for codingWhat a code-tuned model with a 200K window and no refusal layer is actually for.
- How uncensored models are madeWhat is behind the model ids, described without the marketing.
- Which plans include API accessPro, with the token counts and allowances.