Worked examples
All identifiers and values on this page are synthetic.
Outbound transfer
Section titled “Outbound transfer”{ "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 }}Inbound transfer
Section titled “Inbound transfer”{ "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 }}Internal transfer
Section titled “Internal transfer”{ "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 }}Complete non-blocking response
Section titled “Complete non-blocking response”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.
Complete blocking response
Section titled “Complete blocking response”{ "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.
Validation error
Section titled “Validation error”{ "detail": [ { "type": "missing", "loc": ["body", "transaction", "amount"], "msg": "Field required" } ]}Correct the request and do not retry the unchanged payload.