Painted atmosphere behind the page opening

Inference · Evals · Observability

The last model integration you’ll write.

One endpoint gets you 40+ models across six providers, evals that catch regressions before your users do, and a trace on every call.

40+

MODELS

6

PROVIDERS

240 ms

MEDIAN P50

1M tokens

FREE MONTHLY

POST

/v1/chat

policy: cheapest above 0.90

REQUEST

{
  “model”: “plinth-route-v2”,
  “messages”: [{
    “role”: “user”,
    “content”: “Summarise
      this contract.”
  }]
}

ROUTER

atlas-70b

0.96

over budget

atlas-8b

0.94

picked

orbit-mini

0.91

slower p95

vela-vision

0.88

below floor

Scored on your own eval history, not a leaderboard.

RESPONSE

200

240 ms

$0.0004

Auto-renews 1 March unless either party gives 60 days notice. Liability is capped at fees paid in the prior 12 months.

trace

t_9f3ac210

Painted atmosphere behind the page opening

Inference · Evals · Observability

The last model integration you’ll write.

One endpoint gets you 40+ models across six providers, evals that catch regressions before your users do, and a trace on every call.

40+

MODELS

6

PROVIDERS

240 ms

MEDIAN P50

1M tokens

FREE MONTHLY

POST

/v1/chat

policy: cheapest above 0.90

REQUEST

{
  “model”: “plinth-route-v2”,
  “messages”: [{
    “role”: “user”,
    “content”: “Summarise
      this contract.”
  }]
}

ROUTER

atlas-70b

0.96

over budget

atlas-8b

0.94

picked

orbit-mini

0.91

slower p95

vela-vision

0.88

below floor

Scored on your own eval history, not a leaderboard.

RESPONSE

200

240 ms

$0.0004

Auto-renews 1 March unless either party gives 60 days notice. Liability is capped at fees paid in the prior 12 months.

trace

t_9f3ac210

Halyard

71%

Cut from extraction cost

Halyard

71%

Cut from extraction cost

Fernbank

780 ms

p95 latency, down from 4.1 s

Fernbank

780 ms

p95 latency, down from 4.1 s


Kestrel

2.1M

SKUs classified in nine days


Kestrel

2.1M

SKUs classified in nine days

Tessera

6 weeks

Prototype to production

Tessera

6 weeks

Prototype to production

Illustrative figures. Replace with your own.

In production at

Halyard

Fernbank

Corvid Labs

Tessera

Kestrel

Portside

Anvil Works

Sable

Ridgeway

Marlowe

Bracken

Windrow

Alder

Thornbury

Quarry

Lowell

Kelvin

Northgate

Pemberton

Larkspur

Ashcroft

Dunmore

Selby

Wexford

Halyard

Fernbank

Corvid Labs

Tessera

Kestrel

Portside

Anvil Works

Sable

Ridgeway

Marlowe

Bracken

Windrow

Alder

Thornbury

Quarry

Lowell

Kelvin

Northgate

Pemberton

Larkspur

Ashcroft

Dunmore

Selby

Wexford

Halyard

Fernbank

Corvid Labs

Tessera

Kestrel

Portside

Anvil Works

Sable

Ridgeway

Marlowe

Bracken

Windrow

Alder

Thornbury

Quarry

Lowell

Kelvin

Northgate

Pemberton

Larkspur

Ashcroft

Dunmore

Selby

Wexford

340+ teams

340+ teams

route production traffic through Plinth. Illustrative figure, replace with your own.

route production traffic through Plinth. Illustrative figure, replace with your own.

The problem

Replace three vendors and a spreadsheet.

Most teams buy routing from one company, evals from another, and observability from a third. Then quality drops on a Tuesday and nobody can prove which change caused it. Plinth is all three, sharing one trace.

The stitched stack

Plinth

Vendors to manage

Vendors to manage

Three, plus a spreadsheet

Three, plus a spreadsheet

One

One

Switching model

Switching model

Code change, redeploy

Code change, redeploy

Routing policy, no deploy

Routing policy, no deploy

Provider outage

Provider outage

Incident

Incident

Latency blip

Latency blip

Catching a regression

Catching a regression

A support ticket

A support ticket

A failed build

A failed build

Cost attribution

Cost attribution

Instrument it yourself

Instrument it yourself

Every call, by default

Every call, by default

Reconciling invoices

Reconciling invoices

Three of them

Three of them

One, at provider cost

One, at provider cost

Inference

The router is the product.

Send a request to plinth-route-v2 and we choose the model. The choice is yours to constrain: cheapest that clears your eval bar, fastest inside a latency budget, or a fixed model when you need a fixed model.

Send a request to plinth-route-v2 and we choose the model. The choice is yours to constrain: cheapest that clears your eval bar, fastest inside a latency budget, or a fixed model when you need a fixed model.

Automatic failover on provider timeouts. You pay only for the call that succeeded.

Automatic failover on provider timeouts. You pay only for the call that succeeded.

Streaming with the same failover semantics as a blocking call.

Streaming with the same failover semantics as a blocking call.

Structured output validated against your schema, retried free on a malformed response.

Structured output validated against your schema, retried free on a malformed response.

Batch at half price, up to 50,000 requests.

Batch at half price, up to 50,000 requests.

Routes

/extract

active

Routing policy

cheapest above 0.94

route:

/extract

policy:

cheapest_above

threshold:

0.94

latency_budget_ms:

800

eligible:

- atlas-8b

- atlas-70b

- orbit-pro

failover:

true

MODEL

COST

P50

EVAL

ELIGIBLE

atlas-8b

$0.60/M

180 ms

0.95

yes

atlas-70b

$3.40/M

410 ms

0.97

yes

orbit-pro

$2.90/M

520 ms

0.96

yes

orbit-mini

$0.55/M

140 ms

0.86

below bar

Routes

/extract

active

Routing policy

cheapest above 0.94

route:

/extract

policy:

cheapest_above

threshold:

0.94

latency_budget_ms:

800

eligible:

- atlas-8b

- atlas-70b

- orbit-pro

failover:

true

MODEL

COST

P50

EVAL

ELIGIBLE

atlas-8b

$0.60/M

180 ms

0.95

yes

atlas-70b

$3.40/M

410 ms

0.97

yes

orbit-pro

$2.90/M

520 ms

0.96

yes

orbit-mini

$0.55/M

140 ms

0.86

below bar

Evals

contracts.yaml

run #1,204

▲ Gate failed. Score dropped 0.05 from the previous run.

0.87

threshold 0.92 · 340 cases

CASE

GRADER

EXPECTED

SCORE

bol-0042

schema

valid

1.00

bol-0117

similarity

≥ 0.90

0.71

bol-0203

exact

MAERSK

1.00

bol-0288

rubric

≥ 0.85

0.63

bol-0341

schema

valid

1.00

The change that caused it: one word in the system prompt.

Evals

contracts.yaml

run #1,204

▲ Gate failed. Score dropped 0.05 from the previous run.

0.87

threshold 0.92 · 340 cases

CASE

GRADER

EXPECTED

SCORE

bol-0042

schema

valid

1.00

bol-0117

similarity

≥ 0.90

0.71

bol-0203

exact

MAERSK

1.00

bol-0288

rubric

≥ 0.85

0.63

bol-0341

schema

valid

1.00

The change that caused it: one word in the system prompt.

Evals

The regression you didn’t ship.

An eval is a set of inputs, expected properties, and a grader. Plinth runs yours on every prompt change, model change, and route change, then fails the build when the score drops past your threshold. The bad version never reaches production.

An eval is a set of inputs, expected properties, and a grader. Plinth runs yours on every prompt change, model change, and route change, then fails the build when the score drops past your threshold. The bad version never reaches production.

Exact match, JSON schema, semantic similarity, or a model-graded rubric you write.

Exact match, JSON schema, semantic similarity, or a model-graded rubric you write.

Regression gates that return a non-zero exit code in CI.

Regression gates that return a non-zero exit code in CI.

Nightly drift detection against pinned models.

Nightly drift detection against pinned models.

Promote any production trace into a golden case in one click.

Promote any production trace into a golden case in one click.

Observability

Every call, written down.

A trace records the request, the model that answered, tokens in and out, latency, cost, and the eval score if one ran. Filter by user, route, deploy, or anything you attach as metadata. No instrumentation to write.

A trace records the request, the model that answered, tokens in and out, latency, cost, and the eval score if one ran. Filter by user, route, deploy, or anything you attach as metadata. No instrumentation to write.

Spend per feature, per customer, per deploy, out of the box.

Spend per feature, per customer, per deploy, out of the box.

p50, p95, and p99 split by model and by route.

p50, p95, and p99 split by model and by route.

Replay any historical trace against a different model and diff the output.

Replay any historical trace against a different model and diff the output.

Stream traces to your own warehouse. We are not trying to be your log store.

Stream traces to your own warehouse. We are not trying to be your log store.

Usage

August 2026

month to date

Spend by route

$20,600

/extract

$14,200

/summarise

$4,100

/classify

$1,600

other

$700

By model

share of spend

atlas-8b

61%

3.1M calls

atlas-70b

29%

412K calls

orbit-mini

8%

890K calls

orbit-pro

2%

31K calls

Usage

August 2026

month to date

Spend by route

$20,600

/extract

$14,200

/summarise

$4,100

/classify

$1,600

other

$700

By model

share of spend

atlas-8b

61%

3.1M calls

atlas-70b

29%

412K calls

orbit-mini

8%

890K calls

orbit-pro

2%

31K calls

Architecture

What actually happens to a request.

Six steps, and the only one we add latency to is measured in single-digit milliseconds.

01

Request

Your application calls one endpoint with a model name or a routing policy.

02

Route

The router scores eligible models on cost, latency, and your own eval history, then picks one.

03

Call

We call the provider over a warm connection pool in the region you pinned.

04

Check

If the route has an eval attached, the response is graded before it is returned to you.

05

Return

You get the response. Overhead added by Plinth at p50: 11 ms.

06

Record

The trace is written asynchronously. Under zero-day retention, content is dropped and only metadata is kept.

01

Request

Your application calls one endpoint with a model name or a routing policy.

02

Route

The router scores eligible models on cost, latency, and your own eval history, then picks one.

03

Call

We call the provider over a warm connection pool in the region you pinned.

04

Check

If the route has an eval attached, the response is graded before it is returned to you.

05

Return

You get the response. Overhead added by Plinth at p50: 11 ms.

06

Record

The trace is written asynchronously. Under zero-day retention, content is dropped and only metadata is kept.

01

Request

Your application calls one endpoint with a model name or a routing policy.

02

Route

The router scores eligible models on cost, latency, and your own eval history, then picks one.

03

Call

We call the provider over a warm connection pool in the region you pinned.

04

Check

If the route has an eval attached, the response is graded before it is returned to you.

05

Return

You get the response. Overhead added by Plinth at p50: 11 ms.

06

Record

The trace is written asynchronously. Under zero-day retention, content is dropped and only metadata is kept.

Built for

Four teams, one integration.

The reason people pick Plinth changes depending on who is asking. Here is the honest version for each.

AI product teams

Platform & infra

Agencies

Open source

Ship features without owning the plumbing.

Why they pick Plinth

You wanted to build a product, not a routing layer, a retry policy, and an eval harness. One endpoint covers all three, and the eval gate means a prompt change cannot quietly degrade the thing you shipped last week.

Typical result

Corvid Labs caught four regressions in a quarter. None reached a user.

Evals

contracts.yaml

CI

▲ Gate failed. Score dropped 0.05 from the previous run.

0.87

threshold 0.92 · 340 cases

CASE

GRADER

EXPECTED

SCORE

bol-0042

schema

valid

1.00

bol-0117

similarity

≥ 0.90

0.71

bol-0288

rubric

≥ 0.85

0.63

bol-0341

schema

valid

1.00

Benchmarks

Pick a model on numbers, not vibes.

The same request, run nightly against every model we route to. Sort by cost, latency, or quality. Change your mind the moment the numbers do.

MODEL

CONTEXT

IN $/M

OUT $/M

P50

QUALITY

plinth-route-v2

plinth-route-v2

varies

varies

varies

varies

varies

varies

240 ms

240 ms

94.1

94.1

atlas-70b

atlas-70b

200K

200K

$3.00

$3.00

$15.00

$15.00

410 ms

410 ms

96.3

96.3

atlas-8b

atlas-8b

128K

128K

$0.20

$0.20

$0.60

$0.60

180 ms

180 ms

88.7

88.7

orbit-pro

orbit-pro

1M

1M

$2.50

$2.50

$10.00

$10.00

520 ms

520 ms

95.8

95.8

orbit-mini

orbit-mini

128K

128K

$0.15

$0.15

$0.45

$0.45

140 ms

140 ms

86.2

86.2

vela-vision

vela-vision

64K

64K

$1.80

$1.80

$7.20

$7.20

690 ms

690 ms

91.4

91.4

wren-embed-2

wren-embed-2

8K

8K

$0.02

$0.02

n/a

n/a

40 ms

40 ms

n/a

n/a

Illustrative data. Replace with your own.

Quality index is our own eval suite, not a public benchmark. We publish the methodology so you can argue with it.

Quality index is our own eval suite, not a public benchmark. We publish the methodology so you can argue with it.

SECURITY

Your data trains nothing. Ever.

Not our models, not a provider’s. Turn on zero-day retention and we keep nothing once the response is returned. It is a contract term, not a checkbox you can lose in a settings page.

01

Zero-day retention

Nothing is stored after the response returns. Traces keep metadata only.

02

No training, ever

A prohibition on training is a condition of being in our routing pool. We re-verify it annually.

03

SOC 2 Type II and ISO 27001

Audited every year. Reports available under NDA, usually within a day.

04

Data residency

Pin processing to US or EU. Enterprise pins to a single region, traces and backups included.

SECURITY

Your data trains nothing. Ever.

Not our models, not a provider’s. Turn on zero-day retention and we keep nothing once the response is returned. It is a contract term, not a checkbox you can lose in a settings page.

01

Zero-day retention

Nothing is stored after the response returns. Traces keep metadata only.

02

No training, ever

A prohibition on training is a condition of being in our routing pool. We re-verify it annually.

03

SOC 2 Type II and ISO 27001

Audited every year. Reports available under NDA, usually within a day.

04

Data residency

Pin processing to US or EU. Enterprise pins to a single region, traces and backups included.

“

We were paying three vendors to disagree with each other. Now the router picks, the evals check, and the trace tells us why.

We were paying three vendors to disagree with each other. Now the router picks, the evals check, and the trace tells us why.

PA

Priya Anand

STAFF ENGINEER, HALYARD

“

We were paying three vendors to disagree with each other. Now the router picks, the evals check, and the trace tells us why.

PA

Priya Anand

STAFF ENGINEER, HALYARD

Customers

Proof, with numbers attached.

Five teams, what they were paying before, and what changed after. Every figure came out of their own dashboard.

Halyard

Logistics

Halyard reads 40,000 bills of lading a week. Routing cut the bill by two thirds without touching accuracy.

71%

Lower cost

$20,600

From $71,000

94.3

Accuracy, up from 94.1

Halyard

Logistics

Halyard reads 40,000 bills of lading a week. Routing cut the bill by two thirds without touching accuracy.

71%

Lower cost

$20,600

From $71,000

94.3

Accuracy, up from 94.1

Fernbank

Fintech

p95 from 4.1 s to 780 ms

“Our p95 was a support problem long before it was an engineering problem.”

Tomás Berger, Fernbank

Fernbank

Fintech

p95 from 4.1 s to 780 ms

“Our p95 was a support problem long before it was an engineering problem.”

Tomás Berger, Fernbank

Corvid Labs

Caught a 12% quality drop before release

340

Golden cases

Corvid Labs

Caught a 12% quality drop before release

340

Golden cases

Tessera

Healthcare

Compliance review usually kills projects. This one it only slowed down.

6 weeks

Not seven months

0 day

Retention

Tessera

Healthcare

Compliance review usually kills projects. This one it only slowed down.

6 weeks

Not seven months

0 day

Retention

Kestrel

Commerce

2.1M SKUs in nine days

$18,400

From $61,000 projected

40M

Tokens a day

Kestrel

Commerce

2.1M SKUs in nine days

$18,400

From $61,000 projected

40M

Tokens a day

Integrations

Change one base URL. Keep the rest of your code.

Official SDKs for Python, TypeScript, Go, and Ruby. An OpenAI-compatible endpoint if you would rather not change anything at all.

py

Python

ts

TypeScript

go

Go

rb

Ruby

{ }

REST

>_

CLI

gh

GitHub Actions

dk

Docker

tf

Terraform

wh

Webhooks

db

Warehouse export

ot

OpenTelemetry

Quickstart

Your first call takes two minutes.

Four steps, and the last one is looking at what just happened.

02

Set your key

Set your key

Create one under Settings, then export PLINTH_API_KEY. Keys rotate without downtime.

Create one under Settings, then export PLINTH_API_KEY. Keys rotate without downtime.

03

Make a call

Make a call

Point at plinth-route-v2 and the router picks the model.

Point at plinth-route-v2 and the router picks the model.

04

Look at the trace

Look at the trace

It is already in the dashboard, with the model, token counts, and what it cost.

It is already in the dashboard, with the model, token counts, and what it cost.

from plinth import Plinth

client = Plinth()
reply = client.chat(
model=“plinth-route-v2”,
messages=[{“role”: “user”, “content”: “Hello”}],
)

# trace_id is on the response

from plinth import Plinth

client = Plinth()
reply = client.chat(
model=“plinth-route-v2”,
messages=[{“role”: “user”, “content”: “Hello”}],
)

# trace_id is on the response

Recently shipped

We ship every week.

Seven days between each of the last three. See the full changelog.

Seven days between each of the last three. See the full changelog.

v2.14

v2.14

12 Aug

ADDED

Batch endpoint, at half price

Batch endpoint, at half price

Submit up to 50,000 requests and get a file back. Same eval and trace behaviour as a real-time call.

Submit up to 50,000 requests and get a file back. Same eval and trace behaviour as a real-time call.

7 DAYS

v2.13

v2.13

5 Aug

ADDED

Single-region pinning, traces included

Single-region pinning, traces included

Traces could previously land in a second region during failover. Correct for availability, wrong for several of your legal teams.

Traces could previously land in a second region during failover. Correct for availability, wrong for several of your legal teams.

7 DAYS

v2.12

v2.12

29 Jul

IMPROVED

Router p50 down to 240 ms

Router p50 down to 240 ms

Model scoring moved off the request path into a cache refreshed every 15 seconds. No change required on your side.

Model scoring moved off the request path into a cache refreshed every 15 seconds. No change required on your side.

Questions

The ones that come up first.

Still stuck? Talk to us and a person answers.

Still stuck? Talk to us and a person answers.

Do you mark up provider pricing?

No. Provider cost appears on your invoice at the price the provider charges us. Our $0.40 and $1.20 lines are the only things we make money on, which is why we have no reason to route you somewhere expensive.

What happens when a provider goes down?

Do I have to use the router?

How long does migrating take?

What do you do with our prompts?

1M tokens a month, free forever.

No card, no trial clock, no sales call. Move to a paid plan when the invoice makes sense, or don’t.

1M tokens a month, free forever.

No card, no trial clock, no sales call. Move to a paid plan when the invoice makes sense, or don’t.

Create a free website with Framer, the website builder loved by startups, designers and agencies.