Privacy

What we store — and what we don't

What Ottili AI Platform stores about your API usage, and what it deliberately never stores.

Prompt content is not stored by default

Usage events record token counts, model, latency, cost and status — not prompt or response text. This is enforced at the schema level: the usage table has no prompt/response content column.

API keys are hashed, never stored in plaintext

Keys are SHA-256 hashed at creation time. The full key (otk_live_… / otk_test_…) is shown once and cannot be retrieved again — only its prefix is kept for display.

Secrets are redacted from logs

Authorization headers, API keys and upstream provider credentials are never written to application logs.

Company-scoped by default

Every API key, billing account and usage event is bound to a single company_id. There is no cross-company data access outside explicit superadmin routes.

What we store

  • • Prompt and completion token counts, model ID, latency, cost, request status
  • • API key metadata: prefix, scopes, allowed models, budget/rate limits, last-used timestamp
  • • Billing: credit balance, reserved balance, transaction history (amount, reason, timestamp)
  • • Admin/audit actions taken on your account (key created/revoked, credits added)

What we do not store

  • • Prompt or completion text content
  • • The plaintext value of your API key, after initial creation
  • • Upstream provider credentials in application logs

Identity & auth

Console access uses Sign in with Ottili (Ottili Auth, OAuth 2.0 / PKCE). The public API is authenticated separately, per request, with an API key you generate in the dashboard — it is never tied to your browser session or cookies.