Miso sits between your applications and the model providers.

An application presents a key and names its route. Miso looks the caller up in one registry and the model in another, replaces the identifiers the route says to replace, sends the request to a provider with an agreement in force, and writes a record. Internal applications and vendor applications go through the same check.

discharge-summary-prod readmission-summary · data science denial-letter-draft · rev cycle ambient scribe · vendor care coordination · vendor unregistered key anthropic · BAA azure openai · BAA bedrock · BAA no agreement · no PHI miso denied · logged records written 1,204

The provider registry: which models may receive PHI.

Each provider is listed with the BAA that covers it, its retention terms, and its region. Each model is pinned to a version the provider documents as fixed. A provider with no agreement on file is outside every route.

Provider registry, verified monthly
AnthropicBAA · zero retentionclaude-opus-4-8 · pinned 2026-06
Azure OpenAIBAA · eastus2gpt @2026-07-10 · abuse-monitoring opt-out on file
AWS BedrockBAA · us-east-1claude-sonnet · nova · pinned 2026-05
Google Vertexpending reviewsandbox only until Privacy signs off
OpenAI directno BAAno PHI
Caller registry
Discharge Copilot (clinical informatics)2 routes · $600/modischarge-summary-prod · inbox-reply-draft
Readmission model (data science)1 route · $400/moreadmission-summary · limited data set
Denial letters (revenue cycle)budget at 90%denial-letter-draft · operations
Ambient scribe (vendor)BAA review due 2026-11-01encounter-note-draft · pinned gpt @2026-07-10
Care coordination (vendor)review 2027-05tumor-board-summary · referral-fax-extraction
Any other keydenied · logged

The caller registry: which applications may send it.

Each application, team, and vendor is listed with its agreement, its routes, its budget, and its review date. A request whose key matches no entry is refused and logged. For everything that goes through Miso, this list is the AI inventory.

A route is one approval, written down once.

When Privacy approves Claude Sonnet for discharge summaries, the route records exactly that: which application may call it, what data it may send, which identifiers get replaced first, under which BAA, and what the caller owes afterwards. A route request from a builder comes with the validator's findings attached; approval puts it live.

# one route, from the policy file · illustrative routes: discharge-summary-prod: caller: clinical-informatics/discharge-copilot purpose: treatment data_class: phi replace: [name, mrn, ssn, date_of_birth] candidates: [bedrock/claude-sonnet@2026-05, azure/gpt@2026-07-10] select_by: cost obligations: [human_review_before_use] budget: $400/month approved: privacy-officer · 2026-06-14 · v15

Every request writes one record.

Allowed or refused, each request adds a row to an append-only table in your Postgres, hash-chained to the row before it. Identifier types and counts are recorded. The values are never stored.

Caller, key, agreementWhich application sent it, under which BAA
Route and purposeTreatment, payment, or operations, and the data class
Identifiers foundTypes and counts, and what was done with each
Candidates and selectionWhich approved models were eligible and why this one answered
Model, version, regionWhich model answered, and where
Provider agreement at call timeThe BAA that covered it at that moment
Policy versionWhich version of the policy governed the call
Obligations returnedHuman review, AI disclosure, and whether the caller acknowledged them
Cost and latencyTokens, spend, response time
Hash, chained to the previousTampering shows
Obligations on one route
encounter-note-draftMiso enforcesprovider attestsvendor attests
Zero retention
Identifiers replaced
Human review before use
Disclose AI to patient
TX HB 149 disclosureunassigned

Who owes what, per route.

Some obligations Miso enforces itself. Some the provider attests to in its BAA. Some the vendor or team attests to and receives back on every response. The ledger shows all three, and it shows the ones nobody has taken yet.

1endpoint and key per approved route
0identifier values ever stored
6 yrsof records, in your Postgres