Use the API behind a LiteLLM proxy
Add the ISMS Copilot aliases to a LiteLLM proxy config, with per-model framework pins in extra_body, and keep tool calls away from them.
If your team routes models through a LiteLLM proxy, add the ISMS Copilot aliases as OpenAI-compatible models. Applications keep calling the proxy; the proxy holds the sk-isms- key.
No tool calling. The API rejects tools and functions with a 400, and JSON mode (response_format) too. If clients send tools to these model names, the request fails. Route tool-using agents to another model in your proxy and call ISMS Copilot for the compliance step only. See Errors.
config.yaml
model_list:
# Plain aliases: the API detects named frameworks in the user messages.
- model_name: isms-fast
litellm_params:
model: openai/isms-fast
api_base: https://api.ismscopilot.com/v1
api_key: os.environ/ISMS_API_KEY
- model_name: isms-thinking-eu
litellm_params:
model: openai/isms-thinking-eu
api_base: https://api.ismscopilot.com/v1
api_key: os.environ/ISMS_API_KEY
# A pinned model name: every request gets the Dutch NIS 2 module.
- model_name: isms-fast-nis2-nl
litellm_params:
model: openai/isms-fast
api_base: https://api.ismscopilot.com/v1
api_key: os.environ/ISMS_API_KEY
extra_body:
ismscopilot:
frameworks: ["NIS_2_NL"]Start it:
export ISMS_API_KEY=sk-isms-...
litellm --config config.yamlThe openai/ prefix tells LiteLLM to speak the OpenAI chat completions wire to api_base. Keep /v1 on api_base.
Pinning per request
Clients can also send the extension on each request, and the proxy forwards it:
curl http://localhost:4000/v1/chat/completions \
-H "Authorization: Bearer $LITELLM_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "isms-fast",
"messages": [{"role": "user", "content": "Which NIS 2 incident reports do we owe in Italy?"}],
"ismscopilot": {"frameworks": ["NIS_2_IT"]}
}'With the OpenAI Python SDK pointed at the proxy, send it as extra_body={"ismscopilot": {...}}.
Reading what ran
The proxy returns the API's response headers with an llm_provider- prefix, so the disclosure arrives as llm_provider-x-isms-frameworks: NIS_2_NL. Store it next to the answer when you need a record of which modules grounded it.
Notes
- Spend: LiteLLM's own cost tracking does not know our rates unless you add them. The authoritative spend is in the console at platform.ismscopilot.com/usage. Per-key spend caps there still apply behind the proxy.
- Keys: one key in the proxy means one balance and one rate limit (120 requests per minute per key). For separate budgets per team or customer, give each its own key and model entry.
- Logging: if your proxy logs request and response bodies, that copy is on your side. Our Zero Data Retention covers the ISMS Copilot API, not your proxy. To keep prompts and answers out of LiteLLM's logging callbacks, add this to
config.yaml:
litellm_settings:
turn_off_message_logging: true- Checked with LiteLLM 1.83.9 on 2026-10-28 against a local test server:
extra_bodyinlitellm_paramsand anismscopilotfield sent by the client both arrive at the top level of the upstream request body, and the header comes back with thellm_provider-prefix.