---
title: "SERFF rate-activity index: aggregated by state x line x period"
method: GET
path: "/v1/rates/activity"
---

# SERFF rate-activity index: aggregated by state x line x period

`GET /v1/rates/activity`

## Request

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

Current-row rate filings aggregated by state x `coverage_category` x period. The period basis is received_date for Texas and, since Mississippi's bulletin prints no received_date, the bulletin's publication month for MS -- so cross-state comparison (`states=TX,MS`) covers both states. `share_increasing`/`share_decreasing` are a share of `filings_with_pct` (filings that printed a rate_change_pct), not of `filing_count` -- form/rule filings with no printed percentage count toward filing_count but not toward the shares. $0.10 per query.

## Query parameters

- `states` string
- `line` string
- `from` string
- `to` string
- `granularity` 'month' | 'quarter' | 'year'

## Response `200`

Aggregated activity rows, one per state x coverage_category x period.

- object
  - `states` string[], nullable, required
  - `line` string, nullable, required
  - `granularity` 'month' | 'quarter' | 'year', required
  - `count` number, required
  - `activity` object[], required
    - `state` string, required
    - `line` string, required: coverage_category
    - `period` string, required: e.g. "2026-05", "2026-Q2", or "2026" depending on granularity
    - `filing_count` number, required
    - `filings_with_pct` number, required
    - `avg_rate_change_pct` number, nullable, required
    - `share_increasing` number, nullable, required: Fraction (0-1) of filings_with_pct with rate_change_pct > 0.
    - `share_decreasing` number, nullable, required: Fraction (0-1) of filings_with_pct with rate_change_pct < 0.
    - `max_increase` number, nullable, required: Highest rate_change_pct in the bucket; can be negative if every filing was a decrease.
    - `source` string, required
  - `report_date` string, nullable, required
  - `data_as_of` string, nullable, required: Latest period covered.
  - `source` 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.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.
- `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)
