Skip to content

Model

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.

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.