Monitoring rules
Build with

Monitoring rules decide how each event is scored and which decision it earns. You configure them in the dashboard under Compliance → Monitoring rules — no code deploy, and changes apply to every event scored afterward in that environment.

Viewing the configuration is open to anyone with Compliance access; editing requires the monitoring:manage permission. Until you save once, an environment runs on the built-in defaults; saving creates an explicit configuration for that environment. Reset to defaults reverts the form to the platform defaults.

How scoring works
Build with

  1. Every rule inspects the event and produces a signal from 0 (no risk) to 1 (maximum).
  2. Signals are combined by weight using a soft-OR: any one strong signal can push the score high, and additional signals raise it further with diminishing returns.
  3. The result is a composite score, 0–1 (surfaced as 0–100 on events).
  4. The score is compared to two cutoffs to produce the decision.
code
        ALLOW            REVIEW              BLOCK
  ├──────────────┼──────────────────┼──────────────────┤
  0        review threshold    block threshold        1

Decisions & limits
Build with

The first tab, Decisions & limits, sets the cutoffs and money ceilings.

Decision thresholds

SettingMeaning
Review thresholdAt or above this score, the event is marked REVIEW and an alert is opened.
Block thresholdAt or above this score, the event is marked BLOCK.

The review threshold must be less than or equal to the block threshold.

Metered billing (toggle) charges a small per-event fee for scoring in production only — sandbox and development are always free.

Money limits

Amount ceilings are held in a base currency (e.g. USD) with optional per-currency overrides. For each event, the engine picks the ceiling for that event's currency, falling back to the base currency when there's no override.

LimitFeeds
Single transactionThe Threshold rule — the most one transaction can be before it flags.
Rolling-window totalThe Velocity rule — the most an entity can move in a currency within the velocity window.

Add a currency to give it its own limits; remove it to fall back to base. Some behavioral rules also take per-currency minimum amounts (New-beneficiary, Round-amount).

Built-in rules
Build with

Every rule carries a weight (0–1) — how strongly it influences the composite score. 0 turns the rule off; 1 gives it full influence. The rules are grouped into three tabs.

Core rules

Threshold-based checks that work from amount / currency / country / counterparty alone.

RuleFlags when…Key config
ThresholdA single event's amount exceeds its currency's single-transaction limit.weight
VelocityToo many events, or too much total value in one currency, across a rolling window.window (hours), max count, weight
Pattern (structuring)A burst of same-currency events sit just under the single-transaction limit (3+ at 70–100% of the limit).window (hours), weight
GeographyThe event's country is on your high-risk or blocked list.high-risk[], blocked[], weight
CounterpartyThe counterparty is on your high-risk or blocked list (one entry per line, case-insensitive).high-risk[], blocked[], weight
Baseline anomalyThe amount deviates sharply from what's normal for this entity (EWMA per entity, cohort fallback during warm-up).z-score threshold, weight

Flow & velocity

Behavioral patterns across a sequence of events. These need specific data fields and stay dormant until you send them.

RuleFlags when…NeedsKey config
Dormant-then-activeAn account silent for N days suddenly transacts.dormant days, weight
Pass-throughMoney flows in then straight back out in matched amounts (layering).directionwindow (hours), match ratio, weight
Rapid movementFunds leave almost as fast as they arrive (opposite-direction flow within minutes).directionwindow (minutes), weight
SmurfingMany distinct senders funnel money into one account.direction, counterpartywindow (hours), min sources, weight

More signals

RuleFlags when…NeedsKey config
New beneficiaryA first, sizeable payment to a counterparty never paid before.counterpartywindow (hours), min amount, weight
Round amountSuspiciously round amounts — exact multiples of a unit at or above a minimum.amountunit, min amount, weight
Cross-borderA transaction in a country different from the entity's nationality (elevated if that country is on your geo lists).entity nationality, event countryweight
Cash-intensiveThe event moved cash (channel = cash).channelweight
Profile changeThe entity performs a transaction type it hasn't done before, once it has enough history.typemin history, weight

Match your payload to your rules. A behavioral rule with a weight but without the fields it needs never fires. The rule-coverage panel flags rules that are weighted but unconfigured. See the event data payload.

Custom rules
Build with

When the built-ins don't cover a scenario, author your own — declaratively, no code. Each custom rule has:

FieldPurpose
NameMachine-readable id, e.g. high_value_crypto. Fires as custom:<name> on alerts and SAR reports.
DescriptionHuman label shown on alerts, e.g. "Large crypto transfer".
EnabledOn/off toggle.
ConditionThe match expression (below).
ScoreRisk contribution (0–1) when the condition matches.
WeightHow strongly that contribution affects the composite score (0–1).

You can define up to 50 custom rules per environment.

Conditions

A condition is a tree combining field predicates with all (AND), any (OR), and not. The dashboard offers a Builder for flat all/any predicates and an Advanced (JSON) mode for arbitrary nesting.

Fields you can test: amount, type, currency, country, counterparty, direction, channel, ip, entity.riskTier, entity.nationality, and any custom meta_data.* path.

Operators: gt (>), gte (≥), lt (<), lte (≤), eq (=), neq (≠), in (in list), nin (not in list), contains, exists.

json
{
  "all": [
    { "field": "amount", "op": "gt", "value": 50000 },
    { "field": "currency", "op": "in", "value": ["BTC", "ETH"] }
  ]
}

The rule above — named high_value_crypto, score 0.8, weight 0.6 — flags large crypto transfers and contributes to the same composite score as the built-ins. An empty condition never fires, so the editor warns you to add at least one predicate.

Next steps
Build with