Keep limits, risk and KYC in step with every transaction.
Spend and transfers are counted per card, account and customer, exact to the cent and per currency. Your limit checks, risk ratings and reviews get the live numbers they need; your compliance processes and teams stay in charge.
watching
watching
watching
The questions this answers
Typical questions, each with the window it usually looks at. Thresholds are starting points you set yourself.
- Hold payments over a limit
How much has this card or account spent today, against the limit you keep for it?
calendar day, customer's time zone - Rate customer risk
Which rating do this customer's onboarding data and recent activity across all their accounts point to?
last 30 days, rolled up from every account - Refresh KYC when due
How much has moved in and out since the last KYC review, compared with what the customer declared?
calendar month, and since the last review - Spot structuring
How many deposits came in just under the reporting threshold you set, and how much per day?
rolling 30 days and per calendar day - Rapid movement of funds
Is money leaving the account almost as fast as it arrives, or moving again after a long silence?
rolling 7 days, in against out - Exposure across currencies
What are this customer's flows in EUR, GBP and USD, added up in your reporting currency at the rates you keep?
rolling 30 days, converted to USD
Activity that outgrew the declaration
At onboarding a customer declared about 3 000 EUR a month. Every transfer on any of their accounts counts toward this month, in their own time zone. When the month passes what they declared, your KYC team gets a refresh request with the numbers behind it, and decides what happens next.
- Send each booked transfer with the account, the customer, the amount and the currency
- Define the monthly volume per account, rolled up to the customer, exact to the cent in EUR; keep the declared volume on the customer
- Trigger the check on every transfer: this month so far against the declared volume
- Act: open a KYC refresh with the numbers, or let a decision say whether one is due
{
"id": "trf_20931",
"type": "transfer_booked",
"ts": "2026-11-02T10:41:22Z",
"attrs": {
"account_id": "acc_7731",
"customer_id": "c_1042",
"direction": "out",
"amount": "1250.00",
"currency": "EUR"
}
}{
"name": "kyc_check",
"description": "This month's volume against what the customer declared",
"spec": {
"entity": "customer",
"features": {
"volumeThisMonth": {
"state": "volume_by_account",
"window": {
"calendar": "month",
"tz": "subject.timezone",
"defaultTz": "UTC"
}
}
},
"derived": [
{
"name": "declaredPct",
"expr": "has(entity.declaredMonthly) ? round(100.0 * double(volumeThisMonth) / double(entity.declaredMonthly), 0) : -1.0"
}
],
"reasons": [
{"name": "outgrew_declaration", "when": "declaredPct > 100.0"}
],
"triggers": [
{
"name": "on_transfer",
"on": "transfer_booked",
"subject": "attrs.customer_id",
"outputs": ["stream"]
}
]
}
}{
"entity": {"type": "customer", "id": "c_1042"},
"values": {
"volumeThisMonth": "3412.50",
"declaredPct": 114
},
"reasons": ["outgrew_declaration"],
"degraded": [],
"skipped": [],
"profileVersion": "kyc_check@v2",
"configVersion": 41,
"evaluatedAt": "2026-11-02T10:41:22.318Z"
}The parts of Aggrelis behind it
Nothing built for one industry: the same building blocks, configured for this job.
- Exact money, per currency
Amounts as exact decimals at each currency's scale. A USD transfer never counts in a EUR total, and conversions use the rates you keep.
- The customer's own calendar
Today and this month start at the customer's local midnight, and totals can start at the last KYC review instead.
- From accounts to the customer
Each transfer counts for its account and for the customer who holds it, across all their accounts.
- Results where your team works
Push each result to your case management or alerting as a signed webhook, or ask while the payment waits.
- Ratings and reviews, decided
Your rules settle the clear cases, a model the borderline ones, and a person decides where the law asks for one.
- Private by design
A database per workspace, identifiers hashed, hosted in the EU or run in your own cloud.
Your first live numbers, configured not coded
Tell us what you would count first, and we'll help you set it up.