Product

Developers

Free Tools

All use cases
Integration Pattern

Pre-Submission Enrichment

Before a claim goes to the payer, call RCI to validate and enrich it. This is the highest-value integration — it prevents denials before they happen.

For: RCM platforms, billing companies, clearinghouses, EHR vendors

How it works

architecture flow
Your EHR / RCM Platform
  │
  ├─ Claim ready for submission
  │
  ├─ Call RCI: POST /v1/knowledge/resolve
  │   ├─ Validate billing form (L2)     CMS-1500 vs UB-04
  │   ├─ Validate POS code (L3)         Matches facility + setting
  │   ├─ Check modifiers (L3/L5)        Required for this service
  │   ├─ Verify filing deadline (L4)    Within payer's window
  │   └─ Estimate payment (L6)          RVU × GPCI × CF
  │
  ├─ All checks pass → Submit to payer
  │
  └─ Errors found → Return to user with corrections

Code examples

1. Resolve billing context before submission

python
import httpx

async def enrich_claim(api_key: str, claim: dict) -> dict:
    async with httpx.AsyncClient(
        base_url="https://api.rci.health",
        headers={"X-API-Key": api_key},
    ) as client:
        resp = await client.post("/v1/knowledge/resolve", json={
            "ccn": claim["facility_ccn"],
            "cpt": claim["cpt_code"],
            "payer": claim.get("payer", "Medicare"),
            "care_setting": claim.get("care_setting", "outpatient"),
        })
        knowledge = resp.json()

    errors = []
    layers = knowledge.get("layers", [])

    # Check billing form
    expected_form = layers[1]["data"].get("billing_form")
    if claim["billing_form"] != expected_form:
        errors.append(f"Wrong form: expected {expected_form}")

    # Check POS code
    expected_pos = layers[2]["data"].get("pos_code")
    if str(claim["pos_code"]) != str(expected_pos):
        errors.append(f"Wrong POS: expected {expected_pos}")

    # Check filing deadline
    filing_limit = layers[3]["data"].get("timely_filing_federal")
    # ... compare against claim date_of_service

    return {
        "valid": len(errors) == 0,
        "errors": errors,
        "expected_payment": knowledge.get("payment_estimate"),
        "knowledge": knowledge,
    }

2. Same thing in TypeScript

typescript
async function enrichClaim(apiKey: string, claim: Claim) {
  const res = await fetch("https://api.rci.health/v1/knowledge/resolve", {
    method: "POST",
    headers: {
      "X-API-Key": apiKey,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      ccn: claim.facilityCcn,
      cpt: claim.cptCode,
      payer: claim.payer ?? "Medicare",
      care_setting: claim.careSetting ?? "outpatient",
    }),
  });

  const knowledge = await res.json();
  const errors: string[] = [];

  const expectedForm = knowledge.layers[1]?.data?.billing_form;
  if (claim.billingForm !== expectedForm) {
    errors.push(`Wrong form: expected ${expectedForm}`);
  }

  const expectedPos = knowledge.layers[2]?.data?.pos_code;
  if (String(claim.posCode) !== String(expectedPos)) {
    errors.push(`Wrong POS: expected ${expectedPos}`);
  }

  return { valid: errors.length === 0, errors, knowledge };
}

What it catches

Wrong billing form

CARC 16

CMS-1500 submitted for a facility that requires UB-04

Wrong POS code

CARC 182

POS doesn't match the facility type and care setting

Missing modifier

CARC 4

Required modifier for this service at this facility

Expired filing deadline

CARC 29

Claim submitted after payer's timely filing limit

Wrong payment system

Routing error

Claim routed to wrong fee schedule for this facility

Incorrect TOB code

CARC 16

Type of bill doesn't match facility classification

Start enriching claims

Get your API key and make your first knowledge resolution call in under 5 minutes.