Agent-readable docs index: /llms.txt. Full docs in one file: /llms-full.txt. Download /docs.zip to grep all markdown files locally.
The proxy is a drop-in for the Anthropic Messages API. Set base_url to KINDI's Anthropic proxy path and use two headers: your KINDI key as the bearer, and your Anthropic key as X-Provider-Key.
  • Base URL: https://api.kindi.me/api/v1/proxy/anthropic
  • Authorization: Bearer <your KINDI key> (mk_live_…)
  • X-Provider-Key: <your Anthropic key> (sk-ant-…)
KINDI authenticates you with the standard Authorization: Bearer header (not Anthropic's x-api-key). Your Anthropic key rides in X-Provider-Key. The proxy_config helper sets both for you, which removes the most common source of header friction.
The bring-your-own-key path is server-side only. X-Provider-Key is not in KINDI's CORS allow-list, so a browser preflight carrying it is rejected and the request never leaves the page; call the proxy from your backend, not from front-end JavaScript. (You wouldn't want to anyway: a provider key in a browser is exposed to every visitor.) The browser-reachable path is the dashboard's managed demo; see Keys & auth.

With the SDK helper

import anthropic from kindi import proxy_config cfg = proxy_config( "anthropic", kindi_api_key="mk_live_...", provider_key="sk-ant-...", ) # cfg == {"base_url": "https://api.kindi.me/api/v1/proxy/anthropic", # "default_headers": {"Authorization": "Bearer mk_live_...", # "X-Provider-Key": "sk-ant-..."}} client = anthropic.Anthropic( base_url=cfg["base_url"], default_headers=cfg["default_headers"], api_key="unused", ) msg = client.messages.create( model="claude-haiku-4-5-20251001", max_tokens=256, messages=[{"role": "user", "content": "Summarize: patient John Doe, ID 1012345672, complains of headache."}], ) print(msg.content[0].text)

Without the SDK (raw headers)

curl https://api.kindi.me/api/v1/proxy/anthropic/v1/messages \ -H "Authorization: Bearer mk_live_..." \ -H "X-Provider-Key: sk-ant-..." \ -H "anthropic-version: 2023-06-01" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-haiku-4-5-20251001", "max_tokens": 256, "messages": [{"role": "user", "content": "Summarize: patient John Doe, ID 1012345672."}] }'

System prompts and tool use

  • System prompts (system, string or array-of-blocks) are masked before forwarding and restored in the reply.
  • Tool use is supported: KINDI masks the text leaves of tool_use blocks and tool_result content, so PII inside tool arguments/results is masked too.
  • Token preservation: opt in with X-Kindi-Preserve-Tags to instruct Claude to reproduce the <MASKED_…> tokens verbatim. See Preserve tags.
v1 supports /v1/messages only. Other Anthropic endpoints return 501 endpoint_not_supported_in_v1; see Limitations.