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 { data: { user } } = await supabase.auth.getUser(jwt); // verified, not decoded
if (!user) return new Response("Unauthorized", { status: 401 });
const r = await fetch(ODNOGA + "/chat/completions", {
method: "POST",
headers: {
Authorization: `Bearer ${Deno.env.get("ODNOGA_API_KEY")}`,
"x-odnoga-end-user": user.id, // 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.
Version and label prompts, capture a reviewed real example, compare 2–8 models on identical frozen cases, then A/B test and switch production without redeploying.
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 { data: { user } } = await supabase.auth.getUser(jwt);
if (!user) return new Response("Unauthorized", { status: 401 });
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": user.id, // 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 }),
});Let your AI assistant run your AI gateway
odnoga ships a built-in MCP server. Connect Claude, Cursor, VS Code or Lovable, sign in through OAuth, approve the scopes — and your AI tool can configure the gateway with the same rules and audit trail as the dashboard. No API keys to copy.
Prompts
Save versions, move labels, resolve with variables.
Routing
Read and preview policy, propose auto chains — you confirm every change.
Models & catalog
List models, check health, track catalog sync and pricing.
Usage & billing
Spend summaries, trends, errors, invoices and wallets.
Batches & cache
Run offline jobs, tune caching, see what caching actually saved.
Schemas & settings
Version output schemas, manage web-search policy and workspaces.
Add the odnoga MCP URL in your AI tool.
Sign in through OAuth and pick a workspace.
Approve the scopes — revoke anytime per app.
Every scope is opt-in, write scopes always require explicit approval, and every action a tool takes is recorded with the client name and IP.
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 100+ 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.
Real products run all AI on odnoga
Salesdots runs every AI operation on odnoga
An AI-powered sales platform — lead enrichment, outreach drafting, call summaries, deal scoring — with every request routed through odnoga.
- All AI through the odnoga gateway
- Prompts versioned, no redeploys
- Per-tenant billing on Stripe
- Every call traced per end user
2ool.ai powers its Luna AI copilot with odnoga
An all-in-one platform for IT consulting firms — CV management, ATS, projects, timesheets, client portal — where Luna, the AI copilot, runs every operation through odnoga.
- Luna copilot — every action via the gateway
- Project intelligence over offers, SOWs and RFPs
- AI usage metered per tenant as credits
- RBAC-aware actions, traced per user
What is odnoga?
odnoga is a multi-model AI control plane for multi-tenant SaaS. It combines an OpenAI-compatible gateway, prompt versioning, a laboratory that compares 2–8 models on frozen real-world cases, explicit response and vendor prompt caching, per-end-user billing, routing, an encrypted key vault and request-level 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 operations are one workflow: versions, real-run capture, frozen multi-model evaluations, A/B routing and atomic label switching.
- • Multi-tenant billing with per-end-user attribution and consolidated Stripe invoicing across every vendor.
- • Two explicit caches: deterministic answer reuse and vendor prompt caching, each with separate controls and measured savings.