# lossruns.claims: the loss run, as typed data

> The loss run is the carrier-issued claims history on a policy: carrier, policy, term, valuation date, and every claim with paid, reserve and incurred. A free typed schema, checks and an MCP server for agents.

Source: https://lossruns.claims/ · Updated 2026-10-09

## The document underwriters read first.

A point-in-time report of every claim on a policy, valued as of one date, from the carrier that held it.

The carrier's claims system produces it on request from the insured or their agent of record. Underwriters demand it at every renewal and every market submission, usually three to five years of history per line. Buyers demand it in due diligence. Few markets price a risk on the insured's own account of its losses.

Three numbers carry the report. **Paid** is money the carrier actually issued. The **reserve** is the carrier's booked estimate of what remains to pay on an open claim; a reserve is carrier accounting, not a promise. **Incurred** is paid plus reserve, and it is the figure underwriting prices on. An open claim can move all three after the valuation date, which is why the market always asks for a freshly valued run.

Getting one is a rights question with a clock on it: many states set a statutory deadline for carriers to produce loss runs after a written request, commonly 10 to 30 days. The exact rule varies by state, so confirm your state's before relying on a number.

- **The numbers:** Paid went out. Reserve is booked for the rest. Incurred is both.
- **Issued by:** The carrier that held the policy, from its claims system.
- **Demanded by:** Anyone pricing or buying the account, at every renewal.
- **Valuation:** Every figure is true as of one date. Open claims move after it.
- **Deadline:** Often due 10 to 30 days after a written request, by state.

## One document, thirteen typed fields.

The shape every loss run resolves to, whichever carrier produced it. Free, with no key.

| Field | Type | Meaning | Source |
|---|---|---|---|
| `carrier` | string | The issuing carrier: the only authoritative source. | Carrier claims system |
| `insured` | string | Named insured on the policy. | Carrier claims system |
| `policy_number` | string | The policy the history covers. | Carrier claims system |
| `term_start · term_end` | date | The policy period covered. | Carrier claims system |
| `valuation_date` | date | The date every figure is true as of. | Carrier claims system |
| `claims[].claim_number` | string | The carrier's claim identifier. | Carrier claims system |
| `claims[].date_of_loss` | date | When the loss occurred, not when reported. | Carrier claims system |
| `claims[].cause_of_loss` | string | Peril code: wind_hail, water_damage, theft. | Carrier claims system |
| `claims[].status` | open | closed | Open figures can still move. | Carrier claims system |
| `claims[].paid` | money | Dollars issued to date. | Carrier accounting |
| `claims[].reserve` | money | Booked estimate of what remains to pay. | Carrier accounting |
| `claims[].incurred` | money | Paid plus reserve: what underwriting prices on. | Derived |
| `totals` | object | Sums and counts across the report. | Derived |

### JSON Schema (https://lossruns.claims/schema.json)

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://lossruns.claims/schema.json",
  "title": "LossRun",
  "type": "object",
  "description": "A carrier-issued claims-history report on a policy, valued as of valuation_date. A point-in-time snapshot: open claims can move after it.",
  "required": [
    "carrier",
    "insured",
    "policy_number",
    "term_start",
    "term_end",
    "valuation_date",
    "claims",
    "totals"
  ],
  "properties": {
    "carrier": {
      "type": "string",
      "description": "Issuing carrier. Authoritative only from the carrier that held the policy."
    },
    "insured": {
      "type": "string",
      "description": "Named insured on the policy."
    },
    "policy_number": {
      "type": "string",
      "description": "The policy the history covers."
    },
    "line_of_business": {
      "type": "string",
      "description": "The line it covers, e.g. commercial_property."
    },
    "term_start": {
      "type": "string",
      "format": "date"
    },
    "term_end": {
      "type": "string",
      "format": "date"
    },
    "valuation_date": {
      "type": "string",
      "format": "date",
      "description": "The date every figure is true as of."
    },
    "claims": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/LossRunClaim"
      }
    },
    "totals": {
      "$ref": "#/$defs/LossRunTotals"
    }
  },
  "$defs": {
    "LossRun": {
      "type": "object",
      "description": "A carrier-issued claims-history report on a policy, valued as of valuation_date. A point-in-time snapshot: open claims can move after it.",
      "required": [
        "carrier",
        "insured",
        "policy_number",
        "term_start",
        "term_end",
        "valuation_date",
        "claims",
        "totals"
      ],
      "properties": {
        "carrier": {
          "type": "string",
          "description": "Issuing carrier. Authoritative only from the carrier that held the policy."
        },
        "insured": {
          "type": "string",
          "description": "Named insured on the policy."
        },
        "policy_number": {
          "type": "string",
          "description": "The policy the history covers."
        },
        "line_of_business": {
          "type": "string",
          "description": "The line it covers, e.g. commercial_property."
        },
        "term_start": {
          "type": "string",
          "format": "date"
        },
        "term_end": {
          "type": "string",
          "format": "date"
        },
        "valuation_date": {
          "type": "string",
          "format": "date",
          "description": "The date every figure is true as of."
        },
        "claims": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/LossRunClaim"
          }
        },
        "totals": {
          "$ref": "#/$defs/LossRunTotals"
        }
      }
    },
    "LossRunClaim": {
      "type": "object",
      "required": [
        "claim_number",
        "date_of_loss",
        "status",
        "paid",
        "reserve",
        "incurred"
      ],
      "properties": {
        "claim_number": {
          "type": "string",
          "description": "The carrier's claim identifier."
        },
        "date_of_loss": {
          "type": "string",
          "format": "date",
          "description": "Occurrence date, not report date."
        },
        "cause_of_loss": {
          "type": "string",
          "description": "Peril or cause code, e.g. wind_hail, water_damage, theft."
        },
        "status": {
          "type": "string",
          "enum": [
            "open",
            "closed"
          ],
          "description": "Open means paid, reserve and incurred can still move. Closed with paid = 0 means closed without payment."
        },
        "paid": {
          "type": "number",
          "minimum": 0,
          "description": "USD actually issued to date on the claim."
        },
        "reserve": {
          "type": "number",
          "minimum": 0,
          "description": "The carrier's booked estimate of what remains to pay. Carrier accounting, not a promise."
        },
        "incurred": {
          "type": "number",
          "minimum": 0,
          "description": "paid + reserve. The figure underwriting prices on."
        },
        "coverage": {
          "type": "string",
          "description": "Coverage part the figures fall under, when the carrier splits them."
        }
      }
    },
    "LossRunTotals": {
      "type": "object",
      "required": [
        "paid",
        "reserve",
        "incurred",
        "claim_count",
        "open_count"
      ],
      "properties": {
        "paid": {
          "type": "number"
        },
        "reserve": {
          "type": "number"
        },
        "incurred": {
          "type": "number"
        },
        "claim_count": {
          "type": "integer"
        },
        "open_count": {
          "type": "integer"
        }
      }
    }
  }
}
```

### Example (https://lossruns.claims/example.json)

```json
{
  "carrier": "Meridian Mutual Insurance Co.",
  "insured": "Hargrove Cold Storage LLC",
  "policy_number": "CPP-4471820-03",
  "line_of_business": "commercial_property",
  "term_start": "2025-03-01",
  "term_end": "2026-03-01",
  "valuation_date": "2026-07-01",
  "claims": [
    {
      "claim_number": "CLM-25-118204",
      "date_of_loss": "2025-04-19",
      "cause_of_loss": "wind_hail",
      "status": "closed",
      "paid": 41280,
      "reserve": 0,
      "incurred": 41280
    },
    {
      "claim_number": "CLM-25-142660",
      "date_of_loss": "2025-11-02",
      "cause_of_loss": "water_damage",
      "status": "open",
      "paid": 12500,
      "reserve": 18000,
      "incurred": 30500
    },
    {
      "claim_number": "CLM-26-100317",
      "date_of_loss": "2026-02-08",
      "cause_of_loss": "theft",
      "status": "closed",
      "paid": 0,
      "reserve": 0,
      "incurred": 0
    }
  ],
  "totals": {
    "paid": 53780,
    "reserve": 18000,
    "incurred": 71780,
    "claim_count": 3,
    "open_count": 1
  }
}
```

## What your agent does with it

- **parse** (Read the PDF): A PDF or AL3 file in, a typed LossRun out, from any carrier. Call: `POST /parse`, with an access key.
- **check** (Check the figures): Every claim ties out: incurred is paid plus reserve. Call: `validate_lossrun`.
- **request** (Request a fresh run): A request letter to the carrier, addressed and ready to send. Call: `draft_lossrun_request`.
- **explain** (Explain any field): What a figure means and what moves it after valuation. Call: `explain_lossrun_field`.

## MCP server

Endpoint: https://lossruns.claims/mcp (Streamable HTTP, JSON-RPC over POST; keyless and read-only; nothing is stored).

```json
{ "mcpServers": { "lossruns.claims": { "url": "https://lossruns.claims/mcp" } } }
```

### `get_lossrun_schema`

The JSON Schema (2020-12) for the loss run: every field, its type and what it means. Also served at https://lossruns.claims/schema.json.

Input:

```json
{"type":"object","properties":{}}
```

### `get_lossrun_example`

A complete, valid example LossRun record with fictional values. Also served at https://lossruns.claims/example.json.

Input:

```json
{"type":"object","properties":{}}
```

### `explain_lossrun_field`

What one field of the loss run means, its type, and where the value comes from. Accepts paths like claims[].incurred.

Input:

```json
{"type":"object","required":["field"],"properties":{"field":{"type":"string","description":"A field name or path."}}}
```

### `validate_lossrun`

Check a LossRun record against the schema, then run the document's own checks (sums, dates). Returns valid (the shape matches), consistent (every check passes too), errors (schema) and warnings (checks). Nothing is stored.

Input:

```json
{"type":"object","required":["record"],"properties":{"record":{"type":"object","description":"The LossRun record to check."}}}
```

### `draft_lossrun_request`

Draft a loss-run request letter to the carrier that held the policy, for currently valued runs covering the past N policy years. Returns the subject, the letter text and notes. Nothing is sent; the insured or the agent of record sends it.

Input:

```json
{"type":"object","required":["insured","policy_number","carrier","requester"],"properties":{"insured":{"type":"string","description":"Named insured."},"policy_number":{"type":"string"},"carrier":{"type":"string","description":"The carrier that held the policy."},"years":{"type":"integer","minimum":1,"maximum":10,"description":"Policy years of history to request. Default 5."},"requester":{"type":"string","description":"Who signs the request."},"role":{"type":"string","description":"The signer's role, e.g. named insured, agent of record. Default agent of record."},"deliver_to":{"type":"string","description":"Where the runs should be sent, e.g. a name and mailing or portal address."}}}
```

## HTTP

- `GET https://lossruns.claims/schema.json`: the JSON Schema
- `GET https://lossruns.claims/example.json`: the example record
- `POST https://lossruns.claims/validate`: send a LossRun as JSON; returns `{ valid, consistent, errors, warnings }`
- `POST https://lossruns.claims/parse`: a document in, a LossRun out; requires an access key (`Authorization: Bearer <key>`). Request one at https://lossruns.claims/#access.
- `GET https://lossruns.claims/openapi.json`: OpenAPI 3.1 for all of the above

## Questions

### What is a loss run?

A carrier's report of every claim on a policy for a term, with paid, reserve and incurred, valued as of a stated date. Underwriters ask for one at every renewal.

### How many years do underwriters want?

Usually three to five, valued recently. Open claims move after the valuation date, so markets ask for a fresh run.

### How do I get a loss run?

The insured or the agent of record asks the carrier in writing. Many states set a 10 to 30 day deadline; rules vary. The draft_lossrun_request tool writes the letter.

### Is the schema free?

Yes, with no key: the schema, the example, the checks and the MCP tools. Parsing documents needs an access key.

## Family

- https://api.insure: the insurance industry as one agent-first API
- https://gigs.claims: flat-fee claim files for licensed adjusters
- https://acords.co: loss-notice data fields as a typed model
- https://eobs.claims: the Explanation of Benefits as typed data

Nothing on this site is legal or coverage advice.
