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 OpenAI Chat Completions API. Set the base_url to KINDI's OpenAI proxy path and use two headers: your KINDI key as the bearer (authenticates you to KINDI and meters the masking fee), and your OpenAI key as X-Provider-Key (KINDI forwards your request to OpenAI with it, never stored).
  • Base URL: https://api.kindi.me/api/v1/proxy/openai/v1
  • Authorization: Bearer <your KINDI key> (mk_live_…)
  • X-Provider-Key: <your OpenAI key> (sk-…)
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

The KINDI SDKs ship a proxy_config helper that returns the exact base_url + headers, so you don't hand-assemble them.
from openai import OpenAI from kindi import proxy_config cfg = proxy_config( "openai", kindi_api_key="mk_live_...", provider_key="sk-...", ) # cfg == {"base_url": "https://api.kindi.me/api/v1/proxy/openai/v1", # "default_headers": {"Authorization": "Bearer mk_live_...", # "X-Provider-Key": "sk-..."}} client = OpenAI( base_url=cfg["base_url"], default_headers=cfg["default_headers"], api_key="unused", # the bearer is set via default_headers ) resp = client.chat.completions.create( model="gpt-5.4-mini", messages=[{"role": "user", "content": "Summarize: patient John Doe, ID 1012345672, complains of headache."}], ) print(resp.choices[0].message.content)

Without the SDK (raw headers)

Any OpenAI-compatible client works: set the base URL and the two headers yourself.
from openai import OpenAI client = OpenAI( base_url="https://api.kindi.me/api/v1/proxy/openai/v1", api_key="unused", default_headers={ "Authorization": "Bearer mk_live_...", "X-Provider-Key": "sk-...", }, )

System prompts and tool calls

  • System prompts are masked along with user/assistant content; PII in a system message is removed before it reaches OpenAI, and restored in the reply.
  • Tool calls are supported: KINDI masks the text leaves of tool_calls arguments and tool (tool-result) messages, forwards, and unmasks the response, so a tool argument containing PII is masked too.
  • Token preservation: opt in with the X-Kindi-Preserve-Tags header so OpenAI is instructed to reproduce the <MASKED_…> tokens verbatim. See Preserve tags.
v1 supports /chat/completions only. Other OpenAI endpoints return 501 endpoint_not_supported_in_v1; see Limitations.