Inspiration
When a health insurer denies a claim, you have the right to appeal. Almost nobody does. KFF's analyses of ACA marketplace data show insurers deny a large share of in-network claims, yet only a tiny fraction are ever appealed, even though many appeals succeed.
The reason isn't the right. It's the work. You have to read the insurer's clinical policy, find the medical guideline that supports your care, learn your federal appeal rights, and write a formal letter before a deadline. That is research and writing, which is exactly what an agent can do in seconds.
What it does
Upload a photo, PDF or the text of a denial letter. About 20 seconds later Overturn gives you:
- A plain-English explanation of why you were denied, with the codes, plan type and deadline pulled out.
- A formal appeal letter that answers the insurer's exact reason point by point. Every factual claim cites a source.
- A citation check. Each cited sentence is tested against its source: green means verified, amber means partly supported. Anything only the patient would know, like therapy dates, is left as a highlighted blank. It never guesses.
- The evidence. Every search the agent ran and every source, with the exact quotes it used.
- Every deadline. When to file, when the insurer must answer, and when you can ask for an independent external review, exported to your calendar in one click.
The dashboard shows all of this as it happens: each model call on a live timeline, days left to appeal, citations verified, sources found, and the cost of the run.
How we built it
Overturn is a Next.js app whose API route runs a six-step agent and streams every step and model call to the browser as NDJSON. Each step goes to the smallest NVIDIA Nemotron model on Nebius Token Factory that does it well:
| Step | Model | Why |
|---|---|---|
| Read the letter | Nemotron 3 Nano (thinking off), or Nemotron 3.5 Super VL for photos | Structured extraction is cheap, fast work |
| Plan the research | Nemotron 3 Super | Knows which evidence beats which denial type |
| Find the evidence | Tavily (5 advanced searches) + Nano once per source | Many parallel calls; verbatim quotes only |
| Write the argument | Nemotron 3 Ultra (thinking on), called once | The one step that needs deep reasoning |
| Check every citation | Nano | Each cited sentence against its source quote |
| Deadlines | Plain rules | ACA, ERISA, Medicare Advantage and Medicaid windows |
Token Factory's OpenAI-compatible API made the integration a base-URL change. We used the enable_thinking switch per call, so reasoning is spent only where it matters, and JSON mode for structured steps. Every call's tokens, latency and cost are traced in the UI and in LangSmith.
Measured on our three sample letters: 21 model calls, 21–23 seconds, and under one cent of Nemotron spend per appeal ($0.0076–$0.0098). Nano handles about 70% of the tokens. Ultra is called once and is about 80% of model spend, on the step that wins or loses the appeal.
Challenges we ran into
- Keeping the letter honest. A persuasive letter tends to overstate its sources. We restricted Ultra to the quotes Nano extracted, forced
[ATTACH: …]blanks for any patient fact, and added a separate Nano pass that grades every cited sentence. - Our first citation checker failed almost everything. It split sentences across the letter's address block and merged headers into claims. Splitting per line, and giving the checker both the extracted claim and the verbatim quote, took one sample from 0 of 7 to 4 of 7 verified.
- Reasoning-model output in a pipeline. We had to handle
<think>blocks, JSON in code fences, grouped citations like[S5, S8], and stray markdown, all without breaking the stream. - Showing the work without a wall of text. Our first UI was a page of prose. We rebuilt it as a visual dashboard where every model call is a bar on a timeline.
Accomplishments that we're proud of
- A complete product, not a demo script: landing page, upload, live dashboard, printable letter, evidence table, calendar export and appeal history.
- A real, measurable answer to "which model for which job": under a cent per appeal, with the expensive model used exactly once.
- Every citation is checked before the user sees the letter.
- It works without API keys too: recorded live runs replay so anyone can explore it.
What we learned
Model routing matters more than model size. Spending Ultra once and Nano everywhere else gave better letters, faster and cheaper, than using one large model for everything. And for anything with legal or medical stakes, verification has to be built into the pipeline, not added at the end.
What's next for Overturn
- Second-level and external-review letters that build on the first appeal.
- State-specific rules for all 50 states.
- A clinician mode that drafts the letter of medical necessity.
- Sending by fax or mail straight from the app, and tracking the insurer's response.
Built With
- langsmith
- nebius-token-factory
- nemotron-3-nano
- nemotron-3-super
- nemotron-3-ultra
- nemotron-3.5-super-vl
- next.js
- node.js
- nvidia-nemotron
- openai-sdk
- react
- tailwindcss
- tavily
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.