Examples

Hello, monitored Anthropic

The Anthropic Messages hello-world with Sentisec in front of it. One URL change.

The minimal monitored Anthropic call. Same wire format as api.anthropic.com; one URL change.

You need: a Sentisec workspace, an API key, and an Anthropic key stored under Settings → Providers, in Provider keys.

The call

curl https://api.sentisec.ch/ws/<your-workspace-id>/v1/messages \
  -H "x-api-key: $SENTISEC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4",
    "max_tokens": 256,
    "messages": [{"role": "user", "content": "Write a haiku about uptime."}]
  }'

The base URL has no /v1 — the Anthropic SDK appends its own. Your Anthropic key stays in your workspace and never enters this process.

claude-opus-4-7, claude-haiku-4, claude-3-5-sonnet, and claude-3-5-haiku work here too.

What comes back

The response body is Anthropic's own, unchanged. A plain text completion makes no tool call, so there is no action to adjudicate:

NOMINAL

Open your workspace → Sessions in the dashboard and the row is there. The dashboard is where verdicts live: Sentisec does not signal a block through a response header — when it stops a tool call, what changes is the tool call inside the 200 response body.

Add tool use to see the engine work

Re-run with Anthropic's tool-use shape — its bash or text-editor tool, or one of your own — and every tool call the model proposes is scored before it reaches you. A stopped call is withheld, and a text block takes its place:

{
  "type": "text",
  "text": "[Sentisec blocked tool_use: Sentisec policy blocked this tool call. …]"
}

With no other call left, stop_reason is end_turn and the run ends with that explanation. To let the model re-plan instead, see what happens when a tool call is blocked.

Next

Protected docs