The report
The report is the result of a successful analysis: the E/M code the note supports, why, and what to check before you
bill. It's in the report field of an analysis whose status is succeeded.
Overview
The report is a JSON object with these parts:
| Field | Always present | What it tells you |
|---|---|---|
codingAnalysis | Yes | The code and how it was chosen. |
mdmAnalysis | When coding by medical decision making | The overall MDM level and the three elements, each with a quote from the note. |
timeBasedJustification | When coding by time | The clinician's total time and what it was spent on. |
revenueAndCompliance | Yes | Services the note may support that weren't billed, and documentation risks. |
supplementalCodes | Yes | Add-on codes and modifiers that may apply. |
cmsEditsAnalysis | When you sent CPT codes and a state applies | Medicare coverage and correct-coding checks for the codes you sent. |
mdmAnalysis and timeBasedJustification are null when they don't apply. cmsEditsAnalysis is left out of the
report when the checks didn't run.
Field names inside the report are camelCase; the analysis around it uses snake_case. Ignore fields you don't recognize:
new ones can appear within /v1.
The report supports a coding decision. The coder or clinician who signs off on the claim makes the final decision.
codingAnalysis
{
"finalCptCode": "99214",
"codingBasis": "Medical Decision Making (MDM)",
"governingGuideline": "Health E/M Coding Guidelines (CY 2026)"
}| Field | Meaning |
|---|---|
finalCptCode | The office or outpatient E/M code the documentation supports: 99202 to 99205 for a new patient, 99211 to 99215 for an established patient. It's null in the rare case that the documentation doesn't determine a code. |
codingBasis | How the level was chosen: Medical Decision Making (MDM) or Total Time. |
governingGuideline | The guideline set and year the analysis applied. |
mdmAnalysis
Present when codingBasis is Medical Decision Making (MDM). Medical decision making has three elements, and the
analysis rates each one.
{
"finalMdmLevel": "Moderate",
"mdmElements": [
{
"elementName": "Problems Addressed",
"levelAchieved": "Moderate",
"justification": "The note names the problems addressed at this visit.",
"exactSnippet": "Established patient seen for follow-up of type 2 diabetes and hypertension"
},
{
"elementName": "Data Reviewed",
"levelAchieved": "Moderate",
"justification": "The note records data reviewed or ordered.",
"exactSnippet": "A1c 7.4% reviewed"
},
{
"elementName": "Risk of Management",
"levelAchieved": "Moderate",
"justification": "The note records a management decision.",
"exactSnippet": "Plan: increase lisinopril to 20 mg daily, recheck BMP in 2 weeks, follow up in 3 months"
}
]
}| Field | Meaning |
|---|---|
finalMdmLevel | The overall MDM level: Straightforward, Low, Moderate, or High. |
mdmElements | Exactly three entries, one for each element: Problems Addressed, Data Reviewed, and Risk of Management. |
mdmElements[].elementName | Which element the entry rates. |
mdmElements[].levelAchieved | The level the note supports for this element: Straightforward, Low, Moderate, or High. |
mdmElements[].justification | Why the element reaches that level, in plain language. |
mdmElements[].exactSnippet | The evidence: text quoted from the note that supports the level. |
Show the evidence
exactSnippet is quoted from the note so that a reviewer can see the words behind each level. To highlight it in your
own interface, search for it in the note text you sent. Match it while ignoring differences in whitespace and line
breaks, and show the justification without a highlight if no match is found.
timeBasedJustification
Present when codingBasis is Total Time; otherwise null.
{"totalClinicianMinutes": 42, "activitySummary": "Reviewed outside records, examined the patient, counseled on treatment options, and documented the visit."}| Field | Meaning |
|---|---|
totalClinicianMinutes | The total time the physician or other qualified clinician spent on the date of the visit, as documented. |
activitySummary | What the time was spent on. |
revenueAndCompliance
{
"missedRevenueOpportunities": ["The documented smoking cessation counseling may support a separate code if its time is recorded."],
"denialRiskAssessment": [
{"riskFactor": "The plan doesn't state the follow-up interval.", "mitigationRecommendation": "Add the follow-up interval to the plan."}
]
}| Field | Meaning |
|---|---|
missedRevenueOpportunities | Services the note may support that weren't coded, as sentences. Often empty. |
denialRiskAssessment | Documentation gaps that could lead a payer to deny or downcode the claim. Each entry has a riskFactor and a mitigationRecommendation. Often empty. |
supplementalCodes
{"addOnCodes": ["99417"], "modifiers": ["25"]}| Field | Meaning |
|---|---|
addOnCodes | Add-on codes the documentation may support, such as 99417 for prolonged services. |
modifiers | Modifiers that may apply, such as 25 when a significant, separate E/M service is billed with a procedure. |
cmsEditsAnalysis
Present when you sent at least one CPT code in cpts and a state applies (the jurisdiction you sent, or your
organization's default state). It checks the codes you sent, not the code the analysis recommends, against Medicare
coverage articles and National Correct Coding Initiative (NCCI) edits for that state. If the checks can't run, the field
is left out and the analysis still completes.
{
"jurisdiction": "TX",
"providerType": "practitioner",
"evaluatedAtUtc": "2026-10-25T05:09:30Z",
"submittedCpts": [{"code": "99214", "units": 1, "modifiers": []}],
"submittedIcds": ["E11.9", "I10"],
"overallVerdict": "clean",
"overallMessage": "CMS medical-necessity, correct-coding, and submission-validity checks passed.",
"lcd": [
{
"cpt": "99214",
"verdict": "standard_necessity",
"rationale": "No LCD or Billing-and-Coding Article in TX governs CPT 99214 with an ICD coverage list. Standard medical-necessity documentation applies.",
"supportingIcds": [],
"supportingArticles": [],
"governingArticles": [],
"excludingIcds": [],
"excludingArticles": [],
"governingArticlesTruncated": false
}
],
"ncci": {"ptpViolations": [], "ptpClearedByModifier": [], "mueViolations": [], "addonViolations": []},
"submissionValidation": []
}| Field | Meaning |
|---|---|
jurisdiction | The state the checks used. |
providerType | The provider category the NCCI edits were applied for. |
evaluatedAtUtc | When the checks ran. |
submittedCpts, submittedIcds | The codes you sent, as checked. |
overallVerdict | clean when every check passed, or violation when at least one found a problem. |
overallMessage | A one-line summary of the verdict. |
lcd | One coverage verdict for each CPT code. See the following table. |
ncci | Correct-coding edits. See NCCI edits. |
submissionValidation | Problems with the codes themselves. See Submission checks. |
Coverage verdicts
Each entry in lcd checks whether the diagnoses you sent support Medicare coverage of one CPT code, based on Local
Coverage Determinations (LCDs) and billing and coding articles.
verdict | Meaning |
|---|---|
passed | At least one diagnosis you sent supports coverage. supportingIcds and supportingArticles say which, and where. |
failed | Coverage requires specific diagnoses, and none of the ones you sent qualify. governingArticles lists the articles. |
excluded | A diagnosis you sent is listed as not covered for this code. excludingIcds and excludingArticles say which, and where. |
standard_necessity | No article for this state ties the code to a list of diagnoses. Standard medical-necessity documentation applies. |
rationale explains the verdict in a sentence. Each article has an articleId and a title.
governingArticlesTruncated is true when governingArticles was shortened.
NCCI edits
| Field | Meaning |
|---|---|
ptpViolations | Pairs of codes that aren't normally billed together (procedure-to-procedure edits). Each has column1, column2, modifierIndicator (0: a modifier can't allow the pair; 1: an appropriate modifier can), a rationale, and, when one applies, a recommendedModifier and the code it goes on (modifierTarget). |
ptpClearedByModifier | Pairs that would be an edit, but a modifier you sent allows them: column1, column2, clearingModifier, modifierTarget, and rationale. |
mueViolations | Codes billed with more units than Medicare allows for one patient on one day (medically unlikely edits): cpt, submittedUnits, maxUnits, mai (the MUE adjudication indicator), and rationale. |
addonViolations | Add-on codes sent without a primary code they can be billed with: addonCode, a sample of valid primary codes (validPrimariesSample), and rationale. |
Submission checks
Each entry in submissionValidation has a cpt, an optional modifier, a findingType, and a rationale.
findingType | Meaning |
|---|---|
deleted_code | The code is no longer valid. |
bundled_status | Medicare pays for this code only as part of another service. |
non_covered_status | Medicare doesn't cover this code. |
invalid_bilateral_modifier | A bilateral modifier was sent with a code that doesn't allow one. |
invalid_pctc_modifier | A professional or technical component modifier was sent with a code that doesn't allow one. |