---
title: "On-demand AI compliance report (PDF or signed link) — the $79 report engine as an API"
method: POST
path: "/report"
---

# On-demand AI compliance report (PDF or signed link) — the $79 report engine as an API

`POST /report`

## Request

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

Generate the personalized, source-grounded AI-law compliance report for a business profile — the SAME deterministic engine behind the $79 /compliance-report product (no LLM in the grounded path — it cannot invent a statute, deadline, or penalty). POST state + sector (+ optional AI-use profile). Default response is JSON: the risk assessment (1–10 score + obligations) plus a signed `report.download_url` for the rendered PDF. Pass `format:"pdf"` (or send `Accept: application/pdf`) to stream the PDF binary inline instead. Paid feature (Pro+) with a monthly report quota per tier (Pro 5/mo, Business 25/mo); when the quota is exhausted the endpoint returns 402 with an upgrade / single-report hint. Lower tiers receive a preview (risk band + counts + one sample obligation) with the PDF/download withheld behind an upgrade hint. Informational only — NOT legal advice.

## Request body

- object
  - `state` string, required: US state slug (e.g. california). `jurisdiction` is accepted as an alias.
  - `jurisdiction` string: Alias for `state` (US state slug).
  - `sector` string, required: Sector slug (see /sectors).
  - `aiUse` string[]
  - `ai_decision_impact` 'hiring_firing' | 'credit_insurance' | 'healthcare' | 'housing' | 'internal_only' | 'not_sure'
  - `countries` string[]: EU/global country slugs also operated in/served.
  - `bias_audit` 'recent' | 'old' | 'never' | 'unknown'
  - `ai_policy` 'formal' | 'informal' | 'none' | 'developing'
  - `ai_source` 'custom' | 'third_party' | 'embedded' | 'combination' | 'not_sure'
  - `size` string: Company size band (e.g. startup, small, medium, enterprise).
  - `company` string: Company name printed on the report (optional).
  - `email` string, email: Delivery email printed on the report footer (optional).
  - `format` 'json' | 'pdf': json (default) → summary + signed download link; pdf → stream the PDF binary.

## Response `200`

The report — JSON (assessment + download link) or, with format=pdf/Accept: application/pdf, the PDF binary.

- object
  - `api_version` string
  - `data` object
    - `risk` Risk: Deterministic 1–10 risk score (same inputs → same score; no model).
      - `score` integer
      - `level` 'Low' | 'Medium' | 'High' | 'Critical'
      - `factors` string[]: Named contributions to the score (full result only; withheld in a preview).
    - `applicable_law_count` integer
    - `jurisdictions` string[]
    - `obligations` Obligation[]
      - `law` string
      - `jurisdiction` string
      - `layer` 'state' | 'federal' | 'landscape' | 'country': “landscape” = a notable law that may not apply to you (out-of-state); see may_not_apply.
      - `applies_because` string, nullable: Why this obligation was surfaced for the given context.
      - `obligation` string, nullable: The plain-English duty ("what must I do").
      - `deadline` string, nullable: Free-text effective/compliance date verbatim from the source ("by when").
      - `penalty` string, nullable
      - `status` string, nullable
      - `citation` string, nullable
      - `government_body` string, nullable
      - `may_not_apply` boolean: true when the law binds another jurisdiction and may not apply to the caller.
      - `source_url` string, nullable: Primary/official source for this obligation.
      - `source_tier` 'primary' | 'secondary' | 'unverified': Grounding tier of source_url.
    - `report` object
      - `available` boolean
      - `format` string
      - `filename` string
      - `download_url` string, uri: Signed private link to fetch the rendered PDF.
      - `expires_in_days` integer
      - `required_tier` string: On a preview, the tier that unlocks the PDF.

## Other responses

- `400`: Missing state/sector or malformed body
- `429`: Rate limited

---

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