Final Router

About

We got tired of writing the same provider adapter

Final Router started as internal plumbing. Every project needed OpenAI for one thing, Anthropic for another and a cheap open model for the boring bulk work - and every project rebuilt the same routing, retry and cost-tracking code from scratch. So we built it once, properly, and opened it up.

20

models in the catalogue

8

providers behind one URL

0%

markup on provider tokens

EU

where your data is stored

What we believe

Four decisions that shape everything else

One integration, not five

Every provider ships a slightly different SDK, a slightly different error shape and a slightly different idea of what a token is. We absorb that once so your codebase holds one client and one mental model.

No markup on tokens

You pay the provider's list price. We charge on the credit purchase and on bring-your-own-key routing, and nowhere else. A gateway that quietly marks up inference has an incentive to route you badly.

Routing you can inspect

Every request tells you which model answered, why it was chosen, what it cost and how long it took. Automatic routing is only useful if you can audit the automation.

Prompts are not our product

Request bodies live in memory for the length of a request and are never written to our database. We do not train on them, and the Data Processing Addendum makes that contractual rather than aspirational.

The problem, stated plainly

Model quality moves every few weeks. The model that was best and cheapest for your summarisation endpoint in March is neither by June. Teams respond in one of two ways: they pick one provider and quietly fall behind, or they integrate several and take on the maintenance - five SDKs, five sets of rate limits, five invoices, and no single view of what any of it costs.

Neither is a good trade. The routing decision is genuinely simple - given a request, a set of models you are allowed to use, and a preference for price, latency or quality, pick one - but it has to be made on every request, with live pricing and live health data. That is infrastructure, and infrastructure is worth centralising.

How we build

Small surface area, boring technology, and no feature that cannot be explained in a sentence. The gateway speaks the OpenAI chat completions format because that is what every SDK already speaks - adopting Final Router should be a base URL change, not a migration.

We run on Supabase and Vercel in Frankfurt, keep provider credentials encrypted under a key the database never sees, and publish what we do with data in language you can actually check us against.