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 focused v1. Know these boundaries before you build on it.

Supported endpoints

v1 covers chat-style text generation only:
  • OpenAI: /chat/completions (batch + streaming).
  • Anthropic: /v1/messages (batch + streaming).
Any other provider endpoint returns 501 endpoint_not_supported_in_v1. Embeddings, assistants, audio, the responses API, and similar are not proxied yet.

Image handling

The masker operates on text leaves, but inline image bytes are covered too. What happens depends on how the image is attached:
  • Inline base64 image data (an OpenAI image_url data: URI, or an Anthropic source.type: "base64" block) is scanned and redacted before the request is forwarded. If the image-redaction stage is unavailable, the request fails hard with 503 image_redact_unavailable rather than forwarding un-redacted image PII.
  • Remote image URLs (an http(s) image_url, or an Anthropic source.type: "url" block) are passed through unredacted; KINDI does not fetch and scan them. Don't reference remote images whose URL or pixels contain PII you need removed.
For remote images, redact the file yourself with the dedicated file-redaction surface (Files: redact) before referencing it.

Token preservation is best-effort

KINDI can only unmask a token the model reproduces verbatim. Even with preserve tags on, a model may paraphrase or drop a token, especially in long outputs. For high-stakes pipelines, verify token survival yourself; see Common mistakes.

Managed-demo caps

The managed demo (KINDI's own provider key) is deliberately constrained, because KINDI pays for it:
  • Session-only: never available to Bearer/API callers.
  • Email-verified users only: else 403 demo_requires_verification.
  • Cheap-model allowlist: else 400 model_not_allowed_on_demo.
  • Clamped output length: a max-output cap bounds each demo response.
  • Per-user daily token cap: else 402 managed_allowance_exhausted.
  • Global daily budget: else 503 demo_unavailable.
  • Tighter rate limit than the own-key path.
None of these apply to bring-your-own-key requests, which run on your own provider account and provider limits.

Request size

The proxy enforces a request body-size cap; oversized bodies return 413 request_too_large. See Error codes.