Every AI model, every prompt, every dollar — managed in one place.
odnoga is the AI control plane for Supabase SaaS. Version your prompts, route across every LLM, bill your end users on Stripe, and trace every call — without writing the infrastructure.
const jwt = req.headers.get("authorization")!.split(" ")[1];
const sub = JSON.parse(atob(jwt.split(".")[1])).sub; // Supabase user id
const r = await fetch(ODNOGA + "/chat/completions", {
method: "POST",
headers: {
Authorization: `Bearer ${Deno.env.get("ODNOGA_API_KEY")}`,
"x-odnoga-end-user": sub, // metered per end user
},
body: JSON.stringify({
model: "auto", // router picks the model
messages: [{ role: "user", content: "Hello!" }],
}),
});Read the Supabase-native guide.
Tokens processed through odnoga
One key — every provider
Three things nobody else gives you in one platform.
Generic LLM gateways forward requests. odnoga ships the business layer your multi-tenant SaaS actually needs.
Git-like prompts. No redeploys.
Stop hardcoding prompts across edge functions. Version, label (production / staging), A/B test and rollback instantly — call by slug from your SDK.
const r = await ai.prompts.chat({
slug: 'welcome-email',
label: 'production',
variables: { name: 'Ada' },
});Twelve lines in your Edge Function.
Built for Supabase Edge Functions: forward the caller's Supabase user id and every request is metered, billed and traced per end user — no package to install, no metering layer to write.
const jwt = req.headers.get("authorization")!.split(" ")[1];
const sub = JSON.parse(atob(jwt.split(".")[1])).sub;
await fetch("https://api.odnoga.com/functions/v1/airouter-openai-compat/v1/chat/completions", {
method: "POST",
headers: {
Authorization: `Bearer ${Deno.env.get("ODNOGA_API_KEY")}`,
"x-odnoga-end-user": sub, // metered per end user
},
body: JSON.stringify({ model: "auto", messages }),
});Per-end-user billing on Stripe.
One header attributes cost to your end user. Tenants get their own Stripe customer, their own plans, one consolidated invoice across every vendor — OpenAI, Anthropic, Gemini, Replicate.
// One header attributes cost & limits.
await fetch("https://api.odnoga.com/functions/v1/airouter-openai-compat/v1/chat/completions", {
headers: {
Authorization: `Bearer ${KEY}`,
"x-airouter-end-user": "tenant_acme:user_42",
},
body: JSON.stringify({ model: "auto", messages }),
});We were the team drowning in this.
Building a multi-tenant AI SaaS, we hit the same walls every time. odnoga is what we wished existed.
Models hardcoded across 30 edge functions.
Routing rules in the dashboard. Change models server-side, no redeploy.
Prompts buried in code. No A/B, no rollback.
Prompt registry with versions, labels, A/B routing and instant rollback.
Edge functions are a black box. Who called what, when, for whom?
Every call is a row: tenant, end-user, prompt version, cost, latency, provider.
You can't bill your customers. AI cost just sits on your card.
Per-end-user attribution + tenant Stripe + consolidated invoice across all vendors.
What is odnoga?
odnoga is a multi-model AI management platform that gives a multi-tenant SaaS everything it needs to ship AI to production — prompt versioning with A/B and rollback, per-end-user billing on Stripe, smart routing across every LLM provider, an encrypted key vault, and full traceability — natively wired into Supabase.
Who is it for?
SaaS teams building on Supabase that manage many AI models and prompts, and need to bill their own customers for AI usage without writing the metering, billing and tracing layer themselves.
How is it different?
- • Per-end-user attribution built for Supabase: forward the JWT subject and usage, budgets and invoices follow that user.
- • Prompt management is first-class: versions, labels, A/B routing, instant rollback — built in, not a separate tool.
- • Multi-tenant billing with per-end-user attribution and consolidated Stripe invoicing across every vendor.