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
DATASETS=allloads every dataset shipped in the snapshot. To screen against a specific subset instead (e.g. only sanctions lists), see Dataset selection & reference.- Full variable reference: Configuration reference.
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
- Full request/response reference for
/v1/search,/v1/status, and/healthz: Search API reference. - Screening many names at once: Batch screening guide.
- Watching a fixed subject list over time: Monitoring guide.
- Choosing which lists to screen against: Dataset selection & reference.
- How the appliance stays current, and how to run it fully air-gapped: Updates & synchronization.