anz33 docs
Download

The HTTP API

anz33 speaks the OpenAI API, so anything written for OpenAI works against it unchanged. It also serves a small control plane on the same port, which is what the dashboard uses.

Base address: http://127.0.0.1:3300. Everything below is relative to that.

The OpenAI-compatible surface

EndpointWhat it does
GET /v1/modelsEvery model across every reachable engine, as one list.
POST /v1/chat/completionsThe main one. Supports "stream": true.
POST /v1/embeddingsRouted to an engine that can produce embeddings.

A request

curl http://127.0.0.1:3300/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "auto",
    "messages": [{"role": "user", "content": "Explain routing in one sentence"}]
  }'

"model": "auto" lets anz33 choose. Any real model name pins the request to whichever engine holds it — you never name the engine.

Streaming

{"model": "auto", "stream": true, "messages": [...]}

Server-sent events, exactly as an OpenAI client expects. The airlock restores redacted values inside the stream, including when a placeholder is split across several chunks.

Keys

Ignored unless you turned on require-keys, in which case send a profile key the usual way:

-H "Authorization: Bearer <profile key>"

The local control plane

These are what the dashboard is built on. They are served on the same loopback address and are not part of the OpenAI surface.

EndpointWhat it does
GET /anz33dashboardThe dashboard page.
GET /anz33chatA plain chat page served by the router.
GET /anz33/dataEverything the dashboard shows, as JSON: engines, models, power state, configuration and statistics.
POST /anz33/configChange a setting — allow cloud, battery saver, port. Every change is written to the audit log with its previous value.
GET /anz33/auditThe audit log, including the result of the chain check.
GET /anz33/memoryList memories.
POST /anz33/memoryAdd one.

Scripting against it

# what is reachable right now
curl -s http://127.0.0.1:3300/anz33/data | jq '.engines[].name'

# how many requests today
curl -s http://127.0.0.1:3300/anz33/data | jq '.stats.requests'

# turn cloud off from a script
curl -s -X POST http://127.0.0.1:3300/anz33/config \
  -H "Content-Type: application/json" \
  -d '{"allow_cloud": false}'

Where it listens

127.0.0.1:3300 — this machine only. Two ways to change that:

anz33 serve --port 3310     # a different port, still local
anz33 serve --lan           # answer other devices on your network

Or permanently, in ~/.anz33/config.json. Before using --lan, read Sharing with your household: that is the moment to require keys.

No TLS on loopback. Traffic to 127.0.0.1 never touches a network, so HTTPS would add a certificate to install and manage in exchange for nothing. Use http.