thairouter
Account

Privacy & logging

Not a policy summary. The actual columns.

Per request

One row in the usage table for every request that reaches the reservation step.

ColumnWhy
idThe usage id returned to you, for reconciliation.
user_id, api_key_idWhich account and key made the request. Playground requests have no key id.
modelWhich model was called.
statusok, error or insufficient_credit.
prompt_tokens, completion_tokensCounts from the model server, for billing and your usage charts.
cost_microSettled cost in millionths of a credit.
latency_msWall-clock time of the request, for the performance stats on model pages.
created_atTimestamp.

Never stored

  • Prompt text, message history, system prompts.
  • Model output, including reasoning / thinking text.
  • Request or response bodies at the gateway or the model server. Gateway logging and caching are off.
  • IP addresses or user agents in usage rows.
  • The user field or any other request parameter.
  • Anything sent to analytics or advertising networks. There are none on the API.

Per account

DataNotes
Email, name, avatarFrom your sign-in provider (Google, GitHub) or what you typed at sign-up.
Password hashEmail sign-ups only. Hashed by Better Auth; never stored in plaintext.
SessionsCookie sessions for the dashboard, with expiry.
API keysSHA-256 hash, 10-character display prefix, name, timestamps. See Authentication.
Credit ledgerTop-ups, adjustments and one net usage entry per request. Stripe holds card and PromptPay details; we store the Stripe session id and amount.
OAuth accountsProvider and account id only. Google/GitHub access, refresh and id tokens are discarded before the row is written; we never call provider APIs after sign-in.

How the proxy enforces it

The gateway is a Cloudflare Worker. A chat request is parsed once to read model, messages length, max_tokens and stream, then forwarded. Streaming responses are piped through a transform that only looks for the final usage object; the bytes are never accumulated. The model server is vLLM on hardware we run, reached through a Cloudflare AI Gateway route with logging and caching disabled. No third-party model provider is ever called.

Public stats on model pages (tokens per day, latency percentiles) are aggregates of the columns above, across all users. They cannot be traced to a request or an account.

Deletion

Deleting your account removes the user row and, through foreign keys, every session, key, usage row and ledger entry. Revoking a key keeps its usage rows so your history stays consistent, but the key itself is dead immediately.