AutoICD API

Find the ICD-10 codes your documentation supports but your claims are missing.

The AutoICD Audit API compares clinical documentation against submitted codes and returns missed HCCs with RAF-weighted revenue estimates, unsupported codes flagged for RADV defense, specificity upgrade opportunities, denial-risk flags, and a reconciled problem list. Every finding carries the exact text span that supports it.

Built on the CMS PY2026 CMS-HCC v22 and v28 community models.

Five capabilities, one endpoint

Run a single POST against /api/v1/audit. Select any subset of capabilities via capabilities[], or omit it to run all five. Every capability emits structured findings with evidence spans that tie back to the source text.

HCC Gap Capture

hcc

Missed HCC diagnoses the documentation supports but the claim omitted.

Emits: MissedCode entries with hcc_category, raf_weight, hcc_model (v22 or v28), and estimated_revenue = raf_weight × base_rate.

Why: Stop leaving MA risk-adjustment revenue on the table each year.

RADV Defense

radv

Submitted codes with no supporting documentation in the chart.

Emits: UnsupportedCode entries with reason, what_would_support_it, radv_risk, and estimated_exposure (RAF-weighted when the code is an HCC, conservative flat estimate otherwise).

Why: Spot clawback risk before CMS does. Fix documentation or pull the code.

Specificity Upgrades

specificity

Unspecified codes the documentation actually supports more precisely.

Emits: SpecificityUpgrade entries with from_code, to_code, from/to descriptions, and evidence spans.

Why: DRG weight improvements for hospitals, cleaner data for RCM teams, better reimbursement.

Denial Risk

denial

Documentation-quality issues that commonly drive claim denials.

Emits: DenialRisk entries with risk level, probability, and specific reasons (missing laterality, missing duration, age/sex mismatches, etc.).

Why: Catch avoidable denials pre-submission, not after a 30-day AR wait.

Problem List Reconciliation

problem_list

Deduplicated active-conditions list across the documentation.

Emits: ProblemListEntry rows with ICD-10 code, status (active/historical), evidence spans, and first/last seen references.

Why: Clean problem list for care management, care gaps, and longitudinal audit.

Request and response

A single call with one progress note and one submitted code. The engine extracts conditions, reconciles them with the submitted code, looks up HCC categories in both v22 and v28, and returns dollar-impact math.

Request

POST /api/v1/audit
Authorization: Bearer sk_your_api_key
Content-Type: application/json

{
  "text": "68yo M, type 2 diabetes stable on metformin, chronic systolic heart failure on furosemide, edema controlled. A1c 7.4 today.",
  "codes": [{ "code": "E11.9", "kind": "icd10" }],
  "capabilities": ["hcc", "radv", "specificity", "denial", "problem_list"],
  "context": {
    "patient": { "coverage": "medicare_advantage" },
    "hcc_model": "both"
  }
}

Response (truncated)

{
  "capabilities_run": ["hcc", "radv", "specificity", "denial", "problem_list"],
  "confirmed": [
    {
      "code": "E11.9",
      "kind": "icd10",
      "description": "Type 2 diabetes without complications",
      "evidence": [{ "document_id": "doc_0", "start": 8, "end": 23, "quote": "type 2 diabetes" }],
      "confidence": 0.97
    }
  ],
  "missed": [
    {
      "code": "I50.22",
      "description": "Chronic systolic (congestive) heart failure",
      "evidence": [{ "document_id": "doc_0", "start": 36, "end": 67, "quote": "chronic systolic heart failure" }],
      "confidence": 0.95,
      "hcc_category": "HCC85",
      "raf_weight": 0.323,
      "estimated_revenue": 4264,
      "hcc_model": "v22"
    },
    {
      "code": "I50.22",
      "hcc_category": "HCC226",
      "raf_weight": 0.360,
      "estimated_revenue": 4752,
      "hcc_model": "v28"
    }
  ],
  "unsupported": [],
  "specificity_upgrades": [],
  "denial_risk": [],
  "totals": {
    "missed_raf": 0.683,
    "estimated_revenue_recovery": 9016,
    "codes_confirmed": 1,
    "codes_missed": 2
  },
  "rates_used": {
    "cms_base_rate": 13200,
    "source": "cms_national_2026",
    "hcc_model": "both"
  }
}

The same ICD-10 code can appear twice in missed[] when it maps to different HCC categories in v22 and v28. Each entry carries its own hcc_model, RAF weight, and revenue estimate.

Quick start

SDKs for TypeScript and Python, an MCP tool for Claude Desktop / Cursor / Windsurf, or plain HTTPS.

TypeScript

npm install autoicd

import { AutoICD } from "autoicd";

const client = new AutoICD({ apiKey: process.env.AUTOICD_API_KEY! });

const audit = await client.audit({
  text: clinicalNote,
  codes: submittedCodes.map((c) => ({ code: c, kind: "icd10" })),
  capabilities: ["hcc", "radv", "specificity", "denial", "problem_list"],
  context: { patient: { coverage: "medicare_advantage" } },
});

console.log(`Missed revenue: $${audit.totals.estimated_revenue_recovery.toFixed(0)}`);
for (const m of audit.missed) {
  console.log(`MISSED ${m.code} (${m.hcc_category} ${m.hcc_model}) -> $${m.estimated_revenue}`);
}

Python

pip install autoicd

from autoicd import AutoICD, AuditRequest, AuditCode, AuditContext, AuditPatientContext

client = AutoICD(api_key=os.environ["AUTOICD_API_KEY"])

audit = client.audit(AuditRequest(
    text=clinical_note,
    codes=[AuditCode(code=c, kind="icd10") for c in submitted_codes],
    capabilities=["hcc", "radv", "specificity", "denial", "problem_list"],
    context=AuditContext(
        patient=AuditPatientContext(coverage="medicare_advantage"),
    ),
))

print(f"Missed revenue: ${audit.totals.estimated_revenue_recovery:.0f}")
for m in audit.missed:
    print(f"MISSED {m.code} ({m.hcc_category} {m.hcc_model}) -> ${m.estimated_revenue}")

curl

curl -X POST https://autoicdapi.com/api/v1/audit \
  -H "Authorization: Bearer sk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "68yo M, type 2 diabetes, chronic systolic heart failure on furosemide.",
    "codes": [{"code": "E11.9", "kind": "icd10"}],
    "capabilities": ["hcc"]
  }'

MCP

// Available via the AutoICD MCP server (Claude Desktop, Cursor, VS Code, Windsurf)
// Tool: audit_clinical_text
// Ask in chat: "Audit this progress note against codes E11.9, I50.9: <note>"

See the MCP setup guide for Claude Desktop, Cursor, VS Code, and Windsurf.

Conservative by design

Precision matters more than recall. Flagging a code that isn't really there wastes chart review time and destroys trust. The engine never infers diagnoses that are not explicitly stated, respects NER negation and historical flags, and returns evidence spans so every finding is auditable against the source text.

  • Extractive, not generative. Evidence spans quote verbatim text with character offsets.
  • HCC-aware dollar math. Missed-revenue estimates use RAF weights from the CMS-HCC v22 and v28 relative factors files (Community Non-dual Aged segment).
  • Model provenance. Every response carries the base rates and HCC model used, so audit dashboards reconcile cleanly.

Pricing

Pick the capabilities you need. Every plan returns an upgrade_hint when a higher tier would unlock more findings, so you always know what you're missing.

PlanCapabilities unlockedPrice
TrialHCC onlyFree for 7 days
StarterHCC + RADV + Specificity$49/mo
ProAll 5 capabilities$199/mo
EnterpriseAll 5 + batch + custom rates + SLAContact us

Audit pricing is separate from our code generation pricing. See the pricing section on the home page for coding plans.

Stop shipping claims with money left on the table

Get an API key and run your first audit in under a minute.