BANKGUARD USER GUIDE
1 / 9
p.01
APIntelligence
BANKGUARD
User Guide
"Connecting your bank. Working your cases. Filing clean."
Version v3.0  ·  2026-06-27
p.02

Before You Connect

What you need to get started

Bank System Access

  • Database credentials with read access to your core banking system (FIS Horizon, Fiserv DNA, Jack Henry, or a generic RDBMS)
  • Or: ability to configure outbound webhooks from your core system
  • Your core system's host, port, and database name

BankGuard Credentials

  • Your BankGuard Command Center URL
  • Your analyst or admin login (email + password)
  • API key for your institution (obtained from your BankGuard admin)

Network Requirements

  • For polling depths: BankGuard's IP needs outbound access to your database port (typically 1433 for SQL Server)
  • For webhook/intercept: your core system needs outbound HTTPS access to BankGuard's connector endpoint
  • TLS required on all connections
BankGuard never stores your banking transactions. It reads metadata, scores transactions in real time, and stores only the fraud signals and case records it generates — never the underlying transaction data itself.
p.03

Connecting Your Bank

The Connection Wizard

  1. Log in to the Command Center. Navigate to Settings → Bank Connections → Add Connection. The Connection Wizard opens.
  2. Select your core banking system. BankGuard lists FIS Horizon, Fiserv DNA, Jack Henry SilverLake, and Generic (for any RDBMS). If your system is not listed, choose Generic and configure column mappings manually.
  3. Choose your integration depth. See the depth comparison table below.
  4. Enter your connection details (host, port, database, credentials). Credentials are encrypted with AES-256-GCM before storage.
  5. Click Test Connection. BankGuard performs a schema discovery to verify it can read the required tables. You will see either a green confirmation or a specific error.
  6. Name this connection (e.g., "FIS-Prod-Primary") and click Save & Activate.

Integration Depth Comparison

Depth How it works Latency impact Best for
ObserveBankGuard polls every 5 minNoneRisk dashboard; initial evaluation
MonitorBankGuard polls every 1 minNoneOngoing monitoring
AlertYour system pushes events via webhookNone (async)General fraud prevention
InterceptInline sync; bank awaits decision< 500msHigh-risk transaction blocking
The Connection Wizard generates a ready-to-use environment configuration for your integration depth. For webhook and intercept depths, it also generates the bank-side configuration snippets.
p.04

Understanding Fraud Scores

What BankGuard returns for every transaction

{ "request_id": "req-a4b2c3", "recommended_action": "STEP_UP", "processing_time_ms": 187, "scores": { "fraud": 0.73, "risk": 0.61, "compliance": 0.12, "retention": 0.45, "predictive_anomaly": 0.68 }, "rules_applied": [ { "name": "ACH > $9,000 velocity check", "action": "STEP_UP" } ], "recommended_action_reason": "Fraud score 0.73 exceeds STEP_UP threshold 0.60", "feature_contributions": [ { "feature": "tx_count_1h", "value": 8, "contribution": 0.31 }, { "feature": "amount_vs_30d_avg", "value": 4.2, "contribution": 0.24 } ] }

Field Explanations

recommended_action — What BankGuard recommends the bank do: APPROVE / STEP_UP / DECLINE. For Intercept depth, this becomes APPROVE / BLOCK.

scores — Five independent engine scores, each 0.0–1.0. Higher = more suspicious. Fraud score: probability of fraudulent activity based on transaction patterns and velocity. Risk score: customer-level risk profile. Compliance score: BSA/AML flag probability. Retention: customer churn/distress signal. Predictive anomaly: statistical deviation from this account's historical baseline.

rules_applied — Any declarative rules that fired. Rules can elevate the ML recommendation but not lower it (unless configured with override_ml: true).

feature_contributions — SHAP-based explanation showing the features that most influenced the fraud score. Positive contribution = pushed score higher (toward fraud). Available in Case Detail view.

Default Action Thresholds

Fraud ScoreDefault Action
Fraud < 0.30APPROVE
Fraud 0.30 – 0.60Monitor (no action for Monitor/Observe depth)
Fraud 0.60 – 0.85STEP_UP (challenge customer)
Fraud ≥ 0.85DECLINE / BLOCK

Thresholds are configurable per institution.

p.05

Case Management

Working your fraud queue

When BankGuard recommends STEP_UP or DECLINE, a case is automatically created in the Case Queue. Cases are the primary workflow surface for fraud analysts.

The Case Lifecycle

OPEN
IN_REVIEW
ESCALATED?
CLOSED

Priority and SLA

PriorityScore RangeSLA
CRITICALFraud ≥ 0.85 or DECLINE4 hours
HIGHFraud ≥ 0.60 or STEP_UP8 hours
MEDIUMFraud ≥ 0.3024 hours
LOWOther72 hours

Working a Case

  1. Open the Cases view. Cases are sorted by SLA urgency (time remaining). Red = SLA at risk.
  2. Click a case to open Case Detail. You'll see: the transaction data, all five engine scores, the SHAP feature contributions bar chart, any rules that fired, and the event timeline.
  3. Click Assign to Me (or assign to another analyst).
  4. Review the evidence. Use the Notes field to document your reasoning.
  5. Set a Disposition: TRUE_POSITIVE (confirmed fraud), FALSE_POSITIVE (legitimate transaction), SUSPICIOUS (uncertain, keep open), or INCONCLUSIVE.
  6. TRUE_POSITIVE and FALSE_POSITIVE dispositions automatically send feedback signals to the ML engines.
Escalation: Click Escalate to bump a case's priority and flag it for senior analyst review. Escalation is recorded in the immutable case timeline.
p.06

SAR and CTR Drafting

Regulatory document workflow

Important: BankGuard assists with drafting — it does NOT auto-file. All SAR and CTR documents must be reviewed and filed manually by an authorized BSA Officer. Auto-filing would violate BSA compliance requirements.

SAR Workflow

  1. With a case open (must be TRUE_POSITIVE or SUSPICIOUS disposition), click Draft SAR.
  2. BankGuard sends the case context (transaction details, account history, scores, analyst notes) to an LLM and generates a FinCEN-format SAR narrative covering the 5W+H framework: Who, What, Where, When, Why, and How.
  3. The draft appears in the Documents tab of the case. Review it carefully — the AI draft is a starting point, not a finished document.
  4. Edit the narrative as needed in the document editor.
  5. Click Mark as Reviewed when the document is complete.
  6. File manually through your FinCEN BSA E-Filing portal. Return to BankGuard and click Mark as Filed to close the loop.

CTR Workflow

Identical to the SAR workflow, initiated with Draft CTR from a HIGH-value cash transaction case.

Document Status Flow

DRAFT REVIEWED FILED
p.07

The Rules Engine

Declarative fraud logic on top of ML scoring

Rules let you encode your institution's specific fraud policy as declarative logic. Rules fire before the ML score is returned — if a rule fires, its action is merged with the ML recommendation (most severe wins).

{ "name": "ACH velocity check — high risk", "conditions": { "operator": "AND", "conditions": [ { "field": "transaction.channel", "op": "eq", "value": "ACH" }, { "field": "transaction.amount", "op": "gt", "value": 9000 }, { "field": "features.tx_count_1h", "op": "gt", "value": 5 } ] }, "action": "STEP_UP", "priority": 10 }

Available fields: transaction.amount · transaction.channel · transaction.type · account.balance · account.age_days · customer.risk_tier · features.tx_count_1h · features.sum_24h · features.avg_amount_30d

Building a Rule

  1. Navigate to Rules → New Rule.
  2. Name the rule and add condition rows (field + operator + value). Nest with AND/OR groups.
  3. Set the action (APPROVE / STEP_UP / DECLINE) and priority (lower number = higher priority).
  4. Save as Inactive. Use Simulate to run it against the last 30 days of historical data before activating — the simulation returns how many transactions would have been hit and an estimated false-positive rate.
  5. When confident, set status to Active.
Setting override_ml: true on an APPROVE rule means the rule can suppress a STEP_UP generated by the ML engine. Use only for known-good transaction patterns with high confidence.
p.08

Graph Intelligence

Entity relationships and fraud ring detection

The entity graph tracks relationships between accounts, customers, merchants, devices, and IP addresses. Shared connections between fraud-confirmed entities and new accounts are a powerful leading indicator.

How the Graph Is Built

Using the Graph

Case Detail Graph Panel

On any case detail page, click Show Graph to open the entity graph for the transaction's account. You'll see the account's 2-hop neighborhood — all connected entities. Confirmed-fraud nodes appear in red. Shared devices or IPs with known-fraud accounts are an immediate red flag.

Ring Detection

From the Graph page, search for a node and click Detect Rings. BankGuard runs a DFS algorithm to find cycles of 3–8 hops — characteristic structures of money-muling and fraud ring operations. Each detected ring is shown with a confidence score (higher = tighter ring with more recent transactions).

Louvain community detection runs automatically every week and flags account clusters with abnormally high transaction density and low average amounts — a classic structuring pattern.
p.09

Quick Reference

Keyboard shortcuts, dispositions, and common questions

Keyboard Shortcuts

ShortcutAction
CGo to Cases queue
RGo to Rules list
GGo to Graph
MGo to Model Governance
BGo to Billing
Shift+NNext unworked case (by SLA)
Shift+AAssign current case to me
Shift+DDraft SAR for current case
?Open help

Case Disposition Quick Reference

DispositionWhen to useML effect
TRUE_POSITIVEConfirmed fraud — customer did NOT initiate thisTrains fraud engine: this was real
FALSE_POSITIVELegitimate — customer confirms they initiated thisTrains fraud engine: don't flag this pattern
SUSPICIOUSUnclear; cannot confirm either wayNo ML feedback sent
INCONCLUSIVEEvidence insufficient to determineNo ML feedback sent

Common Questions

A case just came in CRITICAL. What do I do first?
Open it immediately. The SHAP feature contributions will show why BankGuard is alarmed. Check if the account has active fraud rings in the graph panel. Contact the customer if Step-Up auth hasn't been completed. You have 4 hours before SLA breach.
The fraud score is 0.82 but it looks legitimate. What do I do?
Disposition it FALSE_POSITIVE. Include a note explaining why. This feeds back to the ML engine and will reduce false positives for this type of transaction over time. Don't leave it as SUSPICIOUS if you're confident.
I activated a rule and now I'm getting too many STEP_UPs.
Deactivate the rule immediately (it takes effect within 60 seconds). Review the simulation results for the rule — the estimated FP rate was your signal. Tighten the conditions and re-simulate before reactivating.
p.11

Checker Map: Docker

What bankguard-check.js verifies in the Docker deployment model

Each numbered badge shows which section of the System Integrity Checker is responsible for that component. A clean run means every badge-annotated component reported healthy.

DOCKER DELIVERY · docker-compose.server.yml + docker-compose.client.yml Bank Core or Browser HTTPS NGINX :443 /api/demo/score→:4299 /*→:5000 /* → :5000 docker-compose.server.yml bankguard-external · port :4299 exposed to reverse proxy bankguard-connector :4299 · REST scoring API · rules cache bankguard-internal · isolated network · no direct internet access NATS :4222 · account-isolated · BG_ENGINE · BG_CONNECTOR · BG_REGISTRY · BG_GRAPH bankguard-node NATS only · no HTTP fraud · risk · compliance retention · predictive bankguard-registry :4100 · SQLite node lifecycle cluster health state bankguard-cases :4200 · SQLite cases · SAR/CTR feedback · billing bankguard-rules :4201 · SQLite rules DSL · simulation cache push via NATS bankguard-graph :4202 · SQLite entity graph fraud ring detection storage: SQLite ×4 · Redis :6379 (feature store) · ONNX model files docker-compose.client.yml (separate deployment) bankguard-ui :5000 · Command Center React SPA · WebSocket hub /api/ui/* proxy · analyst workflow model governance · billing UI bankguard-web (static) marketing · demo · architecture · user-guide BANK INTEGRATION Bank’s core system calls: POST /api/v1/score Authorization: Bearer <key> Connector is the only service with an external-facing port. Command Center proxies to server services via HTTP (cases, rules, graph, registry). Both stacks can run on the same host or on separate servers. bankguard-node has no HTTP port — it is a pure NATS subscriber. The Connector fans scored requests to all 5 engines simultaneously over NATS subjects scoped per tenant. 1 ENV 2 NATS 3 HEALTH 4 SMOKE What bankguard-check.js verifies: 1 ENV — .env vars across all services 2 NATS — TCP probe :4222 3 HEALTH — HTTP /health per service 4 SMOKE — synthetic POST /api/v1/score 5 POSTURE — static analysis log
p.12

Checker Map: PM2

What bankguard-check.js verifies in the PM2 / bare-metal deployment model

This is the live deployment on the AnswerPoint VPS. The numbered badges match exactly the five sections reported in the checker's terminal output. If a badge-annotated component is failing, its checker section will report FAIL or WARN.

PM2 / BARE-METAL DEPLOYMENT · current live on VPS 104.207.95.68 VPS 104.207.95.68 · all services bind to 127.0.0.1 INTERNET Bank Core → HTTPS → bankguard.apintelligence.ai (Nginx :443) /api/demo/score → 127.0.0.1:4299 (auth injected server-side) · /* → 127.0.0.1:5000 (WebSocket upgrade) NGINX :443 · bankguard.apintelligence.ai /api/demo/score → 127.0.0.1:4299 (auth injected) /* → 127.0.0.1:5000 (WebSocket upgrade) PM2 PROCESSES NATS 127.0.0.1:4222 · account-isolated: BG_ENGINE · BG_CONNECTOR · BG_REGISTRY · BG_UI · BG_GRAPH bankguard-connector 127.0.0.1:4299 REST API · rules cache · metering Redis feature store bankguard-node NATS only · no HTTP port fraud · risk · compliance retention · predictive bankguard-registry 127.0.0.1:4003 node lifecycle · SQLite cluster health · heartbeat bankguard-cases 127.0.0.1:4200 case queue · SAR/CTR feedback loop · billing bankguard-rules 127.0.0.1:4201 rules DSL · simulation cache push → connector bankguard-graph 127.0.0.1:4202 entity graph · SQLite DFS ring detection bankguard-ui 127.0.0.1:5000 Command Center · WebSocket /api/ui/* proxy bankguard-web static files (nginx serves) marketing · demo · architecture user-guide.html bankguard-check.js System Integrity Checker node bankguard-check.js run after deploy or to troubleshoot STORAGE SQLite ×4 (registry.db · cases.db · rules.db · graph.db) Redis :6379 (feature store · 127.0.0.1) · ONNX model files (/var/www/html/bankguard/bankguard-node/models/) 1 1 1 2 3 3 3 3 3 3 4 5 What bankguard-check.js verifies at each numbered point: 1 ENV — required vars set, no placeholders, PII key length 2 NATS — TCP probe :4222, verify INFO handshake 3 HEALTH — GET /health on each service port 4 SMOKE — POST synthetic transaction, verify score response 5 POSTURE — read /var/log/bankguard-static-analysis.log
p.10

System Integrity Check

Verify that every BankGuard service, NATS connection, and engine is operating correctly

Running the Checker

The System Integrity Checker is a Node.js script included with every BankGuard installation. Run it after deployment or when troubleshooting connectivity issues:

node /var/www/html/bankguard/bankguard-check.js

For automated pipelines, add --json for structured output, or --quiet to suppress display and rely on the exit code (0 = all pass, 1 = failure, 2 = checker error).

What the Checker Verifies

SectionChecks performed
1 · EnvironmentAll required env vars set and non-placeholder across bankguard-node, bankguard-connector, and bankguard-registry. PII key length (64 hex chars) and key-pair distinctness validated.
2 · NATSTCP probe confirms NATS server accepts connections on the configured port and returns an INFO handshake.
3 · Service HealthHTTP health check against Registry (:4100), Connector (:4299), Cases (:4200), Rules (:4201), Graph (:4202), and UI (:5000). Uptime reported per service.
4 · Engine Smoke TestPosts a synthetic transaction to the Connector API and verifies that fraud, risk, and compliance engines return a scored response.
5 · Security PostureReads the static analysis log to report open issue count and last run timestamp.

Common Failures and Fixes

PII_ENCRYPTION_KEY not set or wrong length
Open bankguard-node/.env and set PII_ENCRYPTION_KEY to a 64-character hex string (32 random bytes). Generate one with: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
NATS not reachable at 127.0.0.1:4222
Start NATS with nats-server -c /etc/nats/nats.conf or check its PM2 status with pm2 status. Confirm port 4222 is not blocked by a local firewall rule.
Connector returned 401 — API key rejected
The CONNECTOR_API_KEY in bankguard-connector/.env does not match. Verify both files use the same value, then restart: pm2 restart bankguard-connector.
One or more services not responding
Run pm2 status to find stopped or erroring processes. Check logs with pm2 logs <service-name>. The most common cause is a missing or malformed .env value that prevents startup.