---
title: "Top carriers by direct premiums written for a jurisdiction/scope and line"
method: GET
path: "/v1/carriers"
---

# Top carriers by direct premiums written for a jurisdiction/scope and line

`GET /v1/carriers`

## Request

- Base URL: `https://api.querylines.com`
- URL: `https://api.querylines.com/v1/carriers`
- Auth: none declared

Source: free annual NAIC Market Share Report -- top-125 countrywide ('us'/'us_alien' scope) or top-10 per jurisdiction ('state' scope) ONLY; absence from the results does NOT mean a carrier writes no business there. Rows mix entity_kind 'group' and 'company' in one ranking (the report's own methodology) -- there is no entity filter param; every row is tagged with its entity_kind. `line` defaults to 'total_all_lines'; passing a category (e.g. 'property') expands to every matching line_code, one block per line in `lines`. HHI is not computable from a truncated table -- concentration is CR4/CR10 (cumulative_market_share at ranks 4/10), independent of `limit`. $0.10 per query.

## Query parameters

- `state` string
- `scope` 'us' | 'us_alien'
- `line` string
- `year` integer
- `limit` integer

## Response `200`

One block per resolved line_code (a single-element array unless `line` was a category).

- object
  - `state` string, nullable, required
  - `scope` 'state' | 'us' | 'us_alien', required
  - `line` string, required: Echoes the `line` query param (a line_code or category).
  - `year` number, nullable, required
  - `limit` number, required
  - `lines` object[], required
    - `line` string, required
    - `line_name` string, required
    - `comparability_note` string, nullable, required
    - `scope` 'state' | 'us' | 'us_alien', required
    - `state` string, nullable, required
    - `year` number, required
    - `carriers` object[], required
      - `rank` number, required
      - `entity_kind` 'group' | 'company', required: Groups (NAIC group code) and standalone companies (cocode) are ranked in ONE table, per the report's own methodology.
      - `naic_code` string, nullable, required
      - `name` string, nullable, required
      - `dpw` number, nullable, required: Direct premiums written, USD.
      - `dpe` number, nullable, required: Direct premiums earned, USD.
      - `loss_ratio` number, nullable, required: Percent, 0-100.
      - `lcc_ratio` number, nullable, required: Loss & cost containment ratio, percent.
      - `market_share` number, nullable, required: Percent, 0-100.
      - `cumulative_market_share` number, nullable, required: Running cumulative percent through this rank.
      - `yoy_dpw_pct` number, nullable, required: Year-over-year dpw percent change; null when the prior year has no row for this entity.
      - `share_delta_pts` number, nullable, required: market_share this year minus last year, in percentage points; null when the prior year has no row.
    - `total` object, nullable, required: The printed STATE TOTAL / INDUSTRY TOTAL row -- the full-market denominator. null if the year/scope has no data.
      - `dpw` number, nullable, required
      - `dpe` number, nullable, required
      - `loss_ratio` number, nullable, required
      - `lcc_ratio` number, nullable, required
    - `all_other` object, nullable, required: Synthesized residual (total minus the printed top-N) -- top-N + all_other = 100%. null if the year/scope has no data.
      - `dpw` number, nullable, required
      - `market_share` number, nullable, required
    - `concentration` object, required: HHI is not computable from a truncated top-N table; CR4/CR10 are read off cumulative_market_share instead, independent of `limit`.
      - `cr4` number, nullable, required: cumulative_market_share at rank 4; null if the table has fewer than 4 ranks.
      - `cr10` number, nullable, required: cumulative_market_share at rank 10; null if the table has fewer than 10 ranks.
  - `report_date` string, nullable, required
  - `data_as_of` string, nullable, required: The resolved data year, as a string.
  - `source` string, nullable, required
  - `coverage_note` string, required: Top-125 countrywide / top-10 per jurisdiction ONLY -- absence from these results does NOT mean a carrier writes no business there. Repeated verbatim on every response (see GET /v1/carriers/lines).

## Other responses

- `400`: Invalid query parameters.
- `402`: Payment required (x402). Returned when the x402 payment gate is enabled (PAY_TO_ADDRESS configured) and the request carries no valid payment. The full payment challenge (price/network/payTo/asset) is carried in the base64-encoded PAYMENT-REQUIRED response header (see the x402 spec), not the JSON body -- the body is `{}` for API clients. Price for this route: $0.10. Retry with a signed payment per x402 (USDC on Base mainnet); on success the response carries a PAYMENT-RESPONSE header with settlement info. When PAY_TO_ADDRESS is unset (kill switch off), this route is free and never returns 402.
- `404`: Unknown state or coverage line.
- `500`: Internal error.

---

[API](https://skmtc.dev/querylines/apis/querylines-api.md) · [All operations](https://skmtc.dev/querylines/apis/querylines-api/llms.txt) · [OpenAPI document](https://skmtc.dev/querylines/apis/querylines-api/revisions/4afb6c3e2b1f?raw)
