Lists
Ce contenu n’est pas encore disponible dans votre langue.
A list is a named set of values your rules can check against: “is this country on our high-risk list?”, “is this device on our deny list?”. Lists let you change what a rule looks for without changing the rule — add a country to the high-risk list and every rule that uses the list picks it up within about 15 seconds, with no new rule version and no approval round.
Kinds of list
Section titled “Kinds of list”| Kind | Purpose | Example |
|---|---|---|
| Allow | Values you trust, which rules can skip | Your own settlement accounts; a known payroll bureau |
| Deny | Values you do not want to deal with | Accounts of exited customers; devices linked to confirmed fraud |
| Reference | Values a rule needs to know about, neither good nor bad in themselves | FATF high-risk countries; high-risk merchant category codes; border regions |
What a list can hold
Section titled “What a list can hold”Every list holds one type of item, chosen when the list is created:
| Item type | Example values | What SpeculaPro checks when you add one |
|---|---|---|
country |
IR, KP, MM |
Two letters. Lowercase is turned into uppercase, so ir is stored as IR |
mcc |
7995 (betting), 6051 (quasi-cash) |
Exactly four digits |
customer, account, counterparty, device |
Your own references for these records | 1 to 256 characters |
ip |
196.61.12.4 |
1 to 256 characters |
text |
Anything else | 1 to 256 characters |
Spaces at either end of a value are removed. A value that fails these checks rejects the whole request, and nothing from it is added.
Each item can have a note: why it is there. Notes are set for each batch of values you add.
Each item can also have an end date (expires_at). After it, rules stop seeing the value
within about 15 seconds, without anyone removing it, which suits temporary measures such as
blocking a device while a fraud case is open. The expired value stays visible on the list, marked
as expired, until someone removes it, and adding it again brings it back. An end date can be
cleared at any time to keep the value for good. See
Managing lists.
How rules use lists
Section titled “How rules use lists”Every list has a key — lowercase letters, digits and underscores, such as
high_risk_countries. Rules refer to a list by its key, as lists.<key>. For example,
E1 checks whether a transfer’s country or counterparty country is in
lists.high_risk_countries.
What a rule sees is simply the list’s current values, as text:
- Only items that have not expired are included.
- Values are compared exactly. Country lists are upper-cased for you, but the codes must
still be the ones your transactions use (
IR, notIran). Merchant codes must match the four digits as sent (7995). Other values must match character for character, including capital letters. - The list’s kind (allow, deny, reference) describes its purpose for people. Rules don’t treat the kinds differently: what matters is how the rule uses the list.
- The evaluator re-reads lists every 15 seconds.
Until a list exists, rules that need it don’t fire
Section titled “Until a list exists, rules that need it don’t fire”A list with no current items is treated as not existing.
- Rules in SpeculaPro’s own packs check for the list first. If it is missing, they quietly
don’t fire: E1 needs
high_risk_countries, and H4 needshigh_risk_mcc. Installing those rules without creating the lists therefore does nothing, without any error. - A custom rule that names a missing list as
lists.my_list(orlists["my_list"]) sees an empty list, so it doesn’t fire either, and nothing is logged. Write the key out in one of those two forms so SpeculaPro can spot it. See Lists in rules.
How to create and fill a list with the API
Section titled “How to create and fill a list with the API”To script changes, for example a quarterly FATF update, use the Lists API, signed in as yourself with curl (see before you start). This example creates the list that E1 needs.
-
Create the list. The key is 2 to 64 lowercase letters, digits or underscores:
Terminal window curl -s -b ~/.sp-cookies -H 'Content-Type: application/json' \-d '{"key":"high_risk_countries","name":"High-risk jurisdictions (FATF + internal)","kind":"reference","item_type":"country"}' \"$SP/api/v1/lists"The answer is
201. A list with that key already existing gives409. -
Add values, up to 1,000 at a time, with a note:
Terminal window curl -s -b ~/.sp-cookies -H 'Content-Type: application/json' \-d '{"values":["IR","KP","MM"],"note":"FATF call for action, public statement October 2026"}' \"$SP/api/v1/lists/high_risk_countries/items"The answer tells you how many were added; values already on the list are skipped.
-
Check it.
GET /api/v1/listsshows the item count and which live rules use it. Rules pick up the change within about 15 seconds. -
Remove a value when it no longer applies. It is cleaned the same way as when it was added, so
mmandMMboth removeMMfrom a country list:Terminal window curl -s -b ~/.sp-cookies -X DELETE "$SP/api/v1/lists/high_risk_countries/items?value=MM"
Who can change lists
Section titled “Who can change lists”Creating, editing and deleting lists needs lists.manage — with the built-in roles, only the MLRO.
Seeing lists and their values needs rules.view.
That is deliberate: adding an account to an allow list can stop it from alerting, so it carries
the same weight as approving a suppression.
Every change to a list is recorded in the audit log.
Worked example: high-risk countries
Section titled “Worked example: high-risk countries”The FATF publishes, several times a year, a list of jurisdictions under increased monitoring and those subject to a call for action. Kweku Pay keeps a reference list:
| Field | Value |
|---|---|
| Key | high_risk_countries |
| Name | High-risk jurisdictions (FATF + internal) |
| Kind | Reference |
| Item type | Country |
When the FATF updates its lists, the MLRO adds and removes countries with a note citing the
FATF statement and date. Rule E1 — and any other rule that refers to
lists.high_risk_countries — uses the change within about 15 seconds.
Allow list or suppression?
Section titled “Allow list or suppression?”Both reduce alerts. Use:
- an allow list for values that are trusted across many rules and do not need a review date — your own accounts, for example;
- a suppression for an explained exception that should be reviewed — it always expires, needs a second approver, and keeps every suppressed hit.
When in doubt, use a suppression. It leaves a better trail.