Milgram’s model is called nam-shub: Milgram’s detection, available as a standalone API. Send it a text, or a whole conversation with its tool calls, tool results and tool definitions, and it answers with one verdict: whether anything was found that counts, how severe it is, what it is, and where in your request it was found. It forwards nothing and blocks nothing: what to do with the answer is up to you.
It answers as one model, in two shapes:
POST /v1/scan, the native API, with a structured response and progress events for large inputs.POST /v1/chat/completions, an OpenAI-compatible chat completion whose assistant message is the same verdict as JSON, for clients and gateways that only speak chat completions.
Both read a conversation the same way, so the same request gets the same verdict from either.
Base URL
Section titled “Base URL”https://scanner.milgram.dev/v1| Endpoint | What it does | Key |
|---|---|---|
POST /v1/scan |
Scan a text or a conversation | required |
POST /v1/chat/completions |
The same scan as an OpenAI chat completion | required |
GET /v1/models |
The model this API serves | not needed |
The API takes scanner keys, which you create in the console under
Scanner. A scanner key starts with mgs_, is shown once, and goes in the Authorization header:
Authorization: Bearer mgs_…Each key has a name, and can have a requests-per-minute limit, a maximum input size and an expiry. A key
belongs to your organization and to the member it is issued to; it stops working when it expires, within
seconds of being revoked, or when its owner leaves the organization or is deactivated. Proxy API keys
(mlg_…) are not accepted here.
On the hosted service, every scan made with a key is stored in its organization, whatever the key’s Store scans setting: scans appear in the console with their findings, like the proxy’s traffic.
Each key scans with its organization’s detection settings, including its whitelists, so the same input can get a different verdict in another organization.
The API serves one model release at a time, nam-shub-v2-20261008 today. Requests may name the release or
its alias nam-shub@latest, which always means the release being served; responses always name the release.
Naming a model is optional on /v1/scan and required on /v1/chat/completions, as the chat completions
format expects.
Next steps
Section titled “Next steps”- Quick start: your first verdict in one request.
- The response: every field of the verdict.
- Examples: five attacks and what nam-shub answers.