Skip to content

Worked examples

All identifiers and values on this page are synthetic.

{
"transaction": {
"reference_id": "BANK-TXN-OUT-0001",
"amount": 25000.00,
"currency": "NGN",
"trx_type": "transfer",
"channel": "mobile_app",
"txn_direction": "outbound",
"is_cash": false,
"source_account_id": 41001,
"evaluated_account_id": 41001,
"beneficiary_account_id": 91001,
"narration": "Invoice payment"
},
"customer": {
"customer_id": "CUST-1001",
"entity_type": "individual",
"kyc_tier": 2,
"is_pep": false,
"sanctions_flag": false,
"adverse_media_flag": false,
"is_shell_company": false,
"has_complete_cdd": true
},
"account_snapshot": {
"account_id": 41001,
"open_ts": "2024-06-20T08:30:00Z",
"last_activity_ts": "2026-09-28T09:55:00Z",
"balance": 480000.00,
"account_type": "savings",
"currency": "NGN"
},
"context": {
"current_balance": 480000.00
}
}
{
"transaction": {
"reference_id": "BANK-TXN-IN-0001",
"amount": 75000.00,
"currency": "NGN",
"trx_type": "transfer",
"channel": "online",
"txn_direction": "inbound",
"is_cash": false,
"source_account_id": 92001,
"beneficiary_account_id": 42002,
"evaluated_account_id": 42002
},
"customer": {
"customer_id": "CUST-2002",
"entity_type": "corporate",
"kyc_tier": 3,
"is_pep": false,
"sanctions_flag": false,
"adverse_media_flag": false,
"is_shell_company": false,
"has_complete_cdd": true
},
"account_snapshot": {
"account_id": 42002,
"balance": 2100000.00,
"account_type": "current",
"currency": "NGN"
},
"context": {
"current_balance": 2100000.00
}
}
{
"transaction": {
"reference_id": "BANK-TXN-INT-0001",
"amount": 15000.00,
"currency": "NGN",
"trx_type": "transfer",
"channel": "mobile_app",
"txn_direction": "outbound",
"is_cash": false,
"source_account_id": 41001,
"beneficiary_account_id": 42002,
"evaluated_account_id": 41001
},
"customer": {
"customer_id": "CUST-1001",
"entity_type": "individual",
"kyc_tier": 2,
"is_pep": false,
"sanctions_flag": false,
"adverse_media_flag": false,
"is_shell_company": false,
"has_complete_cdd": true
},
"context": {
"current_balance": 480000.00
}
}

The example shows one representative rule evaluation. The live array contains every core rule selected for that tenant’s decision.

{
"evaluation_status": "complete",
"rule_evaluations": [
{
"rule_id": "B6",
"rule_name": "Amount anomaly",
"evaluation_status": "completed",
"triggered": true,
"action": "alert",
"error_code": null
}
],
"trx_id": 120047,
"should_block": false,
"final_action": "alert",
"highest_severity": "medium",
"triggered_rules": [
{
"rule_id": "B6",
"rule_name": "Amount anomaly",
"severity": "medium",
"action": "alert",
"report_type": null,
"details": {
"data_status": "sufficient"
}
}
],
"triggered_count": 1,
"alert_ids": [],
"mule_risk_summary": {
"enabled": true,
"status": "queued",
"risk_score": null,
"risk_level": null,
"enabled_rule_count": 0,
"evaluated_rule_count": 0,
"triggered_rule_count": 0,
"not_triggered_rule_count": 0,
"not_evaluated_rule_count": 0,
"partially_evaluated_rule_count": 0,
"deferred_rule_count": 0,
"unavailable_rule_count": 0,
"evaluation_id": null,
"reason": "Mule analysis queued after the core decision.",
"persistence_status": null
},
"mule_risk": null,
"behavioural_data_status": "sufficient",
"behavioural_sufficiency": {
"status": "sufficient",
"reasons": []
}
}

The settlement decision is still should_block: false. The alert is created asynchronously.

{
"evaluation_status": "complete",
"rule_evaluations": [
{
"rule_id": "E3",
"rule_name": "KYC tier daily limit enforcement",
"evaluation_status": "completed",
"triggered": true,
"action": "block",
"error_code": null
}
],
"trx_id": 120048,
"should_block": true,
"final_action": "block",
"highest_severity": "critical",
"triggered_rules": [
{
"rule_id": "E3",
"rule_name": "KYC tier daily limit enforcement",
"severity": "critical",
"action": "block",
"report_type": null,
"details": {}
}
],
"triggered_count": 1,
"alert_ids": []
}

Use the approved blocking path before settlement.

{
"detail": [
{
"type": "missing",
"loc": ["body", "transaction", "amount"],
"msg": "Field required"
}
]
}

Correct the request and do not retry the unchanged payload.