Minctrl Docs
Cookbook

Provider credentialing

Primary-source verify a provider on the credentialing vertical — fan out license, history, and exclusion checks, park at the credentialing-committee gate, sign the privileging decision, then authorize payer enrollment. The irreversible enrollment stays shadowed until signed.

Scenario. A provider profile is collected from CAQH and intake documents, then primary-source verified in parallel — licenses/DEA/education, malpractice and work history via NPDB, and OIG/SAM/OFAC/Medicaid exclusion screening. Results are reconciled into a discrepancy list and risk profile. A credentialing committee signs the privileging decision and every adverse finding; a second MSO gate authorizes payer enrollment before it is submitted.

Vertical: credentialing · Parks at gate step-id: committee-signoff (gate:credentialing-committee-signoff). A later gate, enrollment-approval (gate:enrollment-ready), fronts the irreversible payer submission.

1. Register and set your token

TOKEN=$(curl -s -X POST "$API/auth/register" \
  -H "Content-Type: application/json" \
  -d '{"email":"you@acme.com","password":"<your-password>","company_name":"Acme Health"}' \
  | jq -r .token)

2. Start the run

RUN=$(curl -s -X POST "$API/process-runs" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "vertical": "credentialing",
    "inputs": {
      "provider_name": "Dr. Alex Rivera, MD",
      "npi": "1234567890",
      "specialty": "cardiology",
      "caqh_id": "12345678",
      "risk": "clean"
    }
  }')
RUN_ID=$(echo "$RUN" | jq -r .id)

The run validates intake completeness, fans out the independent primary-source checks, reconciles adverse findings, and parks at the committee gate. risk is the routing input the resolver matches against the branch labels: "clean" sends the reconciled file to the committee for ratification; a discrepancy routes back through intake for rework.

3. Read where it parked

curl -s "$API/process-runs/$RUN_ID" -H "Authorization: Bearer $TOKEN"

status is awaiting_human and parked_at is gate:credentialing-committee-signoff; the trace shows the run parked at the committee-signoff step. Use that step-id to resume.

4. Resume — the committee signs the privileging decision

curl -s -X POST "$API/process-runs/$RUN_ID/resume" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "gate": "committee-signoff",
    "decision": "approved"
  }'

The committee reviews all verification materials and signs (or denies) the privileging decision plus every adverse finding, documenting rationale. An approved verdict proceeds toward enrollment; a denial stops it there.

5. Outcome — parks again at the enrollment gate

After privileging is signed, the run parks a second time at enrollment-approval (gate:enrollment-ready), where the MSO lead authorizes submission of the payer enrollment package — distinct from privileging. Resume it the same way with "gate": "enrollment-approval". Only then does the run submit the enrollments and move to continuous exclusion monitoring.

6. Authorize enrollment

curl -s -X POST "$API/process-runs/$RUN_ID/resume" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "gate": "enrollment-approval",
    "decision": "approved"
  }'

Governance note

The submit-enroll step (submit payer enrollments to Medicare PECOS / state Medicaid / commercial insurers) is reversible: false and performs no real side effect (mock connector) until you wire a live payer-enroll connector in. It only runs after both gates sign — committee-signoff for privileging and enrollment-approval for the payer submission — so no enrollment is filed without two distinct signed human verdicts.

On this page