putty

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

  1. Go to putty.wtf/app and sign up.
  2. Open API keys in the sidebar.
  3. Give the key a label (e.g. ci-deploy) and click Create key.
  4. 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.

Send a chat completion
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:

List available models
curl https://api.putty.wtf/v1/models

GET /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.

List the agent-facing tools
curl https://api.putty.wtf/mcp/tools

That 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.

Node / TypeScript
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)
Python
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.

On this page