Skip to content

Cases and evidence packs

When something needs investigating, you open a case. When a bank needs to see it, you build an evidence pack.

A case groups the things that belong to one incident: alerts, events, agents and screenings.

ActionEndpoint
Create a casePOST /v1/cases with a title, a priority (low, medium or high) and optional items
List and readGET /v1/cases, GET /v1/cases/{id}
Add an itemPOST /v1/cases/{id}/items with a type (alert, event, agent or screening) and an id
Remove an itemDELETE /v1/cases/{id}/items/{itemId}. The removal is logged.
Add a notePOST /v1/cases/{id}/notes. Notes cannot be edited or deleted.
Change statusPOST /v1/cases/{id}/status to open, in_review or closed, with a closing note

Escalating an alert creates or adds to a case. Notes are append-only, so the record of what the team knew and when stays intact.

A pack is what you hand your sponsor bank. It is written so a compliance analyst can read it in five minutes, import it into their case tool, and verify it without trusting HalvorAI.

KindBuilt fromContains
Case packOne caseThe agents, owners, events, evidence, verification results, screenings, alerts, analyst notes and a timeline
Due-diligence reportA date range, the whole organizationAn agent inventory, volumes by rail, the five coverage metrics, detector and screening statistics, list freshness and a description of controls

Build a case pack with POST /v1/cases/{id}/packs and a profile. Build a report with POST /v1/reports/due-diligence with from, to and profile. Both return 202: the pack is built in the background, and GET /v1/packs lists packs with their status when it is ready.

Terminal window
curl -X POST https://api.sandbox.halvorai.com/v1/cases/cas_01JA8X.../packs \
-H "Authorization: Bearer $HALVOR_API_KEY" -H "Content-Type: application/json" \
-d '{ "profile": "generic" }'
pck_01J.../
summary.pdf human-readable summary
manifest.json every file with its SHA-256, plus pack metadata
manifest.jws the manifest, signed with HalvorAI's pack key
events.jsonl the events as received, with their signatures
evidence/ every evidence value
results.json verifications, mandate evaluations, screenings, alerts, actions
chain.json chain positions and the daily anchors that cover them
timeline.csv one row per event, alert and action, in time order
export/<profile>.csv an import file for a case tool
README.txt how to verify the pack
ProfileUse
genericOne row per payment with transaction, agent, owner, payee, instruction, mandate, verification and screening columns
actimize, feedzai, verafinThe generic columns renamed and ordered for that case tool. These are first versions; your bank’s real column specification replaces them.

POST /v1/packs/{id}/share with expires_in_days (at most 30) returns a link. Anyone with the link can read the summary and timeline and download the zip, with no login. The link is random, only its hash is stored, and each view is logged. Revoke it at any time with DELETE /v1/share-links/{id}.

Packs are stored in US regions with a seven-year retention lock that nobody, including HalvorAI, can shorten.

A reviewer can check everything in a pack offline. See verify an evidence pack. To be told when a pack is ready, use the pack.ready webhook.

A due-diligence report leads with the five figures banks ask for: attribution coverage, verification coverage, screening coverage, alerts by detector with false-positive rates, and median time to acknowledge. They are also available live from GET /v1/metrics/overview.