---
title: "Create Report"
method: POST
path: "/reports"
tags: ["reports"]
---

# Create Report

`POST /reports`

## Request

- Base URL: `https://api.licenscheck.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.licenscheck.com/reports`
- Auth: none declared

Issue a proof report: a PDF of a license's verdict, record and linked licenses as they stood at a moment.

The PDF is kept exactly as issued, and its SHA-256 is published at its verify_url, so anyone holding a copy
can confirm it wasn't changed. Issuing one counts as a verification of the license (free if you already
verified it today). Links are today's links, each license rebuilt as it stood at the moment.

Args:
    body: The license and the moment (default now).
    key: Injected: the caller's paid key.
    licenses: Injected `LicenseRepository`.
    history: Injected `HistoryRepository`, for the record as it stood.
    reports: Injected `ReportRepository`.
    keys: Injected `ApiKeyRepository`, to count the verification.

Returns:
    The issued report.

Raises:
    HTTPException: 404 when the license didn't exist then; 429 for too many reports; 503 if no code could be drawn.
    LicenseNotFoundError: For an unknown license (a 404).

## Request body

- ReportIn: Body for POST /reports.
  - `license_id` string, uuid, required: The license to report on.
  - `as_of` string, nullable: The moment to report as of: an ISO 8601 timestamp (no zone means UTC) or a date (its end, UTC). Omit for now. Our record of changes began 2026-10-04 05:51 UTC.

## Response `201`

Successful Response

- ReportOut: A proof report the key issued.
  - `id` string, uuid, required: The report's ID, for GET /reports/{id}.pdf.
  - `code` string, required: Its verification code; anyone can check it at verify_url.
  - `license_id` string, uuid, required: The license it reports on.
  - `contractor_name` string, required: The licensee.
  - `state` string, required: The license's state.
  - `license_number` string, required: The license number.
  - `as_of` string, date-time, required: The moment it reports on.
  - `issued_at` string, date-time, required: When it was issued.
  - `level` 'clear' | 'review' | 'risk', required: The overall verification verdict for a license.
  - `sha256` string, required: The PDF's SHA-256: any changed copy won't match it.
  - `verify_url` string, required: The public page that confirms the report is genuine.

## Other responses

- `401`: No API key, or one that's wrong or revoked.
- `403`: A free key: proof reports need a paid plan.
- `404`: No license with that ID, or it wasn't on its board's list yet at that moment.
- `422`: as_of isn't a date or time, is in the future, or is before our record began.
- `429`: Too many reports in a short time.

---

[API](https://skmtc.dev/licenscheck/apis/licenscheck-api.md) · [All operations](https://skmtc.dev/licenscheck/apis/licenscheck-api/llms.txt) · [OpenAPI document](https://skmtc.dev/licenscheck/apis/licenscheck-api/revisions/472db933f385?raw)
