📘 Public beta · Endpoints are stable; OpenAPI specs and SDKs ship monthly. See changelog →
Products
Anti-Fraud Platform
Allow/block lists

Allow / block lists

Lists are simple keyed lookups: "is this NIK / email / phone / IP / beneficiary-account / country on a known-good or known-bad list?"

They're the highest-confidence input to the rules engine — list hits typically trip bypassMl: true rules and produce deterministic decisions.

List kinds

Key typeUse case
nikPer-customer block (regulatory, internal, partner-fed)
emailDisposable-email domains, known-fraud accounts
phoneKnown-mule numbers, recycled numbers
ipBotnet IPs, datacenter ranges, known-VPN exit nodes
beneficiary_accountCounterparty-account-based block
countrySanctioned countries, high-risk-FATF jurisdictions

List kinds × list classes

ClassMeaning
allowTrusted entries. Reduce fraudScore; can short-circuit to allow.
blockUntrusted entries. Trigger configured rule; can short-circuit to block.

Endpoints

GET/api/lists
Auth · API keyScope · lists:read

Filters: lane, listKind (allow · block).

Response:

{
  "data": [
    {
      "id": "lst_01HXY...",
      "name": "Internal mule blocklist",
      "keyType": "nik",
      "class": "block",
      "lane": "transaction",
      "entryCount": 4827,
      "lastSyncedAt": "2026-05-24T03:00:00Z",
      "syncStatus": "active",
      "connectorId": "con_01HXY..."
    }
  ]
}
POST/api/lists
Auth · API keyScope · lists:write
{
  "name": "Disposable email domains",
  "keyType": "email",
  "class": "block",
  "lane": "onboarding"
}

Adding entries

POST/api/lists/{id}/entries
Auth · API keyScope · lists:write
{
  "entries": [
    { "value": "3201234567890099", "reason": "Confirmed mule via Q1 investigation", "addedBy": "fraud-ops@bankxyz.co.id" },
    { "value": "3201234567890123", "reason": "Same-as-above" }
  ]
}

Up to 1,000 entries per request. Hashes the value at rest if keyType is nik or phone; raw values are not queryable back from the API.

Removing entries

DELETE/api/lists/{id}/entries/{entryId}
Auth · API keyScope · lists:write

Requires a reason query param for audit:

curl -X DELETE ".../api/lists/lst_01HXY.../entries/ent_01HXY...?reason=customer+reinstated+after+appeal" \
  -H "Authorization: Bearer $QE_API_KEY"

Bulk CSV import

POST/api/lists/{id}/import
Auth · API keyScope · lists:write

multipart/form-data with a CSV file:

value,reason,added_by
3201234567890099,Confirmed mule,fraud-ops@bankxyz.co.id
3201234567890123,Same-as-above,fraud-ops@bankxyz.co.id

Returns a job ID. Imports run async; poll status or subscribe to list.import.completed webhook.

External DB connectors

For lists that live in your data warehouse (e.g. analyst-curated mule database), configure a connector once and have us sync on a schedule:

Connector typeStatus
PostgreSQLStable
MySQLStable
Microsoft SQL ServerStable
OracleStable
SnowflakeStable
BigQueryStable
DatabricksBeta
S3 + CSVStable

Configure from the dashboard's Lists → Connectors page (the API for connector setup is intentionally dashboard-only because of credential handling).

Sync cadences: manual · hourly · daily · weekly. Connector errors surface in syncStatus (failing · paused) and via the list.sync.failed webhook.

One list, multiple lanes

A list created with lane: "onboarding" only applies to onboarding evaluations. Most banks duplicate critical block lists across both lanes — keep one canonical list in your warehouse, sync it into two Quantum Elixir lists (-ob and -tx).