Inspiration

Filing an insurance claim is a phone marathon. After an accident, the facts are scattered across people who rarely pick up at the same time — the claimant, the treating doctor, the hospital billing desk, the repair shop. A human adjuster spends hours playing phone tag, re-asking the same questions, and manually stitching the answers together before anyone gets paid. We wanted to see if an AI agent could do the boring, repetitive phone work — not just summarize a call, but actually complete a real-world task over the phone — and hand a human a clean, evidence-backed case to approve. CALL-E's ability to place a real call and return structured results made that finally possible.

What it does

ClaimLine is an AI phone-call workbench for insurance claims. A claim is treated as a case with several parties, and ClaimLine calls each one to gather its piece:

  • Claim intake (FNOL) — calls the claimant, discloses it's an AI + gets consent, and captures a schema-validated first-notice-of-loss.
  • Medical report — calls the treating doctor for the injuries, treatment, and whether they're consistent with the incident.
  • Bill verification — calls the hospital billing desk for the amount and service dates, which roll up into a case total.
  • Status chase — calls the repair shop for work status, ETA, and cost.

Then it adds the parts that make it a real product:

  • 🚀 Autopilot — one click calls every party, reconciles the results, and generates a consolidated end-of-case report.
  • 🔎 Fraud & consistency check — cross-references the parties' answers and flags contradictions (e.g. the doctor says injuries aren't consistent, a bill dated before the incident, a total that exceeds coverage) as a Low / Medium / High risk badge with reasons.
  • 📤 Slack/Teams report, 📈 an Insights dashboard (agent-hours saved, fraud flagged, payouts), 💳 a Stripe payout on approval, and multi-language calls (English / Hindi / Spanish).

A human always makes the final approve / hold / reject decision — ClaimLine only gathers facts.

How we built it

  • CALL-E TypeScript SDK (@call-e/calle) to place calls with a stable idempotency key and a result_schema, returning typed, validated results — not just transcripts.
  • TypeScript + Fastify server rendering a multi-page console; node:sqlite (zero-dependency embedded DB) for customers, policies, claims, contacts, call intents, results, decisions, and payments.
  • A small CalleGateway abstraction with Live, Fixture (deterministic, no-call), and Null implementations — so the entire workflow (and CI) runs with no credentials and no dialing by default.
  • An application-owned state machine + reconciler that treats webhooks as wake signals only and always re-fetches the authoritative call state before acting.
  • MCP server so an agent host can drive the same workflow as tools; Slack/Teams via incoming webhooks; Stripe (test mode) via REST; Docker + Render for hosting; and 91 automated tests.

Challenges we ran into

  • result_schema rejected our nullable fields. Valid JSON-Schema unions like "type": ["string","null"] failed at submission with only a generic "result_schema is not supported." It took a live-call debugging session to trace it to array-valued type; we switched to single-type transmit schemas and enforce nullability locally.
  • Idempotency recovery. After that failed submit, retrying with a corrected body hit a 409 "idempotency key was reused". We redesigned keys to derive from the authorized intent plus a monotonic attempt counter, so a genuine retry re-dials while double-clicks still collapse to one call.
  • Trusting call results safely. Real calls fail, go to voicemail, or come back low-confidence. We built fail-closed dispositions: anything ambiguous becomes needs review instead of inventing data.
  • Safe to demo and submit — masked phone numbers everywhere, consent-first scripts, and a no-call fixture default so reviewers can run it without dialing anyone.

Accomplishments that we're proud of

  • It actually completes the task. We placed a real, live call end-to-end that returned a schema-validated result rendered on the dashboard.
  • A genuinely useful vertical — multi-party claim investigation with an aggregated case total and a human sanction step, which nothing in the CALL-E community repo covers.
  • The fraud/consistency engine — turning structured results into explainable risk flags is a real "wow" moment and a real business value-add.
  • Production-minded engineering — idempotent dispatcher, durable webhook inbox, authoritative reconciliation, owner/guest auth, 91 tests, and a one-click Render deploy.

What we learned

  • Structured results + idempotency are what elevate a phone call from a demo into a reliable, retry-safe workflow — the transcript is the least interesting part.
  • Fail-closed beats best-effort in a business context: routing uncertainty to a human is a feature, not a gap.
  • Treating the webhook as a signal, not a source of truth made the whole system crash-safe.
  • Real value comes from what you do around the call — consent, masking, cross-party consistency, and a human decision step.

What's next for ClaimLine

  • Smarter fraud scoring (learned signals + historical patterns) on top of today's rule-based checks.
  • PDF export of the case report and email delivery alongside Slack/Teams.
  • Scheduling & retries with quiet-hours and escalation ladders for unreachable parties.
  • CRM / claims-system connectors (Salesforce, Guidewire) and signed webhooks once CALL-E supports them.
  • Broader language + region coverage and per-line voicemail/IVR strategies.

Built With

Share this project:

Updates

Submission history