Wire Transfer Approval
Zero fraudulent or duplicate wires
Wire transfers are the single highest-risk finance action. One mis-directed wire is often unrecoverable — the money is gone before anyone notices. Business email compromise attacks specifically target wire flows: a fake CEO email, a spoofed vendor request, a plausible urgency. The manual approval flow ("CFO glances at the email") is the exact failure mode BEC exploits.
An hour-by-hour walkthrough.
Step by step.
- 01
Collect wire request + docs
Requester provides: amount, beneficiary, invoice / PO reference, business justification. Fin ingests via Slack / Teams / portal, extracts structured data.
Slack · Teams · Portal · NetSuite - 02
Verify beneficiary against approved list
Cross-check against the vetted-beneficiary list: bank account, routing number, tax ID, address. Mismatch or missing = escalation. Never wire to a beneficiary not on the list without explicit approval.
Bank · NetSuite · Bill.com - 03
3-way invoice match
Verify invoice, PO, and receipt all match (amount, quantity, terms). Discrepancy = flag for AP review, not auto-approve.
NetSuite · Bill.com · Coupa - 04
Route for approval
Two-person approval required: treasury + CFO (or DoA-defined equivalent). Both require step-up MFA on the approval action. Approval card includes full context + risk score.
Slack · Approval Policies - 05
Execute after multi-party sign-off
Once both approvers confirm with MFA, Fin submits the wire via bank API. Bank confirmation returned. Audit event written with all approvers, timestamps, and MFA verification.
Bank API · Audit log
What you connect to make this run.
Bank (JPMorgan · SVB · Wise · Mercury)
writeBank API with wire-transfer scope. Wire submitted only after all approvals + MFA verifications complete. Idempotent by request-hash to prevent duplicate submission.
NetSuite · Bill.com · Coupa
readRead invoice + PO + receipt for 3-way match. Beneficiary record read for verification. Every wire tied back to a specific invoice.
Slack · Teams
writeApproval routing. Step-up MFA challenges via Okta / Duo. Approval cards include full context — no approver has to switch context to decide.
Vanta · Drata
writeSOC 2 evidence auto-generated per wire: approval chain, MFA verifications, timestamps. Continuous audit-readiness.
Before and after, honestly.
Playbooks that pair with this one.
Bill Payment Approval
The general-case AP flow; wires are the highest-risk variant.
Vendor Intake & Onboarding
New beneficiaries require the vendor-onboarding vetting before their first wire.
Vendor Risk + Payment Hold
Vendors that change risk posture get payments frozen before wires attempt.
Security Alert Triage & Context
BEC-attempt detections feed the security queue for investigation.
Answers about this playbook.
What if we need to wire to a brand-new beneficiary urgently?
Exception path with additional scrutiny. Requester provides bank details; treasury independently verifies via a phone call to a known contact at the vendor (never via reply-email — that's exactly the BEC vector). Verified new beneficiary gets added to the approved list. Same two-person approval.
How does this handle international wires?
Same flow with international-wire-specific fields (SWIFT, IBAN, correspondent banks, purpose code). Some jurisdictions require additional documentation; Fin collects at intake.
What's the CFO-level approval threshold?
Configurable per your DoA. Common thresholds: treasury for wires up to $50k, treasury + CFO for $50k-$500k, treasury + CFO + board for above $500k. Fin routes per your matrix.
Can we auto-approve recurring wires (e.g., monthly rent)?
Yes — recurring-wire template with periodic-approval refresh. Board approves the recurring wire once ("$25k monthly to landlord for 12 months"); individual instances execute without per-wire approval, still with audit + notification.
What if a wire fails at the bank?
Bank API returns the failure reason (insufficient funds, invalid beneficiary, sanctions match). Fin surfaces to treasury with the specific error; nothing retried automatically for banking failures.
See it run on your data.
Free plan, no credit card. Connect the systems this playbook needs and run it against a past event first.