---
title: "AI enforcement actions + litigation (agency actions and civil dockets; newest-first) — Enterprise only"
method: GET
path: "/enforcement"
---

# AI enforcement actions + litigation (agency actions and civil dockets; newest-first) — Enterprise only

`GET /enforcement`

## Request

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

AI-related regulatory enforcement (FTC/DOJ/SEC/state AG actions, etc.) and civil litigation (federal court dockets), over the same six AET fields — agency, respondent, allegation, outcome, penalty, statutory basis — plus forum for litigation rows. `change_type` tells the two lanes apart. ONLY status published rows are ever returned: every pending or approved draft stays internal, so an empty data[] with meta.total: 0 is the expected response until a story is actually published. TIER-GATING: Enterprise-only. Anonymous, Free, and every self-serve paid tier (Developer $29 / Pro $99 / Business $299) get a hard 403 tier_upgrade_required — there is no teaser and no partial access below Enterprise. Same hard-gate pattern as /v1/changes, /v1/feed, and /v1/webhooks.

## Query parameters

- `scope` 'state' | 'federal' | 'eu' | 'global'
- `jurisdiction` string
- `q` string
- `agency` string
- `change_type` 'enforcement' | 'litigation'
- `date_from` string, date
- `date_to` string, date
- `limit` integer
- `offset` integer

## Response `200`

A page of enforcement/litigation items (Enterprise callers only).

- object
  - `api_version` string
  - `data` EnforcementItem[]
    - `id` string, uuid
    - `change_type` 'enforcement' | 'litigation': 'enforcement' = an agency action; 'litigation' = a civil docket.
    - `title` string, nullable
    - `agency` string, nullable: WHO acted — the regulator/AG (null on a private litigation matter with no agency).
    - `scope` 'state' | 'federal' | 'eu' | 'global'
    - `jurisdiction` object
      - `slug` string, nullable
      - `name` string, nullable
    - `date` string, date-time, nullable: published_at, else approved_at, else the draft's created_at.
    - `source_url` string, nullable: The official source: the agency's release, or the court docket.
    - `respondent` string, nullable: AGAINST WHOM the action/suit is brought.
    - `allegation` string, nullable: WHAT was alleged.
    - `outcome` string, nullable: HOW it ended (e.g. settlement, suit filed, pending).
    - `penalty` string, nullable: WHAT it cost, verbatim from the source.
    - `statutory_basis` string, nullable: UNDER WHICH LAW, verbatim from the source.
    - `forum` string, nullable: The court, for a litigation row (null on enforcement).
    - `summary` string, nullable
    - `gated` boolean: Reserved — always absent for the Enterprise-only 200 response (no teaser tier reaches this schema).
    - `attribution` string
  - `meta` object
    - `total` integer
    - `count` integer
    - `limit` integer
    - `offset` integer
    - `tier` string
    - `gated` string[]: What was limited for this tier (e.g. limit, offset).
    - `upgrade` string

## Other responses

- `400`: Invalid parameter
- `403`: Below Enterprise tier — tier_upgrade_required.
- `429`: Rate limited
- `503`: Backend unavailable

---

[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)
