> ## Documentation Index
> Fetch the complete documentation index at: https://docs.canary.effectiveai.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Read carrier line results

> Compare reported premiums and underwriting amounts across lines and statement years.

Use line results for reported Part 1B premium and IEE Part 3 underwriting amounts.
Your organization needs the NAIC dataset enabled after accepting its terms.
Use [financials](/guides/carrier-financials) for an annual totals document, or
[state results](/guides/naic-state-results) for jurisdiction-level observations.

## Select a carrier and years

Find the carrier with `GET /api/v2/insurance/carriers?name=Markel` and copy its `id`.
Omit year bounds to discover the latest loaded year, then pin a comparison:

```http theme={null}
GET /api/v2/insurance/carriers/{carrierId}/line-results
GET /api/v2/insurance/carriers/{carrierId}/line-results?from=2023&to=2025&lineFamily=cmp
```

Supply both `from` and `to`, covering at most eight inclusive years. Equal bounds
select one year. `lineFamily=cmp` selects commercial multiple peril using the
appropriate physical codes for each exhibit/year. An exact `line=17.1` selects
only that code; it never expands an obsolete parent. Do not combine `line` and
`lineFamily`. Add `exhibit=part-1b` or `exhibit=iee-part-3` to read one exhibit.

## Interpret the observations

The response contains `from`, `to`, `coverage`, `lineSelections`, `lineResults`
and `nextCursor`. Every item has its own `id`, source `naicCompanyCode`, `year`,
`exhibit`, `line` and `sources`.

| Exhibit | Amounts |
| - | - |
| `part-1b` | `premium`: direct, affiliated/unaffiliated assumed and ceded, and reported net written premium. |
| `iee-part-3` | `underwriting`: premiums, losses, expenses, reserves, other income and pretax profit. |

All money is whole US dollars, including IEE values converted from thousands.
Negative values are retained. Null is unavailable, not zero. Exhibits and source
companies remain separate observations; they are not consolidated or summed.
Line 35 is a total and line 34 aggregate write-ins: do not add them to components.
Individual write-ins, footnotes and calculated ratios are not included.

Check `lineSelections` for family splits and `line.note` for known changes in
meaning. For example, CMP in 2020 uses `05` in Part 1B and `05.1`/`05.2` in IEE.
A matching code or label alone does not prove comparability across years.

`coverage[].available` says whether any rows exist for that exhibit/year before
line filtering. True does not promise every company, line or field is present.
No coverage in the entire range returns `404 statutory_data_not_found`; this does
not prove the carrier did not file. A valid filter with no matches returns an
empty list. Missing observations are not reported zeros.

## Continue or reread an observation

Repeat the original query and limit with `cursor={nextCursor}` until the cursor
is null. Default page size is 50, maximum 200. When bounds were omitted, keep
omitting them: the continuation pins the selected year. Cursors expire after
24 hours and must be restarted if the carrier's source identifiers change.

Copy a returned observation ID to:

```http theme={null}
GET /api/v2/insurance/carriers/{carrierId}/line-results/{id}
```

The item GET returns the same representation. IDs address current loaded values;
reimports can change or remove them. Pagination is a live view, not a snapshot.

Successful calls cost $0.02 plus $0.01 per returned observation. Two exhibits for
the same company/year/line count as two observations. An item GET costs $0.03;
an empty successful page costs $0.02. Failures are not charged; repeating a
successful read is charged again.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.