Curvestone
POST/check

Pre-Screen an Insurance Claim

Triage an inbound claim against your policy book in seconds — classify the claim, assess coverage, flag risks, and identify missing evidence before it reaches a handler.

Who is this for

Claims teams and TPAs who want to auto-triage inbound claims before manual review. Your policy book is configured once via the dashboard — the engine matches the right policies automatically on every subsequent check.

What you'll do

  • 1
    Post the claim description — the engine classifies it and matches your pre-configured policies automatically
  • 2
    Read the initial triage: claim type, coverage assessment, risk flags, and evidence gaps
  • 3
    Submit the missing evidence documents — get a final assessment with full coverage detail

Step 1 — Initial triage

Submit the claim description. The engine classifies the claim type, matches it against your policy book, and returns a triage with evidence requirements — all from a single call.

claims_pre_check.py
python
from curvestone import Agent
agent = Agent() # reads CURVESTONE_API_KEY from env
result = agent.check(
case_type="insurance_claim",
depth="pre_screen",
documents=[
open("claim_description.txt", "rb"),
],
reference="CLM-2026-00419",
)
print(f"Triage: {result.triage}") # green | amber | red
print(f"Type: {result.classification}") # e.g. "Professional Indemnity — Cyber"
print(f"Coverage: {result.findings['coverage']}")
print(f"Missing: {len(result.evidence_gaps)}")

Initial triage response

The engine classifies the claim, matches policies, assesses coverage, and tells you exactly what evidence is still needed.

triage_response.json
json
1{
2 "id": "job_9vTx4mNpR3",
3 "type": "check",
4 "status": "completed",
5 "triage": "amber",
6 "reference": "CLM-2026-00419",
7 "processing_time": "12s",
8 "classification": "Professional Indemnity — Cyber Liability",
9 "checks": [
10 {
11 "name": "Claim Classification",
12 "triage": "green",
13 "detail": "Cyber incident — data breach resulting from ransomware attack"
14 },
15 {
16 "name": "Policy Match",
17 "triage": "green",
18 "detail": "Matched: Professional Indemnity Policy (PI-2024-0892), Section 4.2 — Cyber Incident Endorsement"
19 },
20 {
21 "name": "Coverage Assessment",
22 "triage": "amber",
23 "detail": "Likely covered under cyber endorsement. Sub-limit of £500,000 applies. Estimated loss (£250,000) within sub-limit but excess of £25,000 applicable."
24 },
25 {
26 "name": "Evidence Requirements",
27 "triage": "red",
28 "detail": "3 of 6 required evidence items not yet provided"
29 }
30 ],
31 "evidence_gaps": [
32 { "item": "Incident report from IT security team", "status": "missing" },
33 { "item": "Financial impact assessment", "status": "missing" },
34 { "item": "Timeline of events", "status": "missing" },
35 { "item": "Claim notification form", "status": "provided" },
36 { "item": "Policy schedule", "status": "auto_matched" },
37 { "item": "Incident description", "status": "provided" }
38 ],
39 "flags": [
40 { "severity": "high", "message": "Late notification — incident occurred 18 days before report" },
41 { "severity": "medium", "message": "Estimated loss (£250,000) exceeds 50% of sub-limit" }
42 ],
43 "findings": {
44 "coverage": "partially_covered",
45 "policy_section": "Section 4.2 — Cyber Incident Endorsement",
46 "sub_limit": 500000,
47 "estimated_loss": 250000,
48 "excess_applicable": 25000,
49 "notification_deadline": "2026-01-29T00:00:00Z"
50 },
51 "cost": "£1.60"
52}

Step 2 — Submit evidence

Once the handler has gathered the missing documents, submit them referencing the original job. The engine re-evaluates coverage with the full evidence set.

submit_evidence.py
python
from curvestone import Agent
agent = Agent()
result = agent.check(
case_type="insurance_claim",
depth="full_check",
job_id="job_9vTx4mNpR3", # references the initial triage
documents=[
open("it_security_report.pdf", "rb"),
open("financial_impact.xlsx", "rb"),
open("incident_timeline.pdf", "rb"),
],
reference="CLM-2026-00419",
)
print(f"Triage: {result.triage}")
print(f"Coverage: {result.findings['coverage']}")
print(f"Gaps: {len(result.evidence_gaps)}") # 0 — all provided

Final assessment

With all evidence provided, the engine delivers a complete coverage assessment ready for the claims handler.

final_assessment.json
json
1{
2 "id": "job_2wRy8kLpS5",
3 "type": "check",
4 "status": "completed",
5 "triage": "amber",
6 "reference": "CLM-2026-00419",
7 "processing_time": "38s",
8 "classification": "Professional Indemnity — Cyber Liability",
9 "checks": [
10 {
11 "name": "Claim Classification",
12 "triage": "green",
13 "detail": "Cyber incident — data breach resulting from ransomware attack"
14 },
15 {
16 "name": "Policy Match",
17 "triage": "green",
18 "detail": "Matched: PI-2024-0892, Section 4.2 — Cyber Incident Endorsement"
19 },
20 {
21 "name": "Coverage Assessment",
22 "triage": "green",
23 "detail": "Covered under cyber endorsement. Financial impact assessment confirms loss of £243,800 within £500,000 sub-limit."
24 },
25 {
26 "name": "Evidence Requirements",
27 "triage": "green",
28 "detail": "All 6 required evidence items provided"
29 },
30 {
31 "name": "Liability Indicators",
32 "triage": "green",
33 "detail": "No exclusion clauses triggered. Policyholder followed reasonable security protocols per IT report."
34 },
35 {
36 "name": "Financial Summary",
37 "triage": "green",
38 "detail": "Net claim value £218,800 after £25,000 excess"
39 }
40 ],
41 "evidence_gaps": [],
42 "flags": [
43 { "severity": "high", "message": "Late notification — incident occurred 18 days before report. Insurer discretion may apply." }
44 ],
45 "findings": {
46 "coverage": "covered",
47 "policy_section": "Section 4.2 — Cyber Incident Endorsement",
48 "sub_limit": 500000,
49 "confirmed_loss": 243800,
50 "excess_applicable": 25000,
51 "net_claim_value": 218800,
52 "notification_deadline": "2026-01-29T00:00:00Z",
53 "reserving_recommendation": 243800
54 },
55 "cost": "£3.20"
56}

What happens

Automatic policy matching

Your policy book is configured once via the dashboard. When a claim arrives, the engine classifies the incident type and automatically matches it against the relevant policies, endorsements, and sub-limits — no need to specify which policy applies per request.

Two-phase workflow

The first call with pre_screen depth gives you an instant triage and tells the handler exactly what evidence to collect. The second call with full_check and the original job_id re-evaluates with the complete evidence set and returns a final coverage assessment.

Evidence gap detection

The evidence_gaps array lists every document the engine expects for this claim type, with a status of provided, auto_matched (from your policy book), or missing. This lets the handler chase documents immediately rather than discovering gaps mid-review.

Risk flags

High and medium severity flags surface issues like late notification, high-value claims relative to sub-limits, or potential exclusion triggers. These are designed for immediate handler attention before the claim progresses further.

GreenAll clear. No issues found.
AmberReview needed. Evidence or risk flag requires attention.
RedCritical gaps or exclusions. Escalation required.