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:
NOMINALOpen 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.