Insurance claims
Check a claim against the supplied policy and history, then show a claims reviewer which amounts, dates and explanations still need attention.
For claims operations, special investigation units and third-party administrators.
Where it fits in your workflow
Use this when a new claim enters assessment or a claim-payment decision is ready for review. The claim checks cover policy period and status, stated perils, limits, item totals, reporting time, related claims and claimant/provider identifiers. Payment decisions have their own checks for the assessed amount, payee and independent approval.
- Bring the policy to the claim. Supply the policy version and status relevant to the loss date, including perils, deductibles, limits and reporting window. Match its currency to the claim; do not assume the service retrieves a policy from a policy number.
- Review both the numbers and the story. The engine checks dates and amounts directly. Whether a narrative describes the peril, and whether the claimed items fit that loss, are separate judgment questions with explicit qualification requirements.
- Check the payment as its own decision. After assessment, submit a pay_claim item with the claim, claimant and provider records. Review the amount net of deductible, the receiving account and the relationship between adjuster and approver before releasing funds in your system.
What to send
- Claim and loss. Claim ID, policy and claimant IDs, loss and reporting dates, claimed peril, currency, amount, itemized losses and the claimant’s narrative.
- Applicable policy. Coverage period, status and status date when needed, covered perils, peril limits, sum insured, deductible and reporting window.
- Parties and history. Claimant and provider identifiers needed for comparison, plus related claim records. Provide only the identifiers needed for the checks you intend to run.
- Payment decision. For pay_claim, supply the assessed claim, amount paid, payee details and approval information. A claim verification alone does not verify a later payment.
Use POST /api/v1/verify for one item or POST /api/v1/audits for a population with shared context. See the request structure.
A water-damage claim with an item to clarify
The recorded claim totals $6,840.00 after a kitchen hose failure. It includes flooring, drying equipment, kitchen units and a $1,500.00 garden patio furniture set. The policy covers water damage, has a $500.00 deductible and a $25,000.00 water-damage limit. The loss was reported two days after it occurred.
The recorded result is uncertain. Seven direct checks hold, including the item sum, policy period, reporting window and limit. The narrative/peril and item-consistency questions remain unqualified. A reviewer can follow up on how the patio furniture relates to the reported kitchen and hallway damage; the sample does not establish that the furniture is invalid or that the claim should be denied.
Recorded verdict: uncertain. The table below comes from the saved response.
| Check | Recorded outcome | Facts or explanation |
|---|---|---|
| The loss date falls inside the policy period, and the policy was active on that date. | holds | {"start_date": "2026-03-01", "end_date": "2027-02-28", "status": "active"} |
| The claimed peril is one the policy covers. | holds | {"peril": "water_damage"} |
| The amount claimed, net of the deductible, is within the limit for the peril. | holds | {"limit": "25000.00", "limit_source": "peril_limit", "deductible": "500.00", "net": "6340.00"} |
| The claimed items add up to the amount claimed. | holds | {"items_total": "6840.00", "amount_claimed": "6840.00", "item_count": 4} |
| The claim was reported within the policy's reporting window after the loss. | holds | {"days_to_report": 2, "window_days": 30} |
| No other claim on the policy for the same peril has a loss within 3 days and an amount within 10%. | holds | {"compared_with": 0} |
| The claimant and the provider share no bank account, phone, email or address. | holds | {"compared": ["bank_account", "phone", "email", "address"]} |
| The loss narrative describes the claimed peril. | unqualified | This question is not yet qualified for the running model; its answer is recorded but decides nothing. |
| The claimed items are consistent with the loss described. | unqualified | This question is not yet qualified for the running model; its answer is recorded but decides nothing. |
Recorded from the production service on 2026-10-03T04:20:20Z. It was recorded with insurance-claims@1; a request naming insurance-claims now runs insurance-claims@2, so its test labels and configuration differ. The use-case page lists what changed between versions. This page displays a saved example, not a new verification request. Sensitive identifiers are masked in public examples.
Inspect the request and full recorded response
Request
{
"use_case": "insurance-claims",
"item": {
"type": "claim",
"id": "CLM-58213",
"data": {
"policy_id": "POL-1182",
"claimant_id": "CL-77",
"provider_id": "PRV-14",
"loss_date": "2026-08-14",
"reported_date": "2026-08-16",
"peril": "water_damage",
"amount_claimed": "6840.00",
"currency": "USD",
"items": [
{
"description": "Replace water-damaged laminate flooring in kitchen and hallway",
"amount": "2950.00"
},
{"description": "Drying equipment hire, five days", "amount": "890.00"},
{"description": "Replace swollen base units under the sink", "amount": "1500.00"},
{"description": "Garden patio furniture set", "amount": "1500.00"}
],
"narrative": "Overnight the braided hose feeding the kitchen sink tap split. In the morning there was water across the kitchen and the hallway. The laminate floor has lifted and the base units under the sink have swollen. A drying company ran dehumidifiers for five days.",
"assessed_amount": "5340.00",
"adjuster_id": "ADJ-9"
}
},
"context": {
"records": {
"policy": [
{
"id": "POL-1182",
"holder_id": "CL-77",
"product": "home",
"inception_date": "2023-03-01",
"start_date": "2026-03-01",
"end_date": "2027-02-28",
"status": "active",
"covered_perils": ["fire", "storm", "water_damage", "theft", "vandalism", "glass"],
"limits": {"water_damage": "25000.00", "theft": "10000.00"},
"deductible": "500.00",
"sum_insured": "350000.00",
"reporting_window_days": 30,
"currency": "USD"
}
],
"claimant": [
{
"id": "CL-77",
"name": "Dana Whitfield",
"phone": "(masked)",
"email": "(masked)",
"address": "(masked)",
"bank_account": "(masked)"
}
],
"provider": [
{
"id": "PRV-14",
"name": "Dry Right Restoration",
"kind": "restoration",
"phone": "(masked)",
"email": "(masked)",
"address": "(masked)",
"bank_account": "(masked)"
}
],
"claim": []
}
}
}Response
{
"id": "ver_a353206b5024dd1e",
"object": "verification",
"created_at": "2026-10-03T04:20:20Z",
"use_case": "insurance-claims@1",
"item": {"type": "claim", "id": "CLM-58213"},
"verdict": "uncertain",
"probability_true": "0.0000",
"probability_basis": "calibrated",
"certainty": null,
"undecided": [
{
"assertion": "narrative_matches_peril",
"reason": "unqualified",
"message": "This question is not yet qualified for the running model; its answer is recorded but decides nothing."
},
{
"assertion": "items_consistent",
"reason": "unqualified",
"message": "This question is not yet qualified for the running model; its answer is recorded but decides nothing."
}
],
"assertions": [
{
"id": "policy_in_force",
"test": "procedure:policy_in_force@1",
"outcome": "holds",
"error_bound": "0",
"facts": {"start_date": "2026-03-01", "end_date": "2027-02-28", "status": "active"},
"evidence": [
"/item/data/loss_date",
"/context/records/policy/0/start_date",
"/context/records/policy/0/end_date",
"/context/records/policy/0/status",
"/context/records/policy/0/status_date"
]
},
{
"id": "peril_covered",
"test": "procedure:peril_covered@1",
"outcome": "holds",
"error_bound": "0",
"facts": {"peril": "water_damage"},
"evidence": ["/item/data/peril", "/context/records/policy/0/covered_perils"]
},
{
"id": "within_limit",
"test": "procedure:within_limit@1",
"outcome": "holds",
"error_bound": "0",
"facts": {
"limit": "25000.00",
"limit_source": "peril_limit",
"deductible": "500.00",
"net": "6340.00"
},
"evidence": [
"/item/data/amount_claimed",
"/item/data/peril",
"/context/records/policy/0/covered_perils",
"/context/records/policy/0/limits/water_damage",
"/context/records/policy/0/sum_insured",
"/context/records/policy/0/deductible"
]
},
{
"id": "items_sum",
"test": "procedure:items_sum@1",
"outcome": "holds",
"error_bound": "0",
"facts": {"items_total": "6840.00", "amount_claimed": "6840.00", "item_count": 4},
"evidence": ["/item/data/items", "/item/data/amount_claimed"]
},
{
"id": "reported_in_time",
"test": "procedure:reported_in_time@1",
"outcome": "holds",
"error_bound": "0",
"facts": {"days_to_report": 2, "window_days": 30},
"evidence": [
"/item/data/loss_date",
"/item/data/reported_date",
"/context/records/policy/0/reporting_window_days"
]
},
{
"id": "not_duplicate",
"test": "procedure:not_duplicate@1",
"outcome": "holds",
"error_bound": "0",
"facts": {"compared_with": 0},
"evidence": [
"/item/data/policy_id",
"/item/data/peril",
"/item/data/loss_date",
"/item/data/amount_claimed"
]
},
{
"id": "claimant_independent_of_provider",
"test": "procedure:claimant_independent_of_provider@1",
"outcome": "holds",
"error_bound": "0",
"facts": {"compared": ["bank_account", "phone", "email", "address"]},
"evidence": [
"/item/data/claimant_id",
"/item/data/provider_id",
"/context/records/claimant/0/bank_account",
"/context/records/provider/0/bank_account",
"/context/records/claimant/0/phone",
"/context/records/provider/0/phone",
"/context/records/claimant/0/email",
"/context/records/provider/0/email",
"/context/records/claimant/0/address",
"/context/records/provider/0/address"
]
},
{
"id": "narrative_matches_peril",
"test": "question:narrative_matches_peril@1",
"outcome": "unqualified",
"message": "This question is not yet qualified for the running model; its answer is recorded but decides nothing.",
"answer": {"p_yes": "0.942824"},
"evidence": ["/item/data/peril", "/item/data/narrative"]
},
{
"id": "items_consistent",
"test": "question:items_consistent@1",
"outcome": "unqualified",
"message": "This question is not yet qualified for the running model; its answer is recorded but decides nothing.",
"answer": {"p_yes": "0.008637"},
"facts_given": {
"item_count": 4,
"peril": "escape of water from pipes, tanks or appliances"
},
"evidence": ["/item/data/narrative", "/item/data/items"]
}
],
"indicators": [],
"risk": {
"points": "0.00",
"probability": "0.0100",
"basis": "prior",
"base_rate": "0.01",
"reasons": []
},
"scope": {
"stratum": null,
"evidence": "supplied",
"skipped": [],
"certainty_target": "0.995",
"deterministic_only_verdict": "uncertain"
},
"configuration": "cfg_9c9005a39bbd",
"input_sha256": "7d39eacb97bbb6a55e62862e27e5cf85ecf379a8aca889fbf91841f12d8a3ec6",
"usage": {"questions_asked": 2, "questions_cached": 0, "model_ms": 3078}
}Supported records and checks
These definitions are generated from the registered use-case pack. A procedure computes a result from the supplied data; a question can decide a check only when it is qualified for the model and meets its thresholds. The descriptions name the checks; they do not authenticate the underlying business events. Supplied fields, defaults and comparison populations determine what each procedure can establish. Risk weights help prioritize review and are not probabilities.
claim: An insurance claim against a policy.pay_claim: A decision to pay a claim.
claim
An insurance claim against a policy. Required data fields: policy_id, claimant_id, loss_date, reported_date, peril, amount_claimed, currency, items, narrative.
| Assertion | Requires | Decided by | Risk weight |
|---|---|---|---|
policy_in_force | The loss date falls inside the policy period, and the policy was active on that date. | procedure | 3.0 |
peril_covered | The claimed peril is one the policy covers. | procedure | 2.0 |
within_limit | The amount claimed, net of the deductible, is within the limit for the peril. | procedure | 1.0 |
items_sum | The claimed items add up to the amount claimed. | procedure | 1.0 |
reported_in_time | The claim was reported within the policy's reporting window after the loss. | procedure | 0.8 |
not_duplicate | No other claim on the policy for the same peril has a loss within 3 days and an amount within 10%. | procedure | 2.5 |
claimant_independent_of_provider | The claimant and the provider share no bank account, phone, email or address. | procedure | 3.0 |
narrative_matches_peril | The loss narrative describes the claimed peril. | procedure, then question narrative_matches_peril@1 if undecided | 2.5 |
items_consistent | The claimed items are consistent with the loss described. | procedure, then question items_consistent@1 if undecided | 1.5 |
| Indicator | Fires when | Family | Weight |
|---|---|---|---|
early_claim@1 | The loss falls within 30 days of the policy's inception. | policy_age | 1.2 |
frequent_claimant@1 | The claimant has 3 or more claims within 12 months. | claim_history | 1.0 |
provider_concentration@1 | The provider appears on claims from at least 5 unrelated claimants within 90 days. | provider | 1.0 |
round_amount@2 | The amount claimed is a multiple of the unit for its currency and at least the minimum for it (default: 100.00 and 500.00 in USD, EUR and GBP). | amount_shape | 0.4 |
near_limit@1 | The amount net of the deductible is within 5% at or below the limit. | amount_shape | 0.5 |
late_report@1 | Reported more than half-way through the reporting window, and within it. | timing | 0.3 |
pay_claim
A decision to pay a claim. Required data fields: actor, at, on, outcome, amount, currency, payee.
| Assertion | Requires | Decided by | Risk weight |
|---|---|---|---|
payment_within_assessed | The amount paid does not exceed the assessed amount net of the deductible. | procedure | 2.0 |
payee_matches | The payment went to the claimant or the provider on the claim, and to their account on file. | procedure | 3.0 |
approver_independent | The approver is not the adjuster who assessed the claim. | procedure | 1.5 |
Judgment questions and qualification
| Question | Asks | Status | Holdout error bounds |
|---|---|---|---|
items_consistent@1 | Are the claimed items consistent with the loss described? | no published qualification | – |
narrative_matches_peril@1 | Does this loss narrative describe the claimed peril? | no published qualification | – |
The table describes published evaluation evidence. For the qualification attached to the running service, inspect this use case’s live definition. A model answer can be recorded without deciding a check. How qualification works.
Scope and limits
- The engine reads the structured policy terms supplied in the request. It does not fetch a policy, establish the authenticity of supporting documents or resolve every exclusion in a policy wording.
- A payment account match compares supplied party and account records. It does not independently establish who owns the account or whether the instruction to change it was authentic.
- A match between claimant and provider identifiers is evidence for the specified independence check, not a general conclusion about intent. Missing identifiers may leave the comparison unresolved.
- The result concerns the listed checks and supplied scope. Coverage, settlement and investigation decisions remain in your claims workflow.
A true verdict means all applicable, unskipped checks hold within the decision gates; false means at least one qualifying failure decided the item. Other assertions can remain unresolved even with a false verdict. An uncertain verdict means the evidence and decision gates do not support a decided result. Review the assertion outcomes and evidence before taking a business action. Read the decision method.
Published evaluation results
These measurements use synthetic populations with generator-stated truth. Coverage is the share receiving true or false verdicts, not measured accuracy on your records. Read the metrics and their limits.
Results for insurance-claims@2.
| Configuration | Items | Decided coverage | Coverage gain (pp) | Uncertain per 1,000 | True, rules: errors / n | True, with model | False, rules | False, with model |
|---|---|---|---|---|---|---|---|---|
| Rules only | 4853 | 46.8% | 0.0 pp | 531.6 | 0 / 1763, ≤ 0.17% | – | 0 / 510, ≤ 0.59% | – |
With smalldecide 00607d88f6e1:float32-cpu | 4853 | 46.8% | 0.0 pp | 531.6 | 0 / 1763, ≤ 0.17% | – | 0 / 510, ≤ 0.59% | – |
Faults
| Fault | Items | False verdicts | False or uncertain |
|---|---|---|---|
| diverted_account | 35 | 100.0% | 100.0% |
| duplicate_claim | 80 | 100.0% | 100.0% |
| items_inconsistent | 44 | 0.0% | 100.0% |
| items_total_mismatch | 39 | 100.0% | 100.0% |
| loss_outside_period | 41 | 100.0% | 100.0% |
| narrative_mismatch | 41 | 0.0% | 100.0% |
| over_limit | 40 | 100.0% | 100.0% |
| overpayment | 34 | 100.0% | 100.0% |
| peril_not_covered | 46 | 100.0% | 100.0% |
| policy_lapsed | 40 | 100.0% | 100.0% |
| provider_link | 33 | 100.0% | 100.0% |
| reported_late | 41 | 100.0% | 100.0% |
| self_approved | 43 | 100.0% | 100.0% |
| wrong_payee | 38 | 100.0% | 100.0% |
Look-alikes
| Look-alike | Items | False verdicts | Uncertain |
|---|---|---|---|
| account_formatting | 16 | 0.0% | 0.0% |
| amount_at_limit | 18 | 0.0% | 100.0% |
| approver_other_adjuster | 20 | 0.0% | 0.0% |
| cancelled_after_loss | 18 | 0.0% | 100.0% |
| deductible_absorbs_excess | 18 | 0.0% | 100.0% |
| loss_on_policy_boundary | 17 | 0.0% | 100.0% |
| paid_above_claimed | 19 | 0.0% | 0.0% |
| paid_to_provider | 20 | 0.0% | 0.0% |
| provider_same_street | 21 | 0.0% | 100.0% |
| repeat_claim_later | 18 | 0.0% | 100.0% |
| repeat_claim_other_peril | 18 | 0.0% | 100.0% |
| reported_on_last_day | 16 | 0.0% | 100.0% |
| round_amount_itemized | 18 | 0.0% | 100.0% |
Holdout seeds 101, 102, 103, 104, 105, 106, 107, 108, 109, 110; dataset SHA-256 92adb019c9a07cb6….
Run identity and dataset
| Configuration | Recorded at | Source commit | Model artifact SHA-256 | Dtype |
|---|---|---|---|---|
| deterministic_only | 2026-10-07T04:08:41+00:00 | c7df92be8350d7e6afb7e5b6be60917e7e872b10 | none | none |
| smalldecide:00607d88f6e1:float32-cpu | 2026-10-07T04:12:53+00:00 | fda990f7052cbaf109483fea678cde178c92900f | 00607d88f6e152b471e557f6a814471ab5a6faf900cae427d8b3d50d4614be17 | float32-cpu |
Dataset SHA-256: 92adb019c9a07cb60a1b2b6f5d520020fea866ed529b3d8d75aed92334c277f9.
Versions
A request naming insurance-claims runs the current version. Name a version, such as insurance-claims@1, to keep the checks you integrated against; a superseded version stays served unchanged. Test labels in a response carry the version that ran them.
| Version | What it checks differently |
|---|---|
insurance-claims@2 | The current version, used when a request names insurance-claims alone. The round-amount indicator compares a claim's amount only with a unit and a minimum in its own currency, since no exchange rate is assumed: round_units and round_minimums map a three-letter currency code to an amount, defaulting to 100.00 and 500.00 in USD, EUR and GBP, so a claim in a currency they do not list, such as JPY, fires no round-amount indicator. The two maps must list the same currencies. Every other check is version 1's: limits, deductibles, duplicates and payments were already compared only in the claim's currency. |
insurance-claims@1 | Superseded, and still served unchanged to requests that name insurance-claims@1. One round_unit (100.00) and one round_minimum (500.00) apply to a claim in any currency. |
Schemas and integration
Every item, record and reference schema is at GET /api/v1/use-cases/insurance-claims.
Supported context record types: policy, claimant, provider, claim, pay_claim.
Start with a reviewable sample
Begin with one product and a consistent policy export. Review ordinary claims, out-of-period losses, missing evidence and ambiguous narratives before using the results to prioritize a larger review queue.
Try the console · API quickstart · Full API reference