---
title: "One enforcement matter, with its chain"
method: GET
path: "/enforcement/matters/{matter_uid}"
---

# One enforcement matter, with its chain

`GET /enforcement/matters/{matter_uid}`

## Request

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

The matter plus its EVENTS (timeline), PARTIES, RELIEF, statutory CITATIONS and the SOURCE DOCUMENTS each claim traces to. This is the dossier the product is sold on.

THE CHAIN IS WHAT IS METERED. Below the paid step each chain is a 2-row sample and `data.chain_totals` reports the true size of every one of them — never an empty wall, and never a sample you cannot tell is a sample. Listing and searching matters stays fully open.

FIELDS THAT LOOK LIKE HEDGES AND ARE THE PRODUCT: `events[].is_date_estimated` (the source gave a year, not a day), `verification`, `laws[].link_status` (`unlinked` = we hold the citation verbatim but have not resolved it — a confidently wrong citation is worse), and `duplicate_of`.

PARTIES ARE REDACTED BY POLICY, in the database, not here: 97 of 235 party rows publish and the rest are withheld — named private individuals and minors by default. See the pii_class and redaction_policy vocabularies on /enforcement/categories.

A 404 is returned both for a matter that does not exist AND for one withheld pending review, on purpose: distinguishable codes would turn the readiness gate into an enumeration oracle.

## Path parameters

- `matter_uid` string, required

## Response `200`

The matter, with parties, events, relief, cited statutes and source documents.

- object
  - `api_version` string
  - `data` object: One enforcement or litigation MATTER: a dispute with an identity that persists as it moves. An agency action with a complaint, a settlement and a final order is one matter here, not three rows.
    - `matter_uid` string: Stable key for fetching this matter again. AN OPAQUE KEY, NOT A DESCRIPTION — do not render it as a name. It is generated from whatever the ingest could parse and is demonstrably unreliable (one uid names RealPage for what is in fact the DOJ/LivCor consent decree). Read `caption`.
    - `caption` string: The matter as a human should read it. This is its name.
    - `jurisdiction_level` string
    - `jurisdiction_slug` string
    - `jurisdiction_name` string, nullable
    - `forum_type` string: See /enforcement/categories.
    - `forum_name` string, nullable
    - `matter_type` string: enforcement_action | civil_litigation | guidance_document | investigation | inquiry_6b. See /enforcement/categories.
    - `matter_status` string
    - `docket_number` string, nullable
    - `agency_code` string, nullable: FTC, DOJ, SEC, CFPB, EEOC, a state AG… Free text, not a closed vocabulary.
    - `ai_roles` string[]: How AI figures in the matter. See the ai_role vocabulary.
    - `filed_date` string, date, nullable: The date the SOURCE states the action was filed or opened, verbatim. NEVER our scrape date — that is `first_seen_at`, and confusing the two is the defect this field was rebuilt to remove. Null means the source did not state one; it is never inferred, and `date_source` below names where a non-null value came from.
    - `decided_date` string, date, nullable: The date the SOURCE states the matter resolved — settlement announced, consent order entered, final order, judgment. Null when unresolved or unstated.
    - `date_source` string, nullable: Which source field `filed_date` was lifted from, e.g. `ftc_case_timeline_oldest_entry`, `cfpb_listing_date_filed`, `tx_ag_listing_meta`, `doj_release_published_meta`. Published so a date can be traced rather than trusted. Always present when filed_date is.
    - `closed_date` string, date, nullable
    - `summary` string, nullable: Null on 42 of 91 matters.
    - `source_authority` string
    - `source_url` string: Where the claim came from. Never withheld at any tier — it is how you check our work.
    - `verification` string: Corroboration level. MEASURED 2026-08-22: every matter currently held is `single_source`, i.e. recorded from ONE official source with no second confirmation. Never withheld at any tier; read it before relying on any claim here.
    - `first_seen_at` string, date-time
    - `last_verified_at` string, date-time, nullable
    - `primary_domain_id` string
    - `primary_domain_label` string
    - `primary_branch_id` string
    - `primary_branch_label` string
    - `domains` object[]: All assigned subject domains, primary and secondary.
    - `is_canonical` boolean: False when another matter_uid already publishes this same source document.
    - `duplicate_of` string, nullable: The matter_uid to read instead. Present only on a non-canonical row.
    - `publish_ready` boolean: Canonical AND its CAPTION is in English. Rows where this is false are served only to a caller licensed for the raw registry.
    - `unavailable_fields` string[]: Present only when a DESCRIPTIVE field (forum_name, agency_code or summary) was nulled because it still carries untranslated internal working language. The matter itself is published; only these fields are not. A null WITHOUT this list means the source simply did not state a value.
    - `unavailable_reason` string: Why the fields above are null. Present only alongside unavailable_fields.
    - `enforcement_tier` string, nullable: A = an enforcement DECISION (complaint filed, consent order, settlement, civil penalty, judgment, cease-and-desist). B = an enforcement-adjacent SIGNAL (opened investigation, sweep, CID, enforcement advisory, 6(b) study order). NULL means the tier was never assessed — true of every matter recorded before 2026-08-22 — and does NOT mean B. Filter `tier=A` when the question is how many real enforcement decisions exist.
    - `ai_basis` object: WHY this matter is in an AI dataset. `matches` lists each term that fired, the field it fired in, the ai_role it implies, and a VERBATIM excerpt of the source text around it; `method` says whether the agency's own classification was used (e.g. the FTC industry tag "Technology > Artificial Intelligence") or only keywords. Published deliberately: it is the citation for the inclusion decision, so the corpus can be audited without re-reading every source.
    - `source_absent_fields` string[]: Fields the ingest LOOKED FOR and the source did not state. NOT the same as `unavailable_fields`, which is what WE withheld. This one is the agency's gap; that one is ours.
    - `industry_labels` string[]: Sector labels the SOURCE applied, verbatim (FTC industry/topic tags, DOJ ATR "Industry Code(s)"). Never inferred from the respondent's name.
    - `violation_labels` string[]: Violation types the SOURCE stated, verbatim (FTC "Enforcement Type"/"Type of Action", DOJ ATR "Case Violation(s)"). Never inferred from the conduct described.
    - `ingest_lane` string, nullable: Which writer produced the row. Provenance, not classification.
    - `events` object[]
    - `parties` object[]
    - `relief` object[]
    - `laws` object[]
    - `sources` object[]
    - `chain_totals` object: The TRUE size of every chain, whether or not the rows above were sampled.
    - `chains_sampled` boolean
  - `meta` object
  - `attribution` string

## Other responses

- `400`: matter_uid is not a slug.
- `404`: No PUBLISHED matter with that matter_uid.

---

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