Screening Appliance docs

Quickstart

docker pull, docker run with a persistent volume and env vars, and your first search via curl — complete, copy-pasteable commands.

Last updated 2026-08-02

Quickstart

This gets a screening appliance running locally (or on any Docker host) and answering searches in under a minute — no network access required after the image is pulled, because the image ships with a baked-in data snapshot.

1. Pull the image

docker pull proofaml/screening-appliance:2026-08-02

Pin to a dated tag (2026-08-02) in production so an upgrade is always a deliberate docker pull of a specific tag, not an implicit :latest change. :latest always points at the newest published image.

2. Create a persistent volume

The volume at /var/lib/proofaml holds the data snapshot and every applied update. Without it, a container restart falls back to the image's baked-in snapshot and re-syncs from scratch.

docker volume create proofaml-data

3. Run the container

docker run -d \
  --name proofaml-screening \
  -p 8400:8400 \
  -v proofaml-data:/var/lib/proofaml \
  -e DATASETS=all \
  -e SYNC_INTERVAL=6h \
  proofaml/screening-appliance:2026-08-02

4. Confirm it's healthy

curl -s http://localhost:8400/healthz
{
  "ok": true,
  "dataVersion": "2026-08-02T03:00:00Z",
  "epoch": 4
}

ok: true means the appliance has a fully-loaded, verified dataset and is ready to serve searches. See Search API reference for the full field reference, and Troubleshooting for what to do if ok is false.

5. Run your first search

curl -s -X POST http://localhost:8400/v1/search \
  -H 'content-type: application/json' \
  -d '{
    "name": "Viktor Bout",
    "country": "RU"
  }'
{
  "query": { "name": "Viktor Bout", "country": "RU" },
  "dataVersion": "2026-08-02T03:00:00Z",
  "matches": [
    {
      "score": 98,
      "entity": {
        "id": "NK-a1b2c3d4",
        "schema": "Person",
        "name": "Viktor Anatolyevich Bout",
        "datasets": ["us_ofac_sdn", "un_sc_sanctions"]
      },
      "matchedOn": ["name", "country"]
    }
  ]
}

That's a full round trip: a name and country in, a scored, source-attributed match out — computed entirely inside your container, against the data snapshot on your own volume.

Next steps


More Screening Appliance docs

← All Screening Appliance docs