---
title: "Cross-jurisdiction comparison — what does every state say about X?"
method: GET
path: "/us-law/compare"
---

# Cross-jurisdiction comparison — what does every state say about X?

`GET /us-law/compare`

## Request

- Base URL: `https://ai-law-tracker.com/api/v1`
- URL: `https://ai-law-tracker.com/api/v1/us-law/compare`
- Auth: one of:
  - none
  - API key in header `X-API-Key`
  - HTTP bearer

One row per jurisdiction holding law in a branch or subcategory, with record counts, how many are in force, the split by instrument type, the latest effective date and when we last verified it. This is the answer you would otherwise have to page the entire 31,867-record corpus to assemble.

COUNTING. `records` counts EVERY domain assignment, primary or secondary; `records_primary` counts only records whose PRIMARY classification is this branch. Both are reported because they differ a lot (health_law: 2,852 vs 1,942) and a comparison built on primary assignments alone would report that a state has no privacy law when its privacy statutes happen to be filed under consumer protection first.

TIER. Ordinary single-field filtering on /us-law is open at every tier including keyless — discovery is never the thing that is metered. This is the assembled answer, so below Pro it returns a real 5-jurisdiction SAMPLE with the true totals stated in meta, and the full table at Pro and above on either product ladder.

## Query parameters

- `branch` string
- `domain` string
- `jurisdiction_level` 'federal' | 'state'
- `in_force_only` boolean

## Response `200`

One row per jurisdiction, most records first.

- object
  - `api_version` string
  - `data` object[]
    - `jurisdiction_level` string
    - `jurisdiction_slug` string
    - `jurisdiction_name` string
    - `branch_id` string
    - `branch_label` string
    - `records` integer
    - `records_primary` integer
    - `in_force` integer
    - `statutes` integer
    - `regulations` integer
    - `other_instruments` integer
    - `latest_effective_date` string, date, nullable
    - `last_verified_at` string, date-time, nullable
  - `meta` object
    - `axis` 'branch' | 'domain'
    - `id` string
    - `jurisdictions_total` integer
    - `jurisdictions_returned` integer
    - `records_total` integer
    - `records_total_primary_only` integer
    - `access` 'sample' | 'full'
    - `sampled` boolean
    - `notice` string, nullable
    - `upgrade` string, nullable
  - `attribution` string

## Other responses

- `400`: Neither branch nor domain given, or both.
- `403`: tier_upgrade_required.
- `429`: Rate limited, or record_budget_exceeded.

---

[API](https://skmtc.dev/ai-law-tracker/apis/ai-law-tracker-public-laws-api.md) · [All operations](https://skmtc.dev/ai-law-tracker/apis/ai-law-tracker-public-laws-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ai-law-tracker/apis/ai-law-tracker-public-laws-api/revisions/25403268a853?raw)
