Live · OpenAI-compatible

Verified tool calls. Tested code. One base_url.

Send tool schemas and Tīrtha checks every call against them. Send tests and it runs them in a sandbox, so you only get code that passes. When a request has nothing to check against, it says so and escalates instead of guessing. Frontier-class coding (92.1% HumanEval+, on par with Sonnet) for less than frontier price. Change one base URL and leave the rest of your client alone.

Free to test · no card
Get a free API key for testing.
Sign in with Google, create a key, and point your base_url at us. Free while we are in beta, no card, no sales call.
Get an API key
OpenAI chat/completions Anthropic messages Codex responses Streaming Tools
Adversarial trap set · does it serve a wrong tool?
Primary path200/200
Failover path30/40
When the primary stalls we fail over for availability, and that model calls a tool where it should decline. We publish the path where we are weaker. Coding 92.1% HumanEval+ · tool calls 749/800 · what each number means →
Traps, primary path
200/200
Clopper-Pearson 95% [98.1, 100]. The failover model scores 30/40
Tool calls
749/800
one fixed pass of BFCL v4 Python through the production path. Official AST re-score 751/800. Not a leaderboard submission
Coding
92.1%
HumanEval+, cache-free, frontier-class (≈ Sonnet 92.7)
What you can ask for

Different work takes different paths.

You call one endpoint and never pick a model. Behind it, the request is classified by shape and each shape gets its own path, its own check, and its own honest answer about whether anything was checked at all.

Send tests

Code that has to pass

Put your checks in tirtha.tests. We run the code in a sandbox and serve only what passes. A failure escalates instead of reaching you.

Oracle: real. Your tests either pass or they do not
Send tool schemas

Calls that must be right

Every emitted call is checked against your schema. When the schema is ambiguous it declines rather than inventing a call.

Oracle: real. 200 of 200 on the adversarial trap set, primary path
Send neither

Prose we cannot check

There is nothing to run, so we do not pretend. Two lightweight models must independently agree or the request escalates.

Oracle: none, and we say so. Agreement is a confidence signal
What you control

One dial, one field.

tirtha.mode
auto
auto climbs only as far as the check demands · max top frontier · value a lower-cost frontier · low never escalates. Set per request, per key, or per account
tirtha.tests
the useful one
Checks that must pass before an answer is trusted. It is also the only way a solved problem can be reused
Your client
unchanged
OpenAI chat/completions, Anthropic messages, Codex responses. Streaming and tools work. Change one base URL
What comes back

You always know what happened.

Every response carries a tirtha object beside the standard fields. Most gateways tell you nothing about how your answer was produced. This is the part we would want if we were the customer.

verified
never guessed
true only if the answer passed the gate: your tests for code, schema validation for a tool call. false means best effort, and it says so
served_by
which tier
the exact path that answered, including when a reused solution served it or a frontier tier did
escalated · cache_hint
and why
whether a frontier model was used, and if a solved answer could not be reused, the reason it could not
How it works

Route, verify, reserve.

01 · Route

Pick the model that can solve it

Each call goes to the lightest model and effort that can handle it.

02 · Verify

Check before it counts as done

The result is verified, so a wrong answer is caught, not served.

03 · Reserve

Escalate only the hard remainder

Premium models are spent on the calls that truly need them.

Measured results

The numbers, in full.

SuiteTīrthaNotes
HumanEval+ (164)92.1%Frontier-class: ≈ Sonnet 4.6 (92.7), just under Opus 4.8 (93.3), above GPT-5.3-codex (90.2); +7 over the base model (84.8). Cache-cleared, verified.
BFCL v4 tool calls749 / 800One fixed pass of BFCL v4 Python through the production tool path. An official AST re-score of the same saved outputs gives 751/800. Single pass, no multi-seed, no bootstrap interval. Not a leaderboard submission. We claim parity on tools, not the highest accuracy.
Reliability trap set, primary path200 / 200Serves no wrong tool. Clopper-Pearson 95% [98.1, 100]; wrong answers served 0/200, [0.0, 1.9]. That interval is Clopper-Pearson, not the rule of three.
Reliability trap set, failover path30 / 40When the primary stalls we fail over for availability. That model matches the primary on calling and fails it on declining: all 10 misses are the same verdict, it calls a tool where it should abstain. Measured 2026-08-02.
Operations0 retries0 retries in 800, 1 wrong tool in 800, deterministic routing. Scored on our harness and re-scored with the official checker; methods on request.
Security, specs, and the fine print

Concrete mechanisms, not badges.

Security and trust

  • Your app talks the OpenAI-shape API to Tīrtha; your integration surface is unchanged
  • Usage records hold token counts, timings, costs, not your text
  • We never train on your data, and no provider trains on it
  • Cross-tenant requests get "not found," not "access denied"
  • Built on SOC 2 certified AWS. We have begun the work toward our own SOC 2 and do not hold a report yet. Trust is earned with checkable mechanisms. Read the security page.

Product surface

  • OpenAI-compatible: chat/completions, messages, responses
  • Drop-in: change one base URL, keep SDK, prompts, tools
  • Streaming and tool / function calling
  • Editions: Volume (coding throughput), Premium (agent reliability)
  • Pricing: $2 / $8 per 1M tokens (in / out). Free while we are in beta. Verification can add a few tokens to a request. See the method.
Quickstart

Already on the OpenAI API? Point it at us.

Change your base URL to ours and keep everything else. Copy the call, drop in your key, run it in your terminal.

How to try

  • 1. Get a free key
  • 2. Set base_url = https://api.tirtha.ai/v1
  • 3. Keep your existing OpenAI client, prompts, and tools
  • 4. Run your own eval, or start with Volume for IDE agents, Premium for tool-heavy agents
curl · copy and run
# change one line: your base URL
curl https://api.tirtha.ai/v1/chat/completions \
  -H "Authorization: Bearer $TIRTHA_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "tirtha/verified",
    "messages": [{"role":"user","content":"Hello"}]
  }'
Pricing

What you are buying.

One endpoint. You do not pick a model. Send tool schemas and every call is checked against them. Send tests and your code runs in a sandbox, so you only get what passes. When a request has nothing to check against, we say so and escalate rather than guess.

Free while in beta
$0
Sign in with Google and create a key. No card, no minimum, no sales call
The meter, not the product
$2 / $8
per 1M tokens in and out, pay as you go. What you are buying is the checking, not the tokens
What it costs us
published
our own blended cost per request, with its population, is on what is true now