---
title: "Premium x rate-activity join: E&S premium vs admitted-market rate filings, one axis"
method: GET
path: "/v1/rates/vs-premium"
---

# Premium x rate-activity join: E&S premium vs admitted-market rate filings, one axis

`GET /v1/rates/vs-premium`

## Request

- Base URL: `https://api.querylines.com`
- URL: `https://api.querylines.com/v1/rates/vs-premium`
- Auth: none declared

Joins E&S/surplus-lines premium (with YoY growth) against admitted-market SERFF rate-filing activity on the shared coverage category (coverage_lines.category == serff_rate_filings.coverage_category), period-aligned and optionally lag-shifted. The 0013 rate dataset exists as a leading indicator of E&S growth; this endpoint surfaces that relationship WITHOUT asserting it -- it returns both families aligned and lets you shift the rate series with `lag`. Rate-filing data covers CA, MS, TX, and WA; the join is most useful where the state also has E&S premium (CA has monthly premium, the richest join; TX premium by coverage category is annual; WA premium is annual), so the category-level join (line=<category>) is year-granularity; the all-lines join (line=all) is also available monthly/quarterly (rate activity summed across categories). $0.50 per query.

## Query parameters

- `state` string
- `line` string
- `from` string
- `to` string
- `granularity` 'month' | 'quarter' | 'year'
- `lag` integer
- `report_date` string

## Response `200`

Premium points, each aligned to the rate-activity bucket at period - lag.

- object
  - `state` string, required
  - `line` string, required
  - `granularity` 'month' | 'quarter' | 'year', required
  - `lag` number, required
  - `data` object[], required
    - `period` string, required: premium period, e.g. "2024", "2024-Q2", or "2024-05"
    - `premium` number, nullable, required
    - `premium_yoy_pct` number, nullable, required: E&S premium change vs the same period one year earlier.
    - `rate_period` string, required: the rate-activity period after the lag shift (period - lag).
    - `filing_count` number, nullable, required
    - `filings_with_pct` number, nullable, required
    - `avg_rate_change_pct` number, nullable, required: admitted-market average filed rate change % in rate_period.
    - `share_increasing` number, nullable, required: Fraction (0-1) of filings_with_pct that filed an increase.
    - `max_increase` number, nullable, required
  - `premium_source` string, nullable, required
  - `rate_source` string, nullable, required
  - `report_date` string, nullable, required
  - `data_as_of` string, nullable, required
  - `coverage_note` string, required

## 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.50. 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)
