Quick start
Mint an sk- key, then make your first call against the deployed API.
Putty's headline surface is an OpenAI-compatible inference gateway. To call it
with anything that spends credits, you need an sk- API key. The fastest way to
get one is to create it from the dashboard.
Running the stack yourself instead? Go to Getting started.
1. Sign up and create a key
- Go to putty.wtf/app and sign up.
- Open API keys in the sidebar.
- Give the key a label (e.g.
ci-deploy) and click Create key. - Copy the plaintext. The dashboard shows it once — Putty only stores the SHA-256 hash, the display prefix, and the last four characters, so there is no way to recover it later.
The key looks like sk-AbCdEfGh1jkLmnOpQrStUvWxYz0123456789aBcDeFg. Treat it like any other secret: store it in your CI's secret manager, not in source. The sk- prefix is deliberate — it is what GitHub secret scanning and tools like TruffleHog look for, so an accidentally committed key is at least detected.
You can also mint one over the API with POST /account/api-keys; the
Authenticating page covers the key in full.
2. Make your first request
The gateway speaks the OpenAI Chat Completions API. Any OpenAI SDK or HTTP client can call it by pointing baseURL at https://api.putty.wtf/v1 and sending the key as the bearer.
curl https://api.putty.wtf/v1/chat/completions \
-H "Authorization: Bearer $PUTTY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "newapi/MiniMax-M3",
"messages": [{ "role": "user", "content": "Say hello in one short sentence." }]
}'A streaming response is the same call with "stream": true (it defaults to false, as in the OpenAI API) — you get a text/event-stream of ChatCompletionChunk objects, ending with data: [DONE].
3. Find out what you can call
You do not need a key to look:
curl https://api.putty.wtf/v1/modelsGET /v1/models is public so a CLI or a scripted integration can discover the
supported set without reading the source. Model ids are provider-prefixed
(newapi/...), and the prefix is what routes a chat completion. The server
rejects any id outside the list.
curl https://api.putty.wtf/mcp/toolsThat is public too: all 75 MCP tools with their input and output schemas. Read more on the MCP overview.
4. Use the OpenAI SDK
Point the official OpenAI SDK at the Putty origin. Streaming, the data: [DONE] sentinel, and the rest of the OpenAI surface are all the SDK's defaults — no Putty-specific client library is required.
import OpenAI from "openai"
const client = new OpenAI({
baseURL: "https://api.putty.wtf/v1",
apiKey: process.env.PUTTY_API_KEY,
})
const completion = await client.chat.completions.create({
model: "newapi/MiniMax-M3",
messages: [{ "role": "user", "content": "Say hello in one short sentence." }],
})
console.log(completion.choices[0]?.message.content)from openai import OpenAI
client = OpenAI(
base_url="https://api.putty.wtf/v1",
api_key=os.environ["PUTTY_API_KEY"],
)
completion = client.chat.completions.create(
model="newapi/MiniMax-M3",
messages=[{"role": "user", "content": "Say hello in one short sentence."}],
)
print(completion.choices[0].message.content)5. Manage your keys
The dashboard at putty.wtf/app/api-keys lists every key you have minted, including revoked ones. Revoke a key to invalidate it instantly; any new request that presents it will receive a 401.
Next: the Inference module
The full reference for the /v1/models and /v1/chat/completions routes lives on the Inference page, and every other operation is in the generated reference, e.g. GET /mcp/tools.