Candor API
OpenAI-compatible chat completions for uncensored models. Streaming, tool calling and usage reporting work with the official OpenAI SDKs.
Quickstart in 60s
New accounts get $0.47 of free credit to try the API, once per person.
- Sign in to the app.
- Subscribe when the free credit runs out, at Account: Monthly $19.99/month, includes 8,500 credits ($20.00 of API usage), or Plus $99/month, includes 42,500 credits ($100.00 of API usage).
- Optional top-ups on the same page: $9.99 for 4,250 credits ($10.00 of API usage), subscribers only.
- Create a key under Account > API keys (shown once) and
export CANDOR_API_KEY=sk-unc-... - Paste one command:
claude mcp add --transport http candor https://candorai.dev/mcp --header "Authorization: Bearer $CANDOR_API_KEY"That's it: ask your agent to use candor. Tools: chat, list_models, candor_balance, list_characters, web_search.
Try it
Send one request from this page with your own key. The key stays in this field: it is sent only to this site's /v1, and it is not saved. The request uses your credits like any other.
Building with a coding assistant
Give your assistant this one address and it has everything it needs, written for it: https://candorai.dev/agents.md. It covers the models and prices, the smallest working call, and the rules that avoid the usual mistakes (always send max_tokens, never retry a 402, wait on a 429).
Other agents (remote MCP)
Endpoint https://candorai.dev/mcp (Streamable HTTP) with header Authorization: Bearer sk-unc-.... Nothing to install.
{
"mcpServers": {
"candor": {
"url": "https://candorai.dev/mcp",
"headers": {
"Authorization": "Bearer sk-unc-..."
}
}
}
}{
"mcpServers": {
"candor": {
"serverUrl": "https://candorai.dev/mcp",
"headers": {
"Authorization": "Bearer sk-unc-..."
}
}
}
}[mcp_servers.candor]
url = "https://candorai.dev/mcp"
bearer_token_env_var = "CANDOR_API_KEY"{
"mcpServers": {
"candor": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://candorai.dev/mcp",
"--header",
"Authorization:${CANDOR_AUTH}"
],
"env": {
"CANDOR_AUTH": "Bearer sk-unc-..."
}
}
}
}OpenAI-compatible SDKs
Base URL https://candorai.dev/v1, your key as the API key.
curl https://candorai.dev/v1/chat/completions \
-H "Authorization: Bearer $CANDOR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"candor-classic","max_tokens":512,"messages":[{"role":"user","content":"Hello"}]}'# pip install openai
import os
from openai import OpenAI
client = OpenAI(base_url="https://candorai.dev/v1", api_key=os.environ["CANDOR_API_KEY"])
stream = client.chat.completions.create(
model="candor-fast",
messages=[{"role": "user", "content": "Write a limerick about the sea."}],
max_tokens=512,
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")// npm install openai
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://candorai.dev/v1", apiKey: process.env.CANDOR_API_KEY });
const completion = await client.chat.completions.create({
model: "candor-smart",
messages: [{ role: "user", content: "Explain quicksort in three sentences." }],
max_tokens: 512,
});
console.log(completion.choices[0].message.content);# pip install langchain-openai
import os
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="candor-classic", max_tokens=512, base_url="https://candorai.dev/v1", api_key=os.environ["CANDOR_API_KEY"])
print(llm.invoke("Give me three blunt tips for a first marathon.").content)// npm install ai @ai-sdk/openai-compatible
import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
import { generateText } from "ai";
const candor = createOpenAICompatible({ name: "candor", baseURL: "https://candorai.dev/v1", apiKey: process.env.CANDOR_API_KEY });
const { text } = await generateText({ model: candor("candor-fast"), maxOutputTokens: 512, prompt: "Summarise the plot of Hamlet in two lines." });
console.log(text);Guides by tool
Any tool that speaks the OpenAI format works with three values: the base URL https://candorai.dev/v1, your key, and a model id (candor-fast, candor-classic, candor-smart). Prefer Postman? Download the collection, import it, and set its CANDOR_API_KEY variable.
Base URL: https://candorai.dev/v1
API Key: sk-unc-...
Model ID: candor-smartmodels:
- name: Candor Smart
provider: openai
model: candor-smart
apiBase: https://candorai.dev/v1
apiKey: sk-unc-...export OPENAI_API_BASE=https://candorai.dev/v1
export OPENAI_API_KEY=$CANDOR_API_KEY
aider --model openai/candor-smartURL: https://candorai.dev/v1
Key: sk-unc-...endpoints:
custom:
- name: "Candor"
apiKey: "${CANDOR_API_KEY}"
baseURL: "https://candorai.dev/v1"
models:
default: ["candor-fast", "candor-classic", "candor-smart"]
fetch: true
titleConvo: true
titleModel: "candor-fast"Custom Endpoint (Base URL): https://candorai.dev/v1
Custom API Key: sk-unc-...
Model ID: candor-classicAPI Key: sk-unc-...
Base URL: https://candorai.dev/v1
Model: candor-smart (by ID)# pip install litellm
import os
from litellm import completion
reply = completion(
model="openai/candor-smart",
api_base="https://candorai.dev/v1",
api_key=os.environ["CANDOR_API_KEY"],
max_tokens=300,
messages=[{"role": "user", "content": "Hello"}],
)
print(reply.choices[0].message.content)Models and pricing
USD per 1M tokens.
| Model | Input | Cached input | Output | Context | Notes |
|---|---|---|---|---|---|
candor-fast | $0.45 | $0.045 | $1.45 | 200k | Fastest and cheapest. Uncensored general chat with optional reasoning and tool calls. Accepts images. |
candor-classic | $1.00 | $0.10 | $3.00 | 128k | Balanced default. The least filtered model, tuned for open-ended dialogue and roleplay. Accepts images. |
candor-smart | $3.00 | $0.30 | $5.00 | 1,000k | Strongest reasoning, coding and agentic tool use. 1M-token context. |
Web search
Give a model fresh facts. Add "web_search": true to a chat request: Candor searches the web for the user's message, hands the results to the model, and returns them with the answer (web_search.results) so you can show the sources. Or call POST /v1/web/search yourself and get up to 6 results as JSON. A search costs about $0.029 (the exact charge is in the response); $0.080 is set aside while it runs. A search that could not run costs nothing. Only the search words leave Candor.
curl https://candorai.dev/v1/chat/completions \
-H "Authorization: Bearer $CANDOR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"candor-smart","web_search":true,"max_tokens":400,"messages":[{"role":"user","content":"What changed in the latest Python release?"}]}'curl https://candorai.dev/v1/web/search \
-H "Authorization: Bearer $CANDOR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"price of a monthly Navigo pass in 2026"}'Characters
Candor's characters can be played through the API. GET /v1/characters lists them (companions, roleplay, stories, games, advisors) with a name, a tagline, tags, a picture and a first message. Add "character" to a chat request and the model answers as that character, on the model you name and at that model's price; the character's instructions are added by the server and billed as input (each character says about how many tokens). The API keeps nothing between requests: send the whole conversation each time.
curl https://candorai.dev/v1/chat/completions \
-H "Authorization: Bearer $CANDOR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"candor-classic","character":"brooke","max_tokens":300,"messages":[{"role":"user","content":"hey, how was your day?"}]}'Billing
New accounts get $0.47 of free credit to try the API, once per person. While an account has only free credit, it is allowed 10 requests per minute and max_tokens is capped at 2,000 per request (larger values are clamped). Free credit is spent first. The API spends the same wallet as the app: subscription credits (Monthly $19.99/month, includes 8,500 credits ($20.00 of API usage); Plus $99/month, includes 42,500 credits ($100.00 of API usage)) and top-ups ($9.99 for 4,250 credits ($10.00 of API usage), subscribers only), bought at Account. 1 USD = 425 credits. Each request is charged exactly from the token usage the model reports. You can never spend more than your balance: before a request runs, the most it could cost (the prompt at one token per byte, plus max_tokens of output) is set aside, then replaced by the actual charge. Set max_tokens to set aside less. Requests are refused with 402 insufficient_quota below $0.01 of credit, or when the balance cannot cover the request, with this message: Subscribe at https://candorai.dev/?panel=account: Monthly $19.99/month, includes 8,500 credits ($20.00 of API usage), or Plus $99/month, includes 42,500 credits ($100.00 of API usage). Subscribers can also add top-ups there: $9.99 for 4,250 credits ($10.00 of API usage). Then retry.
Rate limit: 60 requests per minute per account.
Endpoints
POST /mcp: remote MCP server (Streamable HTTP)POST /v1/chat/completions: chat completion;stream: truefor server-sent eventsGET /v1/models: models with prices (no key needed)GET /v1/balance: available balance in USDGET /v1/usage: per-request tokens and costGET /v1/usage/summary: what was spent by day, by model and by keyPOST /v1/web/search: web results as JSONGET /v1/characters,GET /v1/characters/{id}: the characters that can be played
Errors use the OpenAI shape {"error":{"message","type","param","code"}}. The complete reference is in llms-full.txt and openapi.json; the same endpoints as a Postman collection.