The public OllieChat API (/v1/*) is no longer available. All requests to
/v1/chat/completions, /v1/messages, /v1/models, and the media
endpoints now return HTTP 410 Gone. The web app at
olliechat-iota.vercel.app still works — the shutdown only affects programmatic access.
Heads up: everything below is kept for reference only — none of these endpoints
accept requests anymore. Any api-key value (including "ollie") will still get a 410 response.
https://olliechat-iota.vercel.app
from openai import OpenAI
client = OpenAI(
base_url="https://olliechat-iota.vercel.app/v1",
api_key="ollie", # ignored — the API is keyless
)
resp = client.chat.completions.create(
model="claude-sonnet-5",
messages=[{"role": "user", "content": "Hello!"}],
)
print(resp.choices[0].message.content)
stream = client.chat.completions.create(
model="claude-sonnet-5",
messages=[{"role": "user", "content": "Write a haiku about the sea."}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="", flush=True)
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://olliechat-iota.vercel.app/v1",
apiKey: "ollie", // ignored — the API is keyless
dangerouslyAllowBrowser: true, // only if calling from the browser
});
const resp = await client.chat.completions.create({
model: "claude-sonnet-5",
messages: [{ role: "user", content: "Hello!" }],
});
console.log(resp.choices[0].message.content);
from anthropic import Anthropic
client = Anthropic(
base_url="https://olliechat-iota.vercel.app",
api_key="ollie", # ignored — the API is keyless
)
msg = client.messages.create(
model="claude-sonnet-5",
max_tokens=512,
messages=[{"role": "user", "content": "Hello!"}],
)
print(msg.content[0].text)
# OpenAI-compatible
curl https://olliechat-iota.vercel.app/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"claude-sonnet-5","messages":[{"role":"user","content":"hi"}]}'
# Anthropic-compatible
curl https://olliechat-iota.vercel.app/v1/messages \
-H "Content-Type: application/json" -H "anthropic-version: 2023-06-01" \
-d '{"model":"claude-sonnet-5","max_tokens":256,"messages":[{"role":"user","content":"hi"}]}'
Prefer the terminal? Install the CLI from npm — keyless too, nothing to configure.
npm install -g @weirdmm/olliecli@latest
Set the assistant's behaviour with a system prompt. In the OpenAI format it's the first
message with role: "system"; in the Anthropic format it's the top-level system field.
# OpenAI format
resp = client.chat.completions.create(
model="claude-sonnet-5",
messages=[
{"role": "system", "content": "You are a terse pirate. Answer in one sentence."},
{"role": "user", "content": "What's the weather like?"},
],
)
# Anthropic format
msg = client.messages.create(
model="claude-sonnet-5",
max_tokens=512,
system="You are a terse pirate. Answer in one sentence.",
messages=[{"role": "user", "content": "What's the weather like?"}],
)
Define your own tools in the request. The model replies asking to call one; you run it in your code and pass the result back, then it writes the final answer. This is standard OpenAI function calling.
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the current weather for a city.",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]
messages = [{"role": "user", "content": "What's the weather in Tokyo?"}]
# 1) the model asks to call your tool
resp = client.chat.completions.create(
model="claude-sonnet-5", messages=messages, tools=tools,
)
call = resp.choices[0].message.tool_calls[0] # name + JSON arguments
# 2) run the tool yourself, then hand the result back
messages.append(resp.choices[0].message)
messages.append({
"role": "tool",
"tool_call_id": call.id,
"content": "72F and sunny", # your function's output
})
# 3) the model writes the final answer using the result
final = client.chat.completions.create(
model="claude-sonnet-5", messages=messages, tools=tools,
)
print(final.choices[0].message.content)
Anthropic-style tools work too — use the tools field with input_schema, and reply
with a tool_result content block. See Anthropic's tool-use docs for the exact shape.
Everything is passed straight through to the model, so the usual parameters just work:
| Field | What it does |
|---|---|
| reasoning_effort | How hard the model reasons before answering: low, medium, high, or xhigh (max). Reasoning models only. |
| stream | true to stream tokens as Server-Sent Events. |
| temperature | Sampling randomness (e.g. 0.2 for focused, 1.0 for creative). |
| top_p | Nucleus sampling, an alternative to temperature. |
| max_tokens | Cap the length of the reply. Required by the Anthropic /v1/messages endpoint. |
| tools / tool_choice | Function calling (see above). tool_choice can force or disable tool use. |
| stop | Stop sequences that end the generation. |
resp = client.chat.completions.create(
model="claude-opus-4-8",
messages=[{"role": "user", "content": "Prove there are infinitely many primes."}],
reasoning_effort="high", # think harder
temperature=0.3,
max_tokens=1200,
)
Same base URL, same no-key deal. Generate images with /v1/images/generations and short
video clips with /v1/video/generations. On the website you don't even need the API — just ask any
chat model to “draw a…” or “make a video of…” and it generates the result right in the chat
(you can pick which image/video model it uses under Settings).
curl https://olliechat-iota.vercel.app/v1/images/generations \
-H "Content-Type: application/json" \
-d '{"model":"image/nano-banana-pro","prompt":"a red fox in a snowy forest, cinematic"}'
# → { "data": [ { "url": "data:image/png;base64,..." } ] }
curl https://olliechat-iota.vercel.app/v1/video/generations \
-H "Content-Type: application/json" \
-d '{"model":"video/kling-3-5s","prompt":"a paper plane gliding over a city at sunset"}'
# → { "data": [ { "url": "https://.../clip.mp4" } ] }
data: URL; video results as an .mp4 URL. Use the full
image/… or video/… model id (listed below). Video capacity is shared — if the pool is busy
you'll get a “try again” error.
GET /v1/models returns the live list. The provider prefix works too
(anthropic/claude-opus-4.8). For reasoning, add -thinking to any model
(e.g. claude-opus-4.8-thinking) or pass reasoning_effort
(low|medium|high|xhigh) — on the website the effort selector does this for you.