Internal AI

Your AI bill, itemised by who spent it.

One provider invoice for the whole company tells you the total and nothing else. odnoga sits in front of every call and records which application made it, which job inside that application, and what it cost — then lets you cap it before the number surprises anyone.

No customer billing required. That part is optional and off unless you turn it on.

Three headers, and the bill explains itself

Send them with every call. From then on every request row, every chart and every budget can be filtered by them.

await fetch("https://api.odnoga.com/v1/chat/completions", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    Authorization: `Bearer ${process.env.ODNOGA_API_KEY}`,
    "X-Odnoga-App": "crm",            // which system
    "X-Odnoga-Function": "lead-enrich", // which job in it
    "X-Odnoga-Env": "production",       // which environment
  },
  body: JSON.stringify({
    model: "gpt-5.1",
    messages: [{ role: "user", content: "Summarise this account" }],
  }),
});

Add x-odnoga-end-user as well if you want the cost broken down per employee rather than per tool.

What you get for it

Cost per app, per function, per environment

Three headers say which system called, which job inside it, and whether it was production. Every request carries them into the log, so "what is the AI bill for" has an answer that does not involve asking around.

Budgets that stop spend, not report it

A soft cap warns. A hard cap refuses the request before it reaches the provider, so an experiment that loops cannot spend the quarter. Set per workspace, per team and per model.

An integration that went quiet looks like a quiet week

Traffic health learns what normal looks like for each caller and tells you when one stops or surges. A tool nobody noticed had broken is the most expensive kind of broken.

Change a prompt on purpose

Versions and labels, and a comparison run over real cases before the change reaches anyone. Switching the production version is a label flip, not a deploy — and the version that answered is on every request row.

Stop paying twice for the same question

Caching across two layers, with the saving recorded rather than assumed. Internal tools ask the same things far more than anyone expects.

Keep the provider contracts you already have

Add your own OpenAI, Anthropic or Gemini keys and odnoga routes through them: your negotiated rates, your committed spend, your invoice from the provider. Everything above still works. Available from Growth.

Honest answer

When you do not need this

  • One team, one application, one provider. The provider’s own dashboard will tell you enough.
  • You would rather run the gateway yourself. LiteLLM is open source and does much of this.
  • Your spend is small enough that the question has never come up. Come back when it does.

Find out what the number is made of.

The free plan has no monthly fee and meters everything. Add the headers, send traffic, read the breakdown.