Case reports
Build the case report, export it as HTML, propose parties, and record appeals, similar decisions and specialised analyses.
A case is identified by its authority case number, e.g. DMA.100075 or AT.40437.
#GET/v1/radar/cases/:caseNumber/report
The full case report. Opening it is also the trigger for background work: missing decision text is fetched, and extraction, claimant research, presence checks and DMA / cartel analyses are queued.
Main fields
| Field | Description |
|---|---|
caseNumber, authority, title, date | Identity of the lead document. |
docType, level, levelLabel, levelReason | Placement by the level table. |
figures | fine, since, until and appeal. Computed values carry estimate: true. |
summary | Three lines — the rule, what the company did, what it must do now — each citing notes and recitals. |
parties | Category 1 and 2 parties, with status, approvalMode, quote, recital and signals. |
dma | { applies, analysis, pending } — ranked victims for DMA decisions. |
cartel | { applies, analysis, pending } — exposure report for cartel decisions. |
evidenceSections, signalSections | Evidence map and all five claimant criteria with coverage state. |
similar | Related decisions. |
extraction | Runs and proposals for the case's documents. |
populationEstimates | Recorded population estimates. |
preparation | Extraction status and a blockedReason when generation cannot run. |
Errors: 404 — no radar documents for that case number.
#GET/v1/radar/cases/:caseNumber/report.html
The same report as one self-contained HTML file, stamped with the pipeline versions and the SHA-256 of the JSON it reflects. Use it as the auditable snapshot.
#GET/v1/radar/cases/:caseNumber/recitals/:n
One recital of the case's lead decision text.
#POST/v1/radar/cases/:caseNumber/parties
Propose a party. Recorded as radar.party.proposed.
| Body field | Required | Description |
|---|---|---|
name | yes | Max 200 characters. |
category | yes | 1 (named in the decision) or 2 (added by BINA). |
role | yes | competitors, customers, complainant, end_users, suppliers or other. |
whyHere | yes | One sentence on why the party is on the page. Max 600. |
proposedBy | yes | Max 120. |
recital | category 1 | Integer ≥ 1. |
quote | category 1 | Verbatim passage of that recital. Max 1,000. |
sourceUrl | no | Category 2 only; http(s). |
visual | no | { type: "quote" | "formula" }. Charts are built only from recital-cited figures. |
| Status | Meaning |
|---|---|
201 | Stored. Category 1 → status: "approved"; category 2 → status: "hypothesis". Location: /v1/radar/parties/:id. |
400 | Body invalid. |
404 | Unknown case. |
422 | Quote gate failed: no_such_recital, quote_too_short, quote_not_in_recital or name_not_in_quote. |
#POST/v1/radar/cases/:caseNumber/appeal
Record an appeal check. Recorded as radar.appeal.recorded.
| Body field | Required | Description |
|---|---|---|
status | yes | lodged, none_found, decided or to_check. |
caseReference | for lodged, decided | e.g. T-123/26. |
sourceUrl | yes | InfoCuria or court register link. |
note | no | Max 500. |
by | yes | Max 120. |
Response 200: the updated figures.appeal.
#POST/v1/radar/cases/:caseNumber/similar
Add a comparable decision. Recorded as radar.similar.recorded.
| Body field | Required |
|---|---|
caseNumber | yes |
label | yes |
reason | yes — why it is comparable |
sourceUrl | yes |
by | yes |
Response 201: { caseNumber, similar }.
#POST/v1/radar/cases/:caseNumber/dma
Re-run the DMA victims method on the case's DMA non-compliance decision. Optional body { requestedBy }.
Errors: 409 when the case has no DMA non-compliance decision, or offline.
#POST/v1/radar/cases/:caseNumber/cartel
Re-run the cartel defence-side report (practice type, exposure, legal map). Optional body { requestedBy }.
Errors: 409 when the case has no cartel decision candidate, or offline.