Watchlists
Watchlists are curated subject databases used in screenings. Quantum Elixir maintains a stack of standard public-source watchlists and exposes APIs for your own private lists (internal blocklists, partner sanctions feeds).
Standard watchlists (included)
| Watchlist | Refresh cadence | Notes |
|---|---|---|
| OFAC SDN + Non-SDN | Hourly | US Treasury sanctions |
| UN Security Council | Daily | Including Al-Qaida/Taliban sanctions list |
| EU Consolidated | Daily | EU CFSP financial sanctions |
| UK HMT Financial Sanctions | Daily | |
| ANC (Australian Nat'l) | Daily | |
| World-Check PEP (licensed) | Daily | Premium tier — adds individual PEPs by jurisdiction |
| Dow Jones Adverse Media (licensed) | Daily | Premium tier — adds AM coverage |
| PPATK Internal (private) | Per-instance | Distributed only to PJK members |
Refresh status:
GET /api/watchlists{
"ok": true,
"data": [
{
"id": "wl_ofac_sdn",
"name": "OFAC SDN",
"category": "sanctions",
"active": true,
"lastRefreshAt": "2026-05-24T12:00:01Z",
"entryCount": 12847,
"source": "https://sanctionslistservice.ofac.treas.gov/..."
}
]
}Adding a private watchlist
For internal blocklists or partner-provided sanctions feeds:
/api/watchlists{
"name": "PT Bank XYZ Internal Blocklist",
"category": "internal",
"source": "manual"
}Returns the new watchlist ID. Then add entries:
/api/watchlists/{id}/entries{
"entries": [
{
"fullName": "Budi Risky",
"nik": "3201234567890123",
"dateOfBirth": "1980-01-01",
"reason": "Internal flag — failed three-time SAR investigation",
"addedBy": "compliance@bankxyz.co.id"
}
]
}Up to 1,000 entries per request. The list takes effect immediately for new screenings.
CSV / connector import
For larger imports or scheduled syncs from your own DB:
/api/watchlists/refreshTriggers a fetch from each watchlist's configured source. For private watchlists with a database connector configured (Postgres / MySQL / Snowflake / BigQuery), this is also the manual trigger for an ad-hoc sync.
Configure connectors from the dashboard's Watchlists → Connectors page.
Test a connector
/api/watchlists/{id}/test-connectionReturns connectivity + sample-row info without committing changes:
{
"ok": true,
"data": {
"reachable": true,
"rowsAvailable": 12847,
"sampleRow": { "name": "...", "nik": "..." },
"lastTestedAt": "..."
}
}Inspect entries
/api/watchlists/{id}/entriesPaginated. Use for the dashboard's watchlist-browse UI.
curl ".../api/watchlists/wl_ofac_sdn/entries?q=John&limit=20" \
-H "Authorization: Bearer $QE_API_KEY"Adverse-media articles
/api/adverse-media/articlesPull the article bodies behind any adverse-media match. Articles are sourced from a curated Indonesian-language corpus + global wire services, indexed with subject extraction and risk topic tagging.
curl ".../api/adverse-media/articles?ids=amr_01HXY...,amr_01HXZ..." \
-H "Authorization: Bearer $QE_API_KEY"{
"ok": true,
"data": [
{
"id": "amr_01HXY...",
"title": "Detik.com: Pengusaha XYZ dijerat pasal pencucian uang",
"url": "https://detik.com/...",
"publishedAt": "2024-08-15",
"snippet": "...",
"language": "id",
"subjects": [{ "name": "Bambang Setiawan Hartono", "confidence": 0.92 }],
"topics": ["money_laundering", "corruption"]
}
]
}Import adverse-media bulk
/api/adverse-media/importIf you license your own AM corpus from a third party, import via this endpoint. Body is an array of article objects.
Refresh events
When a watchlist refresh completes, we fire a watchlist.refreshed webhook with the entry-count delta. Useful for compliance teams that audit watchlist freshness, and for triggering a re-screen of your existing customer base via the ongoing screening lane.