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 aresult_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_schemarejected 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-valuedtype; 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
- call-e
- docker
- mcp
- render
- slack
- sqlite
- stripe
- typescript

Log in or sign up for Devpost to join the conversation.