OneCall
A voice hotline that turns "something's wrong and I don't know who to call" into a specialist appointment request — inside one phone call.
Built in 24 hours at the YC × Medplum Agentic Healthcare Hackathon (Y Combinator office, San Francisco).
⚠️ A care-navigation tool, not a medical device. It routes; it does not diagnose.
The problem
Patients get handed homework they can't do. "See a specialist" means figuring out which specialty, finding one nearby who takes your insurance, confirming that's actually true, and getting on their calendar. Only ~35% of specialist referral scheduling attempts end in a completed appointment; a Senate secret-shopper study found a third of in-network phone numbers were dead or wrong. Existing voice AI answers one clinic's phone — which assumes you already know where to call. OneCall is the call that starts one step earlier.
What it does
A caller describes a symptom out loud. Within a single conversation the agent:
- Screens for emergencies with a deterministic red-flag check — before any model reasoning runs.
- Selects a specialty from a retrieved referral-criteria corpus, and reads the matching criteria back to the caller.
- Runs a real 270/271 benefits transaction and reports precisely what it did and did not verify.
- Finds real nearby clinics from the CMS NPPES registry, enriched with public-web research in the background.
- Writes an appointment request to Medplum as FHIR R4 — and calls it proposed, never booked.
Design decisions worth defending
- Emergency screening never touches the LLM. Nine deterministic regex patterns over the transcript cover MI, stroke, respiratory, hemorrhage, and suicidal-ideation presentations, re-run on every new symptom. The one judgment where a hallucination is catastrophic is the one judgment that shouldn't be probabilistic. A triggered flag still writes a FHIR
Encounter— even the abort path leaves an audit trail. - The eligibility check refuses to overclaim. The 270/271 wire traffic is real, but against a synthetic fixture — so the response object carries
callerCoverageVerified: falseandproviderParticipation: "unknown-not-verified"explicitly, and the agent is forbidden from saying "your copay" or "you're covered." - Providers are real; availability is honestly labeled. Identity comes from live CMS NPPES lookups, Haversine-filtered by ZIP. Slot availability isn't public data for anyone, so the API says
status: "not-public"instead of inventing slots that look convincing on stage. - No invented medical codes. Every clinical concept is a display-only
CodeableConceptrather than a hallucinated SNOMED/LOINC/ICD-10 code. An unfilled code is an honest gap; a wrong one is a silent data-integrity bug. - Tool latency never blocks the conversation. Deep provider research returns immediately with registry data plus a
status: "running"marker and streams enrichment in later. A workflow-state object rides on every tool result, which kills the classic voice-agent failure of re-asking for a ZIP it already has.
Every external dependency has a defined degradation path — Moss down falls back to a local retriever, Stedi unconfigured returns a typed 503 and the flow continues. Nothing in the demo path is a single point of failure.
Tech Stack
Next.js 16 · TypeScript · Tailwind · Deepgram Voice Agent (nova-3 STT · aura-2 TTS · function calling) · Medplum (FHIR R4) · Stedi 270/271 · Moss retrieval · CMS NPPES
Team
Jayden Lim · Tanay
