{"openapi":"3.1.0","info":{"title":"Denial7 API","version":"1.0.0","description":"Denial7 checks a claim against the CMS NCCI procedure-to-procedure and medically unlikely edits in force on its date of service, and explains what a CARC or RARC denial actually means and how to fix it, citing the CMS or X12 source behind every verdict. Where we hold no edit for a code we say so rather than reporting a pass. The free single-claim scrubber runs entirely in your browser, so claim data is never transmitted. The same engine is a single-key JSON API and an MCP server, so autonomous medical billing agents can scrub a claim and resolve a denial mid-task.","contact":{"name":"Denial7","url":"https://denial7.com","email":"hello@denial7.com"}},"servers":[{"url":"https://denial7.com"}],"security":[{},{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"ld_live_*"}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]},"Citation":{"type":"object","description":"A single cited source behind one verdict. confidence \"verify\" MUST be rendered as Unverified, never as fact.","properties":{"source":{"type":"string","description":"Human label for the source, e.g. \"CMS NCCI PTP Edits\"."},"url":{"type":"string","format":"uri"},"quarter":{"type":["string","null"],"description":"The CMS edit quarter this value belongs to, when versioned."},"retrievedAt":{"type":["string","null"],"format":"date"},"confidence":{"type":"string","enum":["verified","verify"]}},"required":["source","url","confidence"]},"ClaimInput":{"type":"object","properties":{"dateOfService":{"type":"string","format":"date","description":"ISO yyyy-mm-dd. Selects the CMS edit quarter."},"payerSlug":{"type":["string","null"]},"lines":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"CPT/HCPCS code, referenced numerically only."},"modifiers":{"type":"array","items":{"type":"string"},"description":"Modifiers on this line. Omit or send [] for none; parseClaimInput defaults a missing value to []."},"units":{"type":"integer"}},"required":["code","units"]}}},"required":["dateOfService","lines"]},"Finding":{"type":"object","properties":{"kind":{"type":"string","enum":["ptp","mue","input"]},"status":{"type":"string","enum":["pass","fail","bypassed","no_data"],"description":"no_data means the code or pair was never checked against our dataset. It is NOT a pass."},"lineIndexes":{"type":"array","items":{"type":"integer"},"description":"0-based indexes into the request's lines."},"codes":{"type":"array","items":{"type":"string"}},"summary":{"type":"string"},"rule":{"type":"string"},"remedy":{"type":"string","description":"What to do next. Empty string when status is pass."},"resolvingModifiers":{"type":"array","items":{"type":"string"},"description":"Modifiers that would legitimately bypass this PTP edit, when status is fail with kind ptp and indicator 1."},"bypassedBy":{"type":"string","description":"The modifier that actually bypassed the edit, when status is bypassed."},"citation":{"type":"object","description":"A single cited source behind one verdict. confidence \"verify\" MUST be rendered as Unverified, never as fact.","properties":{"source":{"type":"string","description":"Human label for the source, e.g. \"CMS NCCI PTP Edits\"."},"url":{"type":"string","format":"uri"},"quarter":{"type":["string","null"],"description":"The CMS edit quarter this value belongs to, when versioned."},"retrievedAt":{"type":["string","null"],"format":"date"},"confidence":{"type":"string","enum":["verified","verify"]}},"required":["source","url","confidence"]}},"required":["kind","status","lineIndexes","codes","summary","rule","remedy"]},"ScrubResult":{"type":"object","properties":{"input":{"type":"object","properties":{"dateOfService":{"type":"string","format":"date","description":"ISO yyyy-mm-dd. Selects the CMS edit quarter."},"payerSlug":{"type":["string","null"]},"lines":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"CPT/HCPCS code, referenced numerically only."},"modifiers":{"type":"array","items":{"type":"string"},"description":"Modifiers on this line. Omit or send [] for none; parseClaimInput defaults a missing value to []."},"units":{"type":"integer"}},"required":["code","units"]}}},"required":["dateOfService","lines"]},"editQuarter":{"type":"string","description":"The CMS edit quarter the verdict was computed against, e.g. \"2026 Q3\"."},"findings":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["ptp","mue","input"]},"status":{"type":"string","enum":["pass","fail","bypassed","no_data"],"description":"no_data means the code or pair was never checked against our dataset. It is NOT a pass."},"lineIndexes":{"type":"array","items":{"type":"integer"},"description":"0-based indexes into the request's lines."},"codes":{"type":"array","items":{"type":"string"}},"summary":{"type":"string"},"rule":{"type":"string"},"remedy":{"type":"string","description":"What to do next. Empty string when status is pass."},"resolvingModifiers":{"type":"array","items":{"type":"string"},"description":"Modifiers that would legitimately bypass this PTP edit, when status is fail with kind ptp and indicator 1."},"bypassedBy":{"type":"string","description":"The modifier that actually bypassed the edit, when status is bypassed."},"citation":{"type":"object","description":"A single cited source behind one verdict. confidence \"verify\" MUST be rendered as Unverified, never as fact.","properties":{"source":{"type":"string","description":"Human label for the source, e.g. \"CMS NCCI PTP Edits\"."},"url":{"type":"string","format":"uri"},"quarter":{"type":["string","null"],"description":"The CMS edit quarter this value belongs to, when versioned."},"retrievedAt":{"type":["string","null"],"format":"date"},"confidence":{"type":"string","enum":["verified","verify"]}},"required":["source","url","confidence"]}},"required":["kind","status","lineIndexes","codes","summary","rule","remedy"]}},"summary":{"type":"object","properties":{"total":{"type":"integer"},"failures":{"type":"integer"},"bypassed":{"type":"integer"},"noData":{"type":"integer"},"clean":{"type":"boolean","description":"True only when every finding is pass and none are no_data."}},"required":["total","failures","bypassed","noData","clean"]},"coverage":{"type":"object","properties":{"ptpPairsLoaded":{"type":"integer"},"mueCodesLoaded":{"type":"integer"},"note":{"type":"string"}},"required":["ptpPairsLoaded","mueCodesLoaded","note"]}},"required":["input","editQuarter","findings","summary","coverage"]},"Carc":{"type":"object","properties":{"code":{"type":"string"},"commonGroups":{"type":"array","items":{"type":"string"}},"title":{"type":"string"},"plainMeaning":{"type":"string"},"whyItFires":{"type":"array","items":{"type":"string"}},"correctiveActions":{"type":"array","items":{"type":"object","properties":{"step":{"type":"string"},"detail":{"type":"string"}},"required":["step","detail"]}},"appealWorthiness":{"type":"string","enum":["low","medium","high"]},"appealNote":{"type":"string"},"relatedRarc":{"type":"array","items":{"type":"string"}},"sourceUrl":{"type":"string","format":"uri"},"confidence":{"type":"string","enum":["verified","verify"]}},"required":["code","title","plainMeaning","confidence"]},"Rarc":{"type":"object","properties":{"code":{"type":"string"},"type":{"type":"string","enum":["informational","alert"]},"title":{"type":"string"},"plainMeaning":{"type":"string"},"correctiveActions":{"type":"array","items":{"type":"object","properties":{"step":{"type":"string"},"detail":{"type":"string"}},"required":["step","detail"]}},"relatedCarc":{"type":"array","items":{"type":"string"}},"sourceUrl":{"type":"string","format":"uri"},"confidence":{"type":"string","enum":["verified","verify"]}},"required":["code","title","plainMeaning","confidence"]},"DenialExplanation":{"type":"object","properties":{"found":{"type":"boolean","description":"False means we do not hold this CARC in our dataset."},"group":{"type":["object","null"],"properties":{"code":{"type":"string"},"meaning":{"type":"string"}}},"carc":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"commonGroups":{"type":"array","items":{"type":"string"}},"title":{"type":"string"},"plainMeaning":{"type":"string"},"whyItFires":{"type":"array","items":{"type":"string"}},"correctiveActions":{"type":"array","items":{"type":"object","properties":{"step":{"type":"string"},"detail":{"type":"string"}},"required":["step","detail"]}},"appealWorthiness":{"type":"string","enum":["low","medium","high"]},"appealNote":{"type":"string"},"relatedRarc":{"type":"array","items":{"type":"string"}},"sourceUrl":{"type":"string","format":"uri"},"confidence":{"type":"string","enum":["verified","verify"]}},"required":["code","title","plainMeaning","confidence"]},{"type":"null"}]},"rarc":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"type":{"type":"string","enum":["informational","alert"]},"title":{"type":"string"},"plainMeaning":{"type":"string"},"correctiveActions":{"type":"array","items":{"type":"object","properties":{"step":{"type":"string"},"detail":{"type":"string"}},"required":["step","detail"]}},"relatedCarc":{"type":"array","items":{"type":"string"}},"sourceUrl":{"type":"string","format":"uri"},"confidence":{"type":"string","enum":["verified","verify"]}},"required":["code","title","plainMeaning","confidence"]}},"unknownRarc":{"type":"array","items":{"type":"string"},"description":"RARC codes you passed that we do not hold."},"correctiveActions":{"type":"array","items":{"type":"object","properties":{"step":{"type":"string"},"detail":{"type":"string"}},"required":["step","detail"]}},"appeal":{"type":"object","properties":{"worthiness":{"type":"string","enum":["low","medium","high","unknown"]},"note":{"type":"string"},"payer":{"anyOf":[{"type":"object","properties":{"payer":{"type":"string"},"slug":{"type":"string"},"initialClaimLimitDays":{"type":["integer","null"]},"limitText":{"type":"string"},"clockStartsFrom":{"type":"string"},"appealLimitDays":{"type":["integer","null"]},"notes":{"type":"string"},"sourceUrl":{"type":"string","format":"uri"},"confidence":{"type":"string","enum":["verified","verify"]}},"required":["payer","slug","confidence"]},{"type":"null"}]},"deadlineDays":{"type":["integer","null"]}}},"note":{"type":"string","description":"Explains a false `found`; empty string otherwise."}},"required":["found","carc","rarc","unknownRarc","correctiveActions","appeal","note"]},"PtpPair":{"type":"object","properties":{"column1":{"type":"string","description":"The payable comprehensive code."},"column2":{"type":"string","description":"The component code that gets bundled into column1."},"modifierIndicator":{"type":"string","enum":["0","1","9"],"description":"0: no modifier may bypass. 1: a modifier may bypass when the services were genuinely distinct. 9: edit not applicable / deleted."},"effectiveDate":{"type":"string","format":"date"},"deletionDate":{"type":["string","null"],"format":"date"},"rationale":{"type":"string"},"note":{"type":"string"},"sourceUrl":{"type":"string","format":"uri"},"confidence":{"type":"string","enum":["verified","verify"]}},"required":["column1","column2","modifierIndicator","effectiveDate","confidence"]},"MueLimit":{"type":"object","properties":{"code":{"type":"string"},"mueValue":{"type":"number"},"mai":{"type":"string","enum":["1","2","3"]},"maiMeaning":{"type":"string"},"serviceType":{"type":"string"},"note":{"type":"string"},"sourceUrl":{"type":"string","format":"uri"},"confidence":{"type":"string","enum":["verified","verify"]}},"required":["code","mueValue","mai","maiMeaning","confidence"]},"TimelyFilingPayer":{"type":"object","properties":{"payer":{"type":"string"},"slug":{"type":"string"},"initialClaimLimitDays":{"type":["integer","null"]},"limitText":{"type":"string"},"clockStartsFrom":{"type":"string"},"appealLimitDays":{"type":["integer","null"]},"notes":{"type":"string"},"sourceUrl":{"type":"string","format":"uri"},"confidence":{"type":"string","enum":["verified","verify"]}},"required":["payer","slug","confidence"]},"AppealRequest":{"type":"object","properties":{"carc":{"type":"string","description":"CARC code from the remittance, e.g. \"CO-45\" or \"45\"."},"rarc":{"type":"array","items":{"type":"string"}},"payerSlug":{"type":"string"},"providerName":{"type":"string"},"claimNumber":{"type":"string"},"dateOfService":{"type":"string","format":"date"},"codes":{"type":"array","items":{"type":"string"}},"practiceNote":{"type":"string"}},"required":["carc"]},"AppealLetter":{"type":"object","properties":{"subject":{"type":"string"},"body":{"type":"string"},"citations":{"type":"array","items":{"type":"object","description":"A single cited source behind one verdict. confidence \"verify\" MUST be rendered as Unverified, never as fact.","properties":{"source":{"type":"string","description":"Human label for the source, e.g. \"CMS NCCI PTP Edits\"."},"url":{"type":"string","format":"uri"},"quarter":{"type":["string","null"],"description":"The CMS edit quarter this value belongs to, when versioned."},"retrievedAt":{"type":["string","null"],"format":"date"},"confidence":{"type":"string","enum":["verified","verify"]}},"required":["source","url","confidence"]}},"placeholders":{"type":"array","items":{"type":"string"},"description":"Fields the practice must complete before sending. Never auto-filled."},"grounded":{"type":"boolean","description":"True only when we hold the CARC and could argue it specifically."}},"required":["subject","body","citations","placeholders","grounded"]}}},"paths":{"/api/v1/scrub":{"post":{"summary":"Scrub a claim against the NCCI procedure-to-procedure (PTP) edits and medically unlikely edits (MUE) in force on the date of service. Deterministic: no model, so identical input always returns an identical verdict. Every finding is one of four statuses: pass (checked and clean), fail (an edit fires), bypassed (an edit fires but a modifier already on the line legitimately resolves it), or no_data (we hold no edit for this code or pair). no_data is NOT a pass: CMS may still deny it under an edit outside our loaded subset. The response echoes editQuarter (the CMS quarter the verdict was computed against) and coverage (how many PTP pairs and MUE codes are loaded), so you always know what was actually checked. Supports an `Idempotency-Key` header for keyed callers: replaying the same key returns the original result rather than a second billable call.","operationId":"post_api_v1_scrub","security":[{},{"bearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Opaque caller-chosen key. A keyed caller replaying the same key gets the ORIGINAL stored result back rather than a second billable call. Anonymous callers share no stable identity, so they always recompute and this header is ignored.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}},"X-Quota-Limit":{"description":"Included API calls per month on your plan. Billable callers only.","schema":{"type":"integer"}},"X-Quota-Used":{"description":"Calls used this month. Billable callers only.","schema":{"type":"integer"}},"X-Quota-Remaining":{"description":"Calls left this month. Billable callers only.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"input":{"type":"object","properties":{"dateOfService":{"type":"string","format":"date","description":"ISO yyyy-mm-dd. Selects the CMS edit quarter."},"payerSlug":{"type":["string","null"]},"lines":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"CPT/HCPCS code, referenced numerically only."},"modifiers":{"type":"array","items":{"type":"string"},"description":"Modifiers on this line. Omit or send [] for none; parseClaimInput defaults a missing value to []."},"units":{"type":"integer"}},"required":["code","units"]}}},"required":["dateOfService","lines"]},"editQuarter":{"type":"string","description":"The CMS edit quarter the verdict was computed against, e.g. \"2026 Q3\"."},"findings":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["ptp","mue","input"]},"status":{"type":"string","enum":["pass","fail","bypassed","no_data"],"description":"no_data means the code or pair was never checked against our dataset. It is NOT a pass."},"lineIndexes":{"type":"array","items":{"type":"integer"},"description":"0-based indexes into the request's lines."},"codes":{"type":"array","items":{"type":"string"}},"summary":{"type":"string"},"rule":{"type":"string"},"remedy":{"type":"string","description":"What to do next. Empty string when status is pass."},"resolvingModifiers":{"type":"array","items":{"type":"string"},"description":"Modifiers that would legitimately bypass this PTP edit, when status is fail with kind ptp and indicator 1."},"bypassedBy":{"type":"string","description":"The modifier that actually bypassed the edit, when status is bypassed."},"citation":{"type":"object","description":"A single cited source behind one verdict. confidence \"verify\" MUST be rendered as Unverified, never as fact.","properties":{"source":{"type":"string","description":"Human label for the source, e.g. \"CMS NCCI PTP Edits\"."},"url":{"type":"string","format":"uri"},"quarter":{"type":["string","null"],"description":"The CMS edit quarter this value belongs to, when versioned."},"retrievedAt":{"type":["string","null"],"format":"date"},"confidence":{"type":"string","enum":["verified","verify"]}},"required":["source","url","confidence"]}},"required":["kind","status","lineIndexes","codes","summary","rule","remedy"]}},"summary":{"type":"object","properties":{"total":{"type":"integer"},"failures":{"type":"integer"},"bypassed":{"type":"integer"},"noData":{"type":"integer"},"clean":{"type":"boolean","description":"True only when every finding is pass and none are no_data."}},"required":["total","failures","bypassed","noData","clean"]},"coverage":{"type":"object","properties":{"ptpPairsLoaded":{"type":"integer"},"mueCodesLoaded":{"type":"integer"},"note":{"type":"string"}},"required":["ptpPairsLoaded","mueCodesLoaded","note"]}},"required":["input","editQuarter","findings","summary","coverage"]},"request_id":{"type":"string"},"disclaimer":{"type":"string"},"attribution":{"type":"string","description":"Present on free/anonymous responses only."}},"required":["data","request_id","disclaimer"]}}}},"400":{"description":"invalid_json: The POST body is not valid JSON. Reported separately from invalid_request so a caller with a broken serialiser is not told its field names are wrong. invalid_request: A required parameter is missing or malformed: no carc, no code, an unparseable dateOfService, an empty lines array, or a pair lookup without a date. The message names the parameter and what it wanted.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"unauthorized: The key you sent is not valid or has been revoked. Only ever returned when you supply a key: a keyless call is allowed at the anonymous rate, never rejected as unauthorized.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"413":{"description":"payload_too_large: The POST body exceeds the byte ceiling. The message names the exact limit. Split the claim across multiple calls.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"429":{"description":"rate_limited: You exceeded the anonymous rate, the test-key throttle, your plan's per-minute burst, or your plan's monthly allowance. Retry-After tells you how long to wait.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"500":{"description":"internal: An unexpected server error. Safe to retry; quote the request_id if it persists.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"dateOfService":{"type":"string","format":"date","description":"ISO yyyy-mm-dd. Selects the CMS edit quarter."},"payerSlug":{"type":["string","null"]},"lines":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"CPT/HCPCS code, referenced numerically only."},"modifiers":{"type":"array","items":{"type":"string"},"description":"Modifiers on this line. Omit or send [] for none; parseClaimInput defaults a missing value to []."},"units":{"type":"integer"}},"required":["code","units"]}}},"required":["dateOfService","lines"]}}}}}},"/api/v1/denial":{"get":{"summary":"Explain a CARC (Claim Adjustment Reason Code) and any RARCs (Remittance Advice Remark Codes) from a remittance: what the denial means, ranked corrective actions, and whether an appeal is worth filing. found:false means we do not hold that CARC in our dataset (X12 publishes far more codes than we curate); unknownRarc reports, rather than silently drops, any RARC you passed that we do not hold. Passing payer additionally attaches that payer's appeal deadline where we hold one.","operationId":"get_api_v1_denial","security":[{},{"bearerAuth":[]}],"parameters":[{"name":"carc","in":"query","required":true,"description":"CARC code, with or without a group prefix, e.g. \"CO-45\" or \"45\".","schema":{"type":"string"}},{"name":"rarc","in":"query","required":false,"description":"Optional RARC code(s). Comma-separated, or repeat the parameter.","schema":{"type":"string"}},{"name":"payer","in":"query","required":false,"description":"Optional payer slug, to attach a timely-filing appeal deadline.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}},"X-Quota-Limit":{"description":"Included API calls per month on your plan. Billable callers only.","schema":{"type":"integer"}},"X-Quota-Used":{"description":"Calls used this month. Billable callers only.","schema":{"type":"integer"}},"X-Quota-Remaining":{"description":"Calls left this month. Billable callers only.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"found":{"type":"boolean","description":"False means we do not hold this CARC in our dataset."},"group":{"type":["object","null"],"properties":{"code":{"type":"string"},"meaning":{"type":"string"}}},"carc":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"commonGroups":{"type":"array","items":{"type":"string"}},"title":{"type":"string"},"plainMeaning":{"type":"string"},"whyItFires":{"type":"array","items":{"type":"string"}},"correctiveActions":{"type":"array","items":{"type":"object","properties":{"step":{"type":"string"},"detail":{"type":"string"}},"required":["step","detail"]}},"appealWorthiness":{"type":"string","enum":["low","medium","high"]},"appealNote":{"type":"string"},"relatedRarc":{"type":"array","items":{"type":"string"}},"sourceUrl":{"type":"string","format":"uri"},"confidence":{"type":"string","enum":["verified","verify"]}},"required":["code","title","plainMeaning","confidence"]},{"type":"null"}]},"rarc":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"type":{"type":"string","enum":["informational","alert"]},"title":{"type":"string"},"plainMeaning":{"type":"string"},"correctiveActions":{"type":"array","items":{"type":"object","properties":{"step":{"type":"string"},"detail":{"type":"string"}},"required":["step","detail"]}},"relatedCarc":{"type":"array","items":{"type":"string"}},"sourceUrl":{"type":"string","format":"uri"},"confidence":{"type":"string","enum":["verified","verify"]}},"required":["code","title","plainMeaning","confidence"]}},"unknownRarc":{"type":"array","items":{"type":"string"},"description":"RARC codes you passed that we do not hold."},"correctiveActions":{"type":"array","items":{"type":"object","properties":{"step":{"type":"string"},"detail":{"type":"string"}},"required":["step","detail"]}},"appeal":{"type":"object","properties":{"worthiness":{"type":"string","enum":["low","medium","high","unknown"]},"note":{"type":"string"},"payer":{"anyOf":[{"type":"object","properties":{"payer":{"type":"string"},"slug":{"type":"string"},"initialClaimLimitDays":{"type":["integer","null"]},"limitText":{"type":"string"},"clockStartsFrom":{"type":"string"},"appealLimitDays":{"type":["integer","null"]},"notes":{"type":"string"},"sourceUrl":{"type":"string","format":"uri"},"confidence":{"type":"string","enum":["verified","verify"]}},"required":["payer","slug","confidence"]},{"type":"null"}]},"deadlineDays":{"type":["integer","null"]}}},"note":{"type":"string","description":"Explains a false `found`; empty string otherwise."}},"required":["found","carc","rarc","unknownRarc","correctiveActions","appeal","note"]},"request_id":{"type":"string"},"disclaimer":{"type":"string"},"attribution":{"type":"string","description":"Present on free/anonymous responses only."}},"required":["data","request_id","disclaimer"]}}}},"400":{"description":"invalid_request: A required parameter is missing or malformed: no carc, no code, an unparseable dateOfService, an empty lines array, or a pair lookup without a date. The message names the parameter and what it wanted.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"unauthorized: The key you sent is not valid or has been revoked. Only ever returned when you supply a key: a keyless call is allowed at the anonymous rate, never rejected as unauthorized.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"429":{"description":"rate_limited: You exceeded the anonymous rate, the test-key throttle, your plan's per-minute burst, or your plan's monthly allowance. Retry-After tells you how long to wait.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"500":{"description":"internal: An unexpected server error. Safe to retry; quote the request_id if it persists.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}}}}},"/api/v1/ncci":{"get":{"summary":"Look up NCCI procedure-to-procedure (PTP) edits. Two modes: pass column1 and column2 (either order) with dateOfService to check whether a specific pair bundles on that date, or pass code alone to list every pair in the dataset involving that code. In pair mode, status is no_data (we hold no edit for this pair; not confirmation CMS has none), not_applicable (we hold the edit but it does not govern this date, or its modifierIndicator is \"9\"), or applies. modifierIndicator \"0\" means no modifier may bypass the edit; \"1\" means a modifier may bypass it when the services were genuinely distinct.","operationId":"get_api_v1_ncci","security":[{},{"bearerAuth":[]}],"parameters":[{"name":"column1","in":"query","required":false,"description":"A CPT/HCPCS code. Pair mode: use with column2 and dateOfService.","schema":{"type":"string"}},{"name":"column2","in":"query","required":false,"description":"The other code in the pair.","schema":{"type":"string"}},{"name":"dateOfService","in":"query","required":false,"description":"ISO yyyy-mm-dd. Required in pair mode; NCCI edits are versioned quarterly.","schema":{"type":"string"}},{"name":"code","in":"query","required":false,"description":"List mode: a single code. Returns every pair in the dataset involving it, in either column.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}},"X-Quota-Limit":{"description":"Included API calls per month on your plan. Billable callers only.","schema":{"type":"integer"}},"X-Quota-Used":{"description":"Calls used this month. Billable callers only.","schema":{"type":"integer"}},"X-Quota-Remaining":{"description":"Calls left this month. Billable callers only.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"data":{"type":"object","properties":{"column1":{"type":"string"},"column2":{"type":"string"},"dateOfService":{"type":"string","format":"date"},"editQuarter":{"type":"string"},"found":{"type":"boolean"},"appliesOnDate":{"type":"boolean"},"status":{"type":"string","enum":["no_data","not_applicable","applies"]},"edit":{"anyOf":[{"type":"object","properties":{"column1":{"type":"string","description":"The payable comprehensive code."},"column2":{"type":"string","description":"The component code that gets bundled into column1."},"modifierIndicator":{"type":"string","enum":["0","1","9"],"description":"0: no modifier may bypass. 1: a modifier may bypass when the services were genuinely distinct. 9: edit not applicable / deleted."},"effectiveDate":{"type":"string","format":"date"},"deletionDate":{"type":["string","null"],"format":"date"},"rationale":{"type":"string"},"note":{"type":"string"},"sourceUrl":{"type":"string","format":"uri"},"confidence":{"type":"string","enum":["verified","verify"]}},"required":["column1","column2","modifierIndicator","effectiveDate","confidence"]},{"type":"null"}]}},"required":["column1","column2","dateOfService","editQuarter","found","appliesOnDate","status","edit"]},"request_id":{"type":"string"},"disclaimer":{"type":"string"},"attribution":{"type":"string","description":"Present on free/anonymous responses only."}},"required":["data","request_id","disclaimer"]},{"type":"object","properties":{"data":{"type":"object","properties":{"code":{"type":"string"},"pairs":{"type":"array","items":{"type":"object","properties":{"column1":{"type":"string","description":"The payable comprehensive code."},"column2":{"type":"string","description":"The component code that gets bundled into column1."},"modifierIndicator":{"type":"string","enum":["0","1","9"],"description":"0: no modifier may bypass. 1: a modifier may bypass when the services were genuinely distinct. 9: edit not applicable / deleted."},"effectiveDate":{"type":"string","format":"date"},"deletionDate":{"type":["string","null"],"format":"date"},"rationale":{"type":"string"},"note":{"type":"string"},"sourceUrl":{"type":"string","format":"uri"},"confidence":{"type":"string","enum":["verified","verify"]}},"required":["column1","column2","modifierIndicator","effectiveDate","confidence"]}},"count":{"type":"integer"}},"required":["code","pairs","count"]},"request_id":{"type":"string"},"disclaimer":{"type":"string"},"attribution":{"type":"string","description":"Present on free/anonymous responses only."}},"required":["data","request_id","disclaimer"]}]}}}},"400":{"description":"invalid_request: A required parameter is missing or malformed: no carc, no code, an unparseable dateOfService, an empty lines array, or a pair lookup without a date. The message names the parameter and what it wanted.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"unauthorized: The key you sent is not valid or has been revoked. Only ever returned when you supply a key: a keyless call is allowed at the anonymous rate, never rejected as unauthorized.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"429":{"description":"rate_limited: You exceeded the anonymous rate, the test-key throttle, your plan's per-minute burst, or your plan's monthly allowance. Retry-After tells you how long to wait.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"500":{"description":"internal: An unexpected server error. Safe to retry; quote the request_id if it persists.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}}}}},"/api/v1/mue":{"get":{"summary":"Look up the medically unlikely edit (MUE) unit limit for a single CPT/HCPCS code. status is found or no_data; no_data means we hold no MUE value for this code, not that CMS publishes none. When found, mai (the adjudication indicator: \"1\" line edit, \"2\" date-of-service absolute, \"3\" date-of-service clinical) governs what happens above the limit, explained in maiMeaning.","operationId":"get_api_v1_mue","security":[{},{"bearerAuth":[]}],"parameters":[{"name":"code","in":"query","required":true,"description":"CPT/HCPCS code, e.g. 36415.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}},"X-Quota-Limit":{"description":"Included API calls per month on your plan. Billable callers only.","schema":{"type":"integer"}},"X-Quota-Used":{"description":"Calls used this month. Billable callers only.","schema":{"type":"integer"}},"X-Quota-Remaining":{"description":"Calls left this month. Billable callers only.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"code":{"type":"string"},"status":{"type":"string","enum":["found","no_data"]},"limit":{"anyOf":[{"type":"object","properties":{"code":{"type":"string"},"mueValue":{"type":"number"},"mai":{"type":"string","enum":["1","2","3"]},"maiMeaning":{"type":"string"},"serviceType":{"type":"string"},"note":{"type":"string"},"sourceUrl":{"type":"string","format":"uri"},"confidence":{"type":"string","enum":["verified","verify"]}},"required":["code","mueValue","mai","maiMeaning","confidence"]},{"type":"null"}]}},"required":["code","status","limit"]},"request_id":{"type":"string"},"disclaimer":{"type":"string"},"attribution":{"type":"string","description":"Present on free/anonymous responses only."}},"required":["data","request_id","disclaimer"]}}}},"400":{"description":"invalid_request: A required parameter is missing or malformed: no carc, no code, an unparseable dateOfService, an empty lines array, or a pair lookup without a date. The message names the parameter and what it wanted.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"unauthorized: The key you sent is not valid or has been revoked. Only ever returned when you supply a key: a keyless call is allowed at the anonymous rate, never rejected as unauthorized.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"429":{"description":"rate_limited: You exceeded the anonymous rate, the test-key throttle, your plan's per-minute burst, or your plan's monthly allowance. Retry-After tells you how long to wait.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"500":{"description":"internal: An unexpected server error. Safe to retry; quote the request_id if it persists.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}}}}},"/api/v1/appeal":{"post":{"summary":"Generate an appeal letter for a denial, assembled deterministically from cited facts. REQUIRES A PRO OR SCALE PLAN: an anonymous or free-plan call returns an upgrade_required error naming the pricing page, never a fabricated or partial letter. Any fact only the practice holds (provider name, claim number, date of service, procedure codes, signature) that is not supplied is rendered as an explicit [TO BE COMPLETED BY PRACTICE] placeholder and listed in placeholders. grounded is true only when we hold the CARC supplied and could argue it specifically. Supports an `Idempotency-Key` header, the same as /scrub.","operationId":"post_api_v1_appeal","security":[{},{"bearerAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Opaque caller-chosen key. A keyed caller replaying the same key gets the ORIGINAL stored result back rather than a second billable call. Anonymous callers share no stable identity, so they always recompute and this header is ignored.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}},"X-Quota-Limit":{"description":"Included API calls per month on your plan. Billable callers only.","schema":{"type":"integer"}},"X-Quota-Used":{"description":"Calls used this month. Billable callers only.","schema":{"type":"integer"}},"X-Quota-Remaining":{"description":"Calls left this month. Billable callers only.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"subject":{"type":"string"},"body":{"type":"string"},"citations":{"type":"array","items":{"type":"object","description":"A single cited source behind one verdict. confidence \"verify\" MUST be rendered as Unverified, never as fact.","properties":{"source":{"type":"string","description":"Human label for the source, e.g. \"CMS NCCI PTP Edits\"."},"url":{"type":"string","format":"uri"},"quarter":{"type":["string","null"],"description":"The CMS edit quarter this value belongs to, when versioned."},"retrievedAt":{"type":["string","null"],"format":"date"},"confidence":{"type":"string","enum":["verified","verify"]}},"required":["source","url","confidence"]}},"placeholders":{"type":"array","items":{"type":"string"},"description":"Fields the practice must complete before sending. Never auto-filled."},"grounded":{"type":"boolean","description":"True only when we hold the CARC and could argue it specifically."}},"required":["subject","body","citations","placeholders","grounded"]},"request_id":{"type":"string"},"disclaimer":{"type":"string"},"attribution":{"type":"string","description":"Present on free/anonymous responses only."}},"required":["data","request_id","disclaimer"]}}}},"400":{"description":"invalid_json: The POST body is not valid JSON. Reported separately from invalid_request so a caller with a broken serialiser is not told its field names are wrong. invalid_request: A required parameter is missing or malformed: no carc, no code, an unparseable dateOfService, an empty lines array, or a pair lookup without a date. The message names the parameter and what it wanted.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"unauthorized: The key you sent is not valid or has been revoked. Only ever returned when you supply a key: a keyless call is allowed at the anonymous rate, never rejected as unauthorized.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"402":{"description":"upgrade_required: POST /api/v1/appeal (and the draft_appeal MCP tool) called anonymously or on the free plan. details carries upgrade_url and required_plan. You get this refusal rather than a fabricated or partial letter.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"413":{"description":"payload_too_large: The POST body exceeds the byte ceiling. The message names the exact limit. Split the claim across multiple calls.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"429":{"description":"rate_limited: You exceeded the anonymous rate, the test-key throttle, your plan's per-minute burst, or your plan's monthly allowance. Retry-After tells you how long to wait.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"500":{"description":"internal: An unexpected server error. Safe to retry; quote the request_id if it persists.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"carc":{"type":"string","description":"CARC code from the remittance, e.g. \"CO-45\" or \"45\"."},"rarc":{"type":"array","items":{"type":"string"}},"payerSlug":{"type":"string"},"providerName":{"type":"string"},"claimNumber":{"type":"string"},"dateOfService":{"type":"string","format":"date"},"codes":{"type":"array","items":{"type":"string"}},"practiceNote":{"type":"string"}},"required":["carc"]}}}}}},"/api/v1/timely-filing":{"get":{"summary":"Days remaining to file an initial claim (or, if past, how far over) for a payer given a date of service. daysRemaining and expired are null when we hold no published timely filing limit for that payer, which is common since many limits are contract-specific; check note before treating the result as a deadline.","operationId":"get_api_v1_timely_filing","security":[{},{"bearerAuth":[]}],"parameters":[{"name":"payer","in":"query","required":true,"description":"Payer slug, e.g. aetna.","schema":{"type":"string"}},{"name":"dateOfService","in":"query","required":true,"description":"ISO yyyy-mm-dd.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}},"X-Quota-Limit":{"description":"Included API calls per month on your plan. Billable callers only.","schema":{"type":"integer"}},"X-Quota-Used":{"description":"Calls used this month. Billable callers only.","schema":{"type":"integer"}},"X-Quota-Remaining":{"description":"Calls left this month. Billable callers only.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"payerSlug":{"type":"string"},"dateOfService":{"type":"string","format":"date"},"checkedAt":{"type":"string","format":"date"},"payer":{"anyOf":[{"type":"object","properties":{"payer":{"type":"string"},"slug":{"type":"string"},"initialClaimLimitDays":{"type":["integer","null"]},"limitText":{"type":"string"},"clockStartsFrom":{"type":"string"},"appealLimitDays":{"type":["integer","null"]},"notes":{"type":"string"},"sourceUrl":{"type":"string","format":"uri"},"confidence":{"type":"string","enum":["verified","verify"]}},"required":["payer","slug","confidence"]},{"type":"null"}]},"daysElapsed":{"type":["integer","null"]},"daysRemaining":{"type":["integer","null"]},"expired":{"type":["boolean","null"]},"note":{"type":"string"}},"required":["payerSlug","dateOfService","payer","daysElapsed","daysRemaining","expired","note"]},"request_id":{"type":"string"},"disclaimer":{"type":"string"},"attribution":{"type":"string","description":"Present on free/anonymous responses only."}},"required":["data","request_id","disclaimer"]}}}},"400":{"description":"invalid_request: A required parameter is missing or malformed: no carc, no code, an unparseable dateOfService, an empty lines array, or a pair lookup without a date. The message names the parameter and what it wanted.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"401":{"description":"unauthorized: The key you sent is not valid or has been revoked. Only ever returned when you supply a key: a keyless call is allowed at the anonymous rate, never rejected as unauthorized.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"429":{"description":"rate_limited: You exceeded the anonymous rate, the test-key throttle, your plan's per-minute burst, or your plan's monthly allowance. Retry-After tells you how long to wait.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"500":{"description":"internal: An unexpected server error. Safe to retry; quote the request_id if it persists.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}}}}},"/api/v1/pricing":{"get":{"summary":"Machine-readable pricing: every plan id, its monthly price (read live from lib/plans.ts, never hardcoded), what it includes, the included monthly API-call allowance (a hard ceiling, not a meter), rate limits, and whether it grants appeal-letter generation. Lets an agent self-select a plan without a human reading the pricing page. Free, keyless, not rate-limited.","operationId":"get_api_v1_pricing","security":[{},{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Success","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"currency":{"type":"string"},"unit":{"type":"string"},"determinism":{"type":"string"},"anonymous":{"type":"object","properties":{"price_usd":{"type":"number"},"rate_limit_per_minute":{"type":"integer"},"rate_limit_per_day":{"type":"integer"},"api_access":{"type":"boolean"},"appeal_letters":{"type":"boolean"},"note":{"type":"string"}}},"test_key":{"type":"object","properties":{"rate_limit_per_minute":{"type":"integer"},"rate_limit_per_day":{"type":"integer"},"bills":{"type":"boolean"},"appeal_letters":{"type":"boolean"},"note":{"type":"string"}}},"plans":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["free","pro","scale"]},"name":{"type":"string"},"price_usd_per_month":{"type":"number"},"cadence":{"type":"string"},"tagline":{"type":"string"},"included_api_calls_per_month":{"type":"integer"},"rate_limit_per_minute":{"type":"integer"},"batch_claims_per_run":{"type":"integer"},"saved_claims":{"description":"An integer, or the string \"unlimited\"."},"seats":{"type":"integer"},"api_access":{"type":"boolean"},"claim_history":{"type":"boolean"},"batch_scrub":{"type":"boolean"},"appeal_letters":{"type":"boolean"},"denial_analytics":{"type":"boolean"},"priority_support":{"type":"boolean"},"features":{"type":"array","items":{"type":"string"}}}}},"checkout":{"type":"object","properties":{"note":{"type":"string"},"upgrade_url":{"type":"string","format":"uri"}}}},"required":["currency","unit","anonymous","plans"]},"request_id":{"type":"string"},"disclaimer":{"type":"string"},"attribution":{"type":"string","description":"Present on free/anonymous responses only."}},"required":["data","request_id","disclaimer"]}}}},"401":{"description":"unauthorized: The key you sent is not valid or has been revoked. Only ever returned when you supply a key: a keyless call is allowed at the anonymous rate, never rejected as unauthorized.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}},"500":{"description":"internal: An unexpected server error. Safe to retry; quote the request_id if it persists.","headers":{"X-Request-Id":{"description":"Correlation id for this request. Quote it in a support question. Echoed from a supplied x-request-id header when you send one.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window for your tier.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix seconds at which the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","invalid_json","unauthorized","upgrade_required","not_found","payload_too_large","rate_limited","internal"]},"message":{"type":"string"},"details":{"type":"object","description":"Extra context where a handler supplies it. upgrade_required carries upgrade_url and required_plan."}},"required":["code","message"]},"request_id":{"type":"string"}},"required":["error"]}}}}}}}}}