
Medical Bill Upcoding & Overcharge Slasher
Paste an itemized hospital or physician bill and get a decision first: dispute it or not, the estimated dollars above a defensible price, and a dispute letter ready to send. Flags E/M upcoding, NCCI unbundling, duplicates and unit errors line by line, prices professional claims against the CMS physician fee schedule, checks the No Surprises Act self-pay dispute deadline, and lists the letter's placeholders. Facility-charge benchmarks are model estimates and are labeled as such. Not legal or medical advice.
What you get
Hospital chargemaster prices often run several times Medicare rates and itemized bills commonly contain duplicate or bundled lines; a successful dispute on one ER bill typically saves hundreds to thousands of dollars.
Call it
Send the JSON body below to https://agents.writerslogic.com/api/v1/audit-medical-bill. An unpaid request answers 402 with the price and how to pay; a request that fails with a 5xx status is not charged.
curl -i -X POST https://agents.writerslogic.com/api/v1/audit-medical-bill \
-H 'content-type: application/json' \
-d '{"facilityType":"emergency_room","claimType":"professional","coverage":"uninsured_self_pay","patientState":"TX","visitSummary":"Twisted ankle, 40-minute visit, one X-ray, no fracture, given an ACE bandage and ibuprofen.","goodFaithEstimateAmount":1200,"billReceivedDate":"2026-10-20","lineItems":[{"cptOrHcpcsCode":"99285","description":"ED visit level 5","chargedAmount":1850,"units":1,"serviceDate":"2026-09-14"},{"cptOrHcpcsCode":"73610","description":"X-ray ankle 3 views","chargedAmount":640,"units":1,"serviceDate":"2026-09-14"},{"cptOrHcpcsCode":"A4570","description":"Splint / elastic bandage","chargedAmount":185,"units":1,"serviceDate":"2026-09-14"},{"cptOrHcpcsCode":"99070","description":"Supplies and materials","chargedAmount":95,"units":1,"serviceDate":"2026-09-14"}]}'
Input
| Field | Type | Required | Description |
|---|---|---|---|
billText | string; length 10..30000 | no | Alternative to lineItems: paste the itemized bill, one line item per line, e.g. "99285 EMERGENCY DEPT VISIT LVL 5 1 $3,250.00". Lines with a CPT/HCPCS code and a dollar amount are read in code; send exactly one of lineItems or billText. |
lineItems | array<object>; max 200 items | no | |
facilityType | string; one of "emergency_room", "urgent_care", "outpatient_hospital", "inpatient_hospital", "ambulatory_surgery_center", "physician_office", "laboratory", "imaging_center", "other" | yes | |
coverage | string; one of "uninsured_self_pay", "in_network", "out_of_network", "medicare", "medicaid", "unknown" | no | Determines which No Surprises Act protections can apply. |
patientState | string | no | |
visitSummary | string; length 0..4000 | no | What actually happened: symptoms, duration, tests, treatment. |
facilityName | string; length 0..200 | no | |
patientName | string; length 0..200 | no | |
accountNumber | string; length 0..100 | no | |
goodFaithEstimateAmount | number; 0..10000000 | no | Good Faith Estimate received (self-pay). |
claimType | string; one of "professional", "facility" | no | Physician (CMS-1500) or hospital/facility (UB-04) bill. Medicare physician fee schedule benchmarks apply only to professional claims. |
billReceivedDate | string | no | Date the initial bill was received; used for the 120-day dispute deadline. |
Example request body
{
"facilityType": "emergency_room",
"claimType": "professional",
"coverage": "uninsured_self_pay",
"patientState": "TX",
"visitSummary": "Twisted ankle, 40-minute visit, one X-ray, no fracture, given an ACE bandage and ibuprofen.",
"goodFaithEstimateAmount": 1200,
"billReceivedDate": "2026-10-20",
"lineItems": [
{
"cptOrHcpcsCode": "99285",
"description": "ED visit level 5",
"chargedAmount": 1850,
"units": 1,
"serviceDate": "2026-09-14"
},
{
"cptOrHcpcsCode": "73610",
"description": "X-ray ankle 3 views",
"chargedAmount": 640,
"units": 1,
"serviceDate": "2026-09-14"
},
{
"cptOrHcpcsCode": "A4570",
"description": "Splint / elastic bandage",
"chargedAmount": 185,
"units": 1,
"serviceDate": "2026-09-14"
},
{
"cptOrHcpcsCode": "99070",
"description": "Supplies and materials",
"chargedAmount": 95,
"units": 1,
"serviceDate": "2026-09-14"
}
]
}
Result
The response is { "data": ..., "_provenance": ... }. data carries these fields; _provenance is a signed W3C Verifiable Credential with a C2PA-style manifest, checked free at POST /api/v1/verify-provenance.
| Field | Type | Required | Description |
|---|---|---|---|
headline | object | no | Decision first: the verdict, the dollars at stake, confidence and the exact next step. |
summary | object | no | |
no_surprises_act | object | no | |
lines | array<object> | no | |
overall_assessment | string | no | |
applicable_protections | array<object> | no | |
dispute_letter | object | no | |
readyToSend | object | no | Addressee, attachments, send method, date and the bracketed placeholders to replace before sending the dispute letter. |
next_steps | array<string> | no | |
llm | string; one of "ok", "partial", "unavailable" | no | unavailable: the model step failed and the result contains only code-established findings. partial: some lines were not reviewed by the model (see warnings and each line's model_reviewed). |
warnings | array<string> | no | |
llm_error | string | no | |
billTextParse | object | no | Present when billText was sent: lines read, lines not read, and a warning when the lines do not add up to the stated total. |
benchmarkSources | object | no | |
disclaimer | string | no | |
notice | string | no |
Pay and connect
Available through: x402 (USDC on Base), MCP, RapidAPI, Apify.
Machine-readable
- This agent as JSON (schemas, example, OpenAPI operation)
- Free signed sample response
- OpenAPI 3.1 · Catalog · Index of every agent