Principles
What the API promises, and how the code keeps the promise.
Private by construction
The proxy is a streaming pass-through. Request and response bodies live in Worker memory for the duration of the request and are never written to a database, a log line or an object store. Gateway request logging and caching are switched off. The only per-request rows we keep are token counts, cost, status, latency, model and key id.
- Prompts and completions are never used to train, fine-tune or evaluate any model.
- No analytics vendors, data brokers or resale. Traffic goes client → our gateway → our model server.
- Delete your account and every usage row goes with it.
The full column list is in Privacy & logging.
OpenAI-compatible, not OpenAI-flavoured
We implement the OpenAI chat completions contract as-is so official SDKs, LangChain, LiteLLM and friends work by changing base_url. We do not invent our own request shape. The few ThaiRouter additions are additive (an extra thairouter object in responses, an x-thairouter-usage-id header on streams) and safe to ignore.
Infrastructure we run
Every model is open-weights and served from vLLM on hardware we operate. There are no hidden upstream providers and no per-request routing to third-party APIs. The model page shows live latency, throughput and success rate measured from real ThaiRouter traffic rather than vendor claims.
Honest billing
Prices are per million tokens in Thai baht, and every charge is visible in your dashboard with the usage id the API returned. Credits are reserved before a request and settled against the token counts the model server reports. Upstream failures are refunded in full. Details in Billing & credits.
What we deliberately don't do
- No automatic fallback to other providers. If our server is down you get a
502, not a silent detour through someone else's API. - No prompt caching or response caching at the gateway.
- No legacy
/v1/completions, embeddings, images, audio or fine-tuning endpoints yet.