Detect fraudulent incoming ACH credits and transfers
Decide whether an incoming ACH credit is the proceeds of fraud at the sender, and whether to release, hold or return it, from the account's history, the ACH entry and what happened after it posted.
Grayson tells a receiving bank or fintech whether an incoming ACH credit or transfer is likely the proceeds of fraud at the sender, how likely its own customer is acting as a money mule, and whether to release the funds, hold them while it contacts the sending bank, or return the credit. It reads months of the account's activity, its logins and profile changes, the ACH entry and its originator's history with you, and what happened after it posted, and costs about $0.47 to $0.76 per 1,000 decisions.
- Decides: Release, hold or return an incoming credit that may be proceeds of BEC, account takeover or payroll diversion.
- Call it: When a large or out-of-pattern incoming ACH credit or transfer posts
- Questions: 1 yes/no, 1 score, 1 choice
- Cost: $0.00047 to $0.00076 per decision ($0.47 to $0.76 per 1,000) for these examples' 13,566 to 21,788 input tokens
- Latency: 192 to 312 ms for these examples, the median of 5 calls each through api.finic.ai from US-West
Examples
Three large corporate credits to personal checking accounts, each sent with five months of transactions, about two months of online-banking events and everything since the credit posted: a payment meant for a timber supplier that lands with a laid-off worker recruited into a "payments" job, a tile contractor's payment from a builder that has paid him for two years, and a new LLC's first big invoice paid into its owner's personal account.
Open in Playground
A $46,215 payment meant for a timber supplier lands with a laid-off retail worker. A same-day corporate vendor payment addressed to a timber supplier posts to the seven-month-old account of a member who lost her job in August and told us she now 'processes payments' for a company she met over a messaging app. A week earlier a smaller credit for a different business went straight to a crypto exchange from a PC on a hosting network, and that PC is moving this one too.
| Question | Grayson's answer |
|---|---|
proceeds_of_fraud | 98% true |
mule_likelihood | 3.92 of 4, confidence 95% |
action | hold_and_contact, confidence 82% |
13,566 input tokens, $0.00047 per decision, answered in 192 ms.
The request, with long lists cut short. The full request is fraud.json (49 KB).
{
"model": "grayson-1",
"state": {
"review": {
"as_of": "2026-10-06T16:40:00Z",
"queue": "Incoming ACH review",
"trigger": "Same-day ACH CCD credit of $46,215.00 to a consumer account",
"rules_fired": [
"ACH-01 corporate credit (CCD/CTX) over $10,000 to a consumer account",
"ACH-04 receiver name in the entry does not match an account owner",
"ACH-06 credit more than 1.5 times the largest ACH credit in the last 12 months",
"ACH-11 outbound transfer of more than 50% of a credit within 24 hours of posting",
"DIG-03 device first seen in the last 30 days on a hosting-provider network"
],
"funds_status": "Credit posted with funds available; no hold placed at posting"
},
"member": {
"name": "Kendra L. Moyer",
"age": 29,
"member_since": "2026-03-02",
"address": "Dayton, OH (apartment; at this address since 2024 per bureau)",
"occupation_at_opening": "Retail sales associate, Riverbend Outfitters",
"stated_monthly_deposits_usd": 2500,
"identity_verification_at_opening": "Passed: driver's license authenticated, selfie match, bureau address and SSN match",
"account_screening_at_opening": "No prior account closures for cause",
"phone_on_file": "(937) 555-0144, unchanged since opening, mobile, 6 years tenure",
"email_on_file": "kmoyer.ky@example.com, unchanged since opening",
"risk_rating": "Standard",
"business_relationships_on_file": "None",
"other_products": [
"Share savings x4419 ($5.00)",
"Auto loan x4420 ($6,112.80 remaining, current)"
]
},
"account": {
"account": "Personal checking x4418",
"owners": [
"Kendra L. Moyer"
],
"opened": "2026-03-02",
"opening_channel": "Online application",
"debit_card": "x8830, active",
"limits": {
"online_wire_per_day_usd": 10000,
"external_transfer_per_day_usd": 10000,
"p2p_per_day_usd": 2500,
"atm_per_day_usd": 500,
"courtesy_pay_usd": 500
},
"largest_ach_credit_prior_12_months_usd": 4870,
"average_balance_90d_usd": 1025.3
},
"prior_alerts_and_cases": [],
"monthly_summary": {
"columns": [
"month",
"credits_usd",
"credit_count",
"debits_usd",
"debit_count",
"ending_balance_usd",
"overdraft_or_nsf_fees"
],
"rows": [
[
"2026-05",
2217.41,
3,
1907.84,
29,
1493.94,
0
],
[
"2026-06",
2335.59,
3,
2351.25,
35,
1478.28,
0
],
[
"2026-07",
3383.43,
4,
2868.03,
36,
1993.68,
0
],
[
"2026-08",
872.66,
2,
2098.96,
30,
767.38,
0
],
[
"2026-09",
7004,
8,
6406.96,
26,
1364.42,
1
],
[
"2026-10",
612.4,
1,
1112.7,
5,
864.12,
0
]
]
},
"transactions": {
"note": "Posted items 2026-05-01 to 2026-10-05; debits negative; balance is the ledger balance after each item",
"columns": [
"posted",
"type",
"description",
"amount_usd",
"balance_usd"
],
"rows": [
[
"2026-05-01",
"ACH debit",
"ASHFORD COMMONS RENT WEB",
-925,
259.37
],
[
"2026-05-02",
"Card",
"DOLLAR GENERAL #14420 DAYTON OH",
-42.43,
216.94
],
[
"2026-05-05",
"ACH debit",
"PROGRESSIVE INS PREM PPD",
-118.4,
98.54
],
[
"2026-05-06",
"Card",
"WENDY'S #4420 DAYTON OH",
-6.42,
92.12
],
[
"2026-05-07",
"Card",
"DOLLAR GENERAL #14420 DAYTON OH",
-42.27,
49.85
],
"… 177 more in fraud.json"
]
},
"ach_originators_on_account": {
"columns": [
"company_name",
"company_id",
"sec",
"entry_description",
"receiver_names",
"… 5 more in fraud.json"
],
"rows": [
[
"RIVERBEND OUTFIT",
"x2231",
"PPD",
"PAYROLL",
[
"KENDRA MOYER"
],
"… 5 more in fraud.json"
],
[
"STATE UI BENEFIT",
"x0007",
"PPD",
"UI PAYMENT",
[
"KENDRA MOYER"
],
"… 5 more in fraud.json"
],
[
"PELLWORTH DENTAL",
"x5162",
"CCD",
"VENDOR PMT",
[
"KESSWICK MEDICAL SUPPL"
],
"… 5 more in fraud.json"
],
[
"ORVELLE TRADE PA",
"x9930",
"PPD",
"PAYROLL",
[
"KENDRA MOYER"
],
"… 5 more in fraud.json"
]
]
},
"devices": {
"columns": [
"device",
"description",
"first_seen",
"last_seen",
"logins_since_first_seen",
"networks"
],
"rows": [
[
"D1",
"iPhone, our mobile app",
"2026-03-02",
"2026-10-06",
191,
"Residential ISP and mobile carrier, Dayton OH"
],
[
"D2",
"Windows PC, Chrome, online banking",
"2026-09-23",
"2026-10-06",
5,
"Hosting provider, Houston TX (203.0.113.88)"
]
]
},
"online_banking_log": {
"note": "From 2026-08-15; times UTC",
"columns": [
"ts",
"event",
"device",
"ip",
"network",
"auth",
"detail"
],
"rows": [
[
"2026-08-16T02:04:29Z",
"login",
"D1",
"192.0.2.171",
"Mobile carrier, Dayton OH",
"Face ID",
""
],
[
"2026-08-17T05:12:17Z",
"login",
"D1",
"198.51.100.23",
"Residential ISP, Dayton OH",
"Face ID",
""
],
[
"2026-08-20T05:18:59Z",
"login",
"D1",
"198.51.100.23",
"Residential ISP, Dayton OH",
"Face ID",
""
],
[
"2026-08-21T05:18:40Z",
"login",
"D1",
"198.51.100.23",
"Residential ISP, Dayton OH",
"Face ID",
""
],
[
"2026-08-21T22:44:44Z",
"login",
"D1",
"192.0.2.216",
"Mobile carrier, Dayton OH",
"Face ID",
""
],
"… 49 more in fraud.json"
]
},
"payees_and_external_accounts": {
"columns": [
"type",
"name",
"added",
"added_from",
"verification",
"payments",
"total_usd",
"last_paid"
],
"rows": [
[
"P2P",
"JAMAL REESE",
"2026-03-20",
"D1",
"Phone number enrolled with P2P network",
7,
185,
"2026-08-30"
],
[
"P2P",
"TASHA GRANT",
"2026-03-20",
"D1",
"Phone number enrolled with P2P network",
6,
150,
"2026-07-26"
],
[
"External account",
"x9012, cryptocurrency exchange",
"2026-09-23",
"D2",
"Instant verification, owner name KENDRA MOYER",
2,
4420,
"2026-09-29"
]
]
},
"member_contacts": [
{
"ts": "2026-06-04T17:12:00Z",
"channel": "Phone",
"summary": "Member asked when her direct deposit posts on a Friday holiday. Told the prior business day."
},
{
"ts": "2026-09-02T15:31:00Z",
"channel": "Phone",
"summary": "Member asked to waive the 9/1 overdraft fee; said she lost her job in August and is waiting on unemployment. Fee refunded as a courtesy (first in 12 months)."
},
{
"ts": "2026-09-23T15:48:12Z",
"channel": "Secure message",
"summary": "From member: 'Hi, I got a new remote job as a payment processing coordinator. Part of the job is receiving payments from my company's clients and sending them on to vendors. Is that ok on my personal account or do I need to tell you anything?'"
},
{
"ts": "2026-09-24T14:10:00Z",
"channel": "Secure message",
"summary": "Reply from member services: personal accounts are for personal use and business payments may need a business account. Warned that scammers recruit people through remote jobs to move money through their accounts, and asked her to call before sending money for anyone."
},
{
"ts": "2026-10-05T16:22:05Z",
"channel": "Secure message",
"summary": "From member: 'I'm getting a payment of $46,215 from one of my employer's clients tomorrow and I have to send it to the supplier the same day. Can you raise my wire limit to $50,000? The supplier is Bramwick Timber Supply.'"
},
{
"ts": "2026-10-05T19:40:00Z",
"channel": "Phone",
"summary": "Member called about the wire limit. Agent explained the online wire limit is $10,000 a day for accounts open less than 12 months and larger wires need a phone or branch request and are reviewed. Member said she works for Orvelle Trade Partners, was hired after an interview over a messaging app and has not met her manager in person. Agent read the job-scam warning (script FR-7). Member said the company is legitimate and she signed a contract. No limit change made."
}
],
"credit_under_review": {
"received": "2026-10-06T15:12:40Z",
"posted": "2026-10-06T15:14:02Z",
"rail": "Same-day ACH, first window (settles 2026-10-06)",
"sec_code": "CCD",
"amount_usd": 46215,
"company_name": "QUELLMAN MILLWRK",
"company_id": "x4471",
"company_entry_description": "VENDOR PAY",
"receiver_name": "BRAMWICK TIMBER SUPPLY",
"receiver_id_number": "NTS-0042",
"addenda": "INV 88213 88240 88252 NET 30",
"sending_bank": "Community bank, Eau Claire WI (routing xxxxx0419)",
"trace_number": "xxxxxxxxxx21344",
"account_number_in_entry": "x4418 (matches this account)",
"return_deadline": "R17 return must reach the sending bank by opening of business 2026-10-08 (2 banking days after settlement)"
},
"originator_and_sending_bank": {
"originator_history_with_this_account": "None before this entry",
"originator_history_at_our_bank": "No entries from company ID x4471 to any member in the 24 months on file",
"sending_bank_history": "312 entries to our members in the last 12 months, mostly PPD payroll; 2 returned (0.6%), no fraud reports",
"sending_bank_contact": "ACH fraud desk on file (phone and secure email); not yet contacted",
"receiver_name_check": "BRAMWICK TIMBER SUPPLY does not match the owner (KENDRA L MOYER); no member or business at our bank by that name",
"earlier_mismatched_credit": "2026-09-29 CCD $4,870.00 from PELLWORTH DENTAL to receiver KESSWICK MEDICAL SUPPL; $4,400.00 sent to the crypto exchange account 2 hours after posting",
"consortium_checks": "Member identity, phone and email: no fraud reports. Crypto exchange account x9012: no reports"
},
"notices_from_sending_bank": [],
"activity_since_credit": [
{
"ts": "2026-10-06T15:21:07Z",
"type": "login",
"device": "D2",
"ip": "203.0.113.88",
"network": "Hosting provider, Houston TX",
"auth": "Password + SMS code"
},
{
"ts": "2026-10-06T15:23:40Z",
"type": "external_transfer",
"device": "D2",
"amount_usd": 9500,
"to": "x9012, cryptocurrency exchange (linked 2026-09-23)",
"status": "Pending, sends in the 15:00 ET ACH window"
},
{
"ts": "2026-10-06T15:29:12Z",
"type": "online_wire_request",
"device": "D2",
"amount_usd": 36000,
"beneficiary": "BRAMWICK TIMBER SUPPLY, business account at another US bank, never paid",
"status": "Rejected: over online wire limit"
},
{
"ts": "2026-10-06T15:31:55Z",
"type": "login",
"device": "D1",
"ip": "192.0.2.61",
"network": "Mobile carrier, Dayton OH",
"auth": "Face ID"
},
{
"ts": "2026-10-06T15:33:10Z",
"type": "p2p_payee_added",
"device": "D1",
"payee": "MARCUS LEDFORD, individual, never paid"
},
"… 4 more in fraud.json"
],
"balances": {
"ledger_before_credit_usd": 864.12,
"ledger_now_usd": 44079.12,
"available_now_usd": 34579.12,
"pending_outbound_usd": {
"external_transfer": 9500,
"phone_wire_request": 33700
}
}
},
"questions": {
"proceeds_of_fraud": {
"type": "noul",
"instructions": "Is the credit under review the proceeds of fraud against the sender or someone else, such as business email compromise, account takeover, payroll diversion or a scam?"
},
"mule_likelihood": {
"type": "score",
"instructions": "How likely is it that the account holder is acting as a money mule, knowingly or unknowingly, by receiving the credit under review and moving it on for someone else?",
"criteria": [
"Very unlikely (under 10%)",
"Unlikely (10-40%)",
"Uncertain (40-60%)",
"Likely (60-90%)",
"Very likely (over 90%)"
]
},
"action": {
"type": "choice",
"instructions": "What should the receiving institution do with the credit under review?",
"criteria": {
"release": "Release the funds and allow normal account activity",
"hold_and_contact": "Hold the funds, restrict outbound transfers and contact the sending bank to confirm the payment",
"return": "Return the credit to the sending bank as suspected fraud and restrict outbound transfers"
}
}
}
}The response. Probabilities and confidence are shortened to four decimals here, and the score to three; responses carry full precision.
{
"id": "dec_29d5891e72e742bfb2b76c01cfa20faf",
"model": "grayson-1",
"answers": {
"proceeds_of_fraud": {
"type": "noul",
"noul": 0.9797
},
"mule_likelihood": {
"type": "score",
"score": 3.918,
"legend": {
"0": "Very unlikely (under 10%)",
"1": "Unlikely (10-40%)",
"2": "Uncertain (40-60%)",
"3": "Likely (60-90%)",
"4": "Very likely (over 90%)"
},
"confidence": 0.9495,
"probabilities": {
"0": 0.0065,
"1": 0.0083,
"2": 0.0057,
"3": 0.0199,
"4": 0.9596
}
},
"action": {
"type": "choice",
"choice": "hold_and_contact",
"confidence": 0.8175,
"probabilities": {
"release": 0.0028,
"hold_and_contact": 0.8783,
"return": 0.1189
}
}
},
"usage": {
"input_tokens": 13566,
"output_tokens": 0
}
}Open in Playground
A tile contractor's largest-ever payment from a builder that has paid him for two years. An $18,740 corporate payment addressed to the member's trade name trips four rules: business name on a personal account, largest credit ever, a phone first seen two days earlier, and most of the money leaving within the hour. The record explains each one: the DBA has been on file since 2019, this builder has paid the same account ten times, the new phone came with a verified password-reset call, and the money went to his usual tile supplier, his crew and his own savings.
| Question | Grayson's answer |
|---|---|
proceeds_of_fraud | 1% true |
mule_likelihood | 0.01 of 4, confidence 99% |
action | release, confidence over 99% |
21,788 input tokens, $0.00076 per decision, answered in 238 ms.
The request, with long lists cut short. The full request is legitimate.json (74 KB).
{
"model": "grayson-1",
"state": {
"review": {
"as_of": "2026-10-02T14:30:00Z",
"queue": "Incoming ACH review",
"trigger": "ACH CCD credit of $18,740.00 to a consumer account",
"rules_fired": [
"ACH-01 corporate credit (CCD/CTX) over $10,000 to a consumer account",
"ACH-04 receiver name in the entry does not match an account owner",
"ACH-06 credit more than 1.5 times the largest ACH credit in the last 12 months",
"DIG-01 device first seen in the last 7 days on an account receiving a credit over $10,000"
],
"funds_status": "Credit posted with funds available; no hold placed at posting"
},
"member": {
"name": "Hector A. Ruiz (joint owner Marisol P. Ruiz)",
"age": 47,
"member_since": "2014-08-22",
"address": "Hilliard, OH (owned home; at this address since 2017)",
"occupation_on_file": "Self-employed tile installer, sole proprietor, doing business as Ruiz Tile & Stone (recorded 2019-04-11, confirmed at the 2025 KYC refresh)",
"joint_owner_occupation": "Medical receptionist, Briarwood Pediatrics",
"stated_monthly_deposits_usd": 12000,
"identity_verification": "Verified in branch at membership, 2014",
"phone_on_file": "(614) 555-0172, unchanged since 2014",
"email_on_file": "hruiz.tile@example.net, unchanged since 2019",
"risk_rating": "Standard",
"business_relationships_on_file": "Sole proprietor; DBA Ruiz Tile & Stone on file since 2019; no separate business account",
"other_products": [
"Savings x5107 ($22,410.36)",
"Credit card x3391 (paid in full monthly)",
"Auto loan x5110, paid off 2025-11"
]
},
"account": {
"account": "Joint checking x5106",
"owners": [
"Hector A. Ruiz",
"Marisol P. Ruiz"
],
"opened": "2019-04-11",
"opening_channel": "Branch",
"debit_cards": [
"x2207 (Hector)",
"x2215 (Marisol)"
],
"limits": {
"online_wire_per_day_usd": 25000,
"external_transfer_per_day_usd": 25000,
"p2p_per_day_usd": 2500,
"atm_per_day_usd": 800,
"courtesy_pay_usd": 500
},
"largest_ach_credit_prior_12_months_usd": 11200,
"average_balance_90d_usd": 12560.83
},
"prior_alerts_and_cases": [
{
"opened": "2025-03-14",
"rule": "ACH-01 corporate credit over $10,000 to a consumer account",
"item": "CCD $10,450.00 from BRANDT KOLB BLDR to RUIZ TILE AND STONE",
"closed": "2025-03-14",
"outcome": "No concern. Member is a sole proprietor with DBA on file; builder has paid him since 2024. Member offered invoice 1874 by email."
}
],
"monthly_summary": {
"columns": [
"month",
"credits_usd",
"credit_count",
"debits_usd",
"debit_count",
"ending_balance_usd",
"overdraft_or_nsf_fees"
],
"rows": [
[
"2026-05",
20789.03,
7,
16728.4,
57,
18941.05,
0
],
[
"2026-06",
21529.71,
5,
28791.07,
68,
11679.69,
0
],
[
"2026-07",
21885.2,
7,
16159.48,
57,
17405.41,
0
],
[
"2026-08",
16126.28,
5,
21545.14,
64,
11986.55,
0
],
[
"2026-09",
18630.73,
6,
22257.96,
63,
8359.32,
0
],
[
"2026-10",
0,
0,
2546.1,
3,
5813.22,
0
]
]
},
"transactions": {
"note": "Posted items 2026-05-01 to 2026-10-01; debits negative; balance is the ledger balance after each item",
"columns": [
"posted",
"type",
"description",
"amount_usd",
"balance_usd"
],
"rows": [
[
"2026-05-01",
"ACH debit",
"ROCKET MORTGAGE MTG PYMT PPD",
-2184.17,
12696.25
],
[
"2026-05-01",
"Card",
"SHEETZ 0612 COLUMBUS OH",
-64.98,
12631.27
],
[
"2026-05-01",
"P2P out",
"P2P TO LUIS ORTEGA",
-920,
11711.27
],
[
"2026-05-02",
"Card",
"COSTCO WHSE #1092 COLUMBUS OH",
-174.46,
11536.81
],
[
"2026-05-02",
"Card",
"AMAZON MKTPL*BSO2XEPF3",
-110.75,
11426.06
],
"… 337 more in legitimate.json"
]
},
"ach_originators_on_account": {
"columns": [
"company_name",
"company_id",
"sec",
"entry_description",
"receiver_names",
"… 5 more in legitimate.json"
],
"rows": [
[
"BRANDT KOLB BLDR",
"x7720",
"CCD",
"AP PAYMENT",
[
"RUIZ TILE AND STONE",
"HECTOR RUIZ"
],
"… 5 more in legitimate.json"
],
[
"HOLLOWAY HOMES",
"x3318",
"CCD",
"SUBCONTRCT",
[
"HECTOR RUIZ"
],
"… 5 more in legitimate.json"
],
[
"NEW LEAF REMODEL",
"x6604",
"CCD",
"PAYMENT",
[
"RUIZ TILE & STONE"
],
"… 5 more in legitimate.json"
],
[
"BRIARWOOD PEDIAT",
"x1290",
"PPD",
"PAYROLL",
[
"MARISOL RUIZ"
],
"… 5 more in legitimate.json"
],
[
"IRS TREAS 310",
"x0001",
"PPD",
"TAX REF",
[
"HECTOR RUIZ"
],
"… 5 more in legitimate.json"
]
]
},
"devices": {
"columns": [
"device",
"description",
"first_seen",
"last_seen",
"logins_since_first_seen",
"networks"
],
"rows": [
[
"D1",
"iPhone (Hector), our mobile app",
"2022-01-14",
"2026-09-28",
1406,
"Home ISP and mobile carrier, Columbus OH area; Myrtle Beach SC 2026-07-12 to 07-18"
],
[
"D2",
"Android phone (Marisol), our mobile app",
"2023-05-02",
"2026-10-02",
588,
"Home ISP and mobile carrier, Columbus OH area"
],
[
"D3",
"Windows PC, Edge, online banking",
"2020-11-03",
"2026-09-21",
301,
"Home ISP, Hilliard OH"
],
[
"D4",
"iPhone (Hector), our mobile app",
"2026-09-30",
"2026-10-02",
4,
"Home ISP and mobile carrier, Columbus OH"
]
]
},
"online_banking_log": {
"note": "From 2026-08-15; times UTC",
"columns": [
"ts",
"event",
"device",
"ip",
"network",
"auth",
"detail"
],
"rows": [
[
"2026-08-15T21:37:58Z",
"login",
"D1",
"192.0.2.180",
"Mobile carrier, Columbus OH",
"Face ID",
""
],
[
"2026-08-15T22:31:47Z",
"login",
"D2",
"198.51.100.140",
"Residential ISP, Hilliard OH",
"Fingerprint",
""
],
[
"2026-08-16T10:22:26Z",
"login",
"D1",
"192.0.2.150",
"Mobile carrier, Columbus OH",
"Face ID",
""
],
[
"2026-08-17T22:59:39Z",
"login",
"D2",
"198.51.100.140",
"Residential ISP, Hilliard OH",
"Fingerprint",
""
],
[
"2026-08-18T00:24:43Z",
"login",
"D1",
"192.0.2.146",
"Mobile carrier, Columbus OH",
"Face ID",
""
],
"… 67 more in legitimate.json"
]
},
"payees_and_external_accounts": {
"columns": [
"type",
"name",
"added",
"added_from",
"verification",
"payments",
"total_usd",
"last_paid"
],
"rows": [
[
"Bill pay",
"CENTRAL OHIO TILE SUPPLY",
"2021-03-09",
"D3",
"Business payee, address on file",
22,
71844.21,
"2026-09-14"
],
[
"P2P",
"LUIS ORTEGA",
"2024-02-16",
"D1",
"Phone number enrolled with P2P network",
41,
31560,
"2026-09-25"
],
[
"P2P",
"ANDRE WATKINS",
"2025-06-06",
"D1",
"Phone number enrolled with P2P network",
12,
4450,
"2026-09-11"
],
[
"External account",
"x8840, savings at another US bank (owner HECTOR RUIZ)",
"2022-10-03",
"D3",
"Micro-deposits",
9,
18000,
"2026-01-12"
]
]
},
"member_contacts": [
{
"ts": "2026-08-20T01:05:18Z",
"channel": "Secure message",
"summary": "From Hector: 'Do you have business checking? My accountant says I should keep the tile business separate from our personal account.' Reply 2026-08-20: business checking can be opened at a branch with the DBA certificate and EIN letter. No appointment made."
},
{
"ts": "2026-09-18T23:12:40Z",
"channel": "Mobile deposit review",
"summary": "Check deposit of $2,275.00 from a homeowner, memo 'master bath tile', endorsed Ruiz Tile & Stone. Accepted, no hold."
},
{
"ts": "2026-09-30T22:02:00Z",
"channel": "Phone",
"summary": "Hector called: got a new phone, the app asked for a code and he had forgotten his password. Identity verified by security questions and a code to the phone on file. Walked him through the reset. No changes to phone, email or address."
}
],
"credit_under_review": {
"received": "2026-10-02T06:30:00Z",
"posted": "2026-10-02T10:05:11Z",
"rail": "ACH, next-day (settled 2026-10-02)",
"sec_code": "CCD",
"amount_usd": 18740,
"company_name": "BRANDT KOLB BLDR",
"company_id": "x7720",
"company_entry_description": "AP PAYMENT",
"receiver_name": "RUIZ TILE AND STONE",
"receiver_id_number": "V-0117",
"addenda": "INV 2291 2297 RETAINAGE ASHGROVE PH2 LOTS 14 15",
"sending_bank": "Regional bank, Columbus OH (routing xxxxx3156)",
"trace_number": "xxxxxxxxxx08816",
"account_number_in_entry": "x5106 (matches this account)",
"return_deadline": "R17 return must reach the sending bank by opening of business 2026-10-06 (2 banking days after settlement)"
},
"originator_and_sending_bank": {
"originator_history_with_this_account": "10 entries since 2024-06-21, $2,960.00 to $11,200.00, receiver RUIZ TILE AND STONE (8) or HECTOR RUIZ (2); same company ID, description and receiver ID V-0117 since 2025; none returned or disputed",
"originator_history_at_our_bank": "61 entries to 14 other members in the last 12 months, all CCD AP PAYMENT (subcontractor payments); no returns or fraud reports",
"sending_bank_history": "4,880 entries to our members in the last 12 months; 0.2% returned, no fraud reports",
"sending_bank_contact": "ACH fraud desk on file (phone and secure email); not yet contacted",
"receiver_name_check": "RUIZ TILE AND STONE does not match the owners by name; matches the DBA on file for Hector A. Ruiz",
"consortium_checks": "Members' identities, phones and emails: no fraud reports"
},
"notices_from_sending_bank": [],
"activity_since_credit": [
{
"ts": "2026-10-02T11:12:44Z",
"type": "login",
"device": "D4",
"ip": "198.51.100.140",
"network": "Residential ISP, Hilliard OH",
"auth": "Face ID"
},
{
"ts": "2026-10-02T11:15:02Z",
"type": "bill_payment",
"device": "D4",
"amount_usd": 9316.4,
"to": "CENTRAL OHIO TILE SUPPLY (payee since 2021, 22 payments)",
"memo": "Acct 40417 stmt 9/30",
"status": "Scheduled, sends 2026-10-02"
},
{
"ts": "2026-10-02T11:18:27Z",
"type": "p2p_payment",
"device": "D4",
"amount_usd": 880,
"to": "LUIS ORTEGA (paid 41 times)",
"status": "Sent"
},
{
"ts": "2026-10-02T11:20:09Z",
"type": "internal_transfer",
"device": "D4",
"amount_usd": 4000,
"to": "Savings x5107 (own)",
"status": "Completed"
},
{
"ts": "2026-10-02T12:47:31Z",
"type": "card_authorization",
"card": "x2207",
"amount_usd": 612.33,
"merchant": "FLOOR & DECOR #170 COLUMBUS OH",
"status": "Approved, pending"
},
{
"ts": "2026-10-02T13:05:50Z",
"type": "login",
"device": "D2",
"ip": "192.0.2.77",
"network": "Mobile carrier, Columbus OH",
"auth": "Fingerprint"
}
],
"balances": {
"ledger_before_credit_usd": 5813.22,
"ledger_now_usd": 19673.22,
"available_now_usd": 9744.49,
"pending_outbound_usd": {
"bill_payment": 9316.4,
"card_authorization": 612.33
}
}
},
"questions": {
"proceeds_of_fraud": {
"type": "noul",
"instructions": "Is the credit under review the proceeds of fraud against the sender or someone else, such as business email compromise, account takeover, payroll diversion or a scam?"
},
"mule_likelihood": {
"type": "score",
"instructions": "How likely is it that the account holder is acting as a money mule, knowingly or unknowingly, by receiving the credit under review and moving it on for someone else?",
"criteria": [
"Very unlikely (under 10%)",
"Unlikely (10-40%)",
"Uncertain (40-60%)",
"Likely (60-90%)",
"Very likely (over 90%)"
]
},
"action": {
"type": "choice",
"instructions": "What should the receiving institution do with the credit under review?",
"criteria": {
"release": "Release the funds and allow normal account activity",
"hold_and_contact": "Hold the funds, restrict outbound transfers and contact the sending bank to confirm the payment",
"return": "Return the credit to the sending bank as suspected fraud and restrict outbound transfers"
}
}
}
}The response. Probabilities and confidence are shortened to four decimals here, and the score to three; responses carry full precision.
{
"id": "dec_8f6bc83d439d48d9a0e10faa2759df1b",
"model": "grayson-1",
"answers": {
"proceeds_of_fraud": {
"type": "noul",
"noul": 0.0067
},
"mule_likelihood": {
"type": "score",
"score": 0.009,
"legend": {
"0": "Very unlikely (under 10%)",
"1": "Unlikely (10-40%)",
"2": "Uncertain (40-60%)",
"3": "Likely (60-90%)",
"4": "Very likely (over 90%)"
},
"confidence": 0.9934,
"probabilities": {
"0": 0.9948,
"1": 0.0036,
"2": 0.0003,
"3": 0.0003,
"4": 0.001
}
},
"action": {
"type": "choice",
"choice": "release",
"confidence": 0.9967,
"probabilities": {
"release": 0.9978,
"hold_and_contact": 0.0017,
"return": 0.0005
}
}
},
"usage": {
"input_tokens": 21788,
"output_tokens": 0
}
}Open in Playground
A new LLC's first big invoice lands in its owner's personal account. A $31,640 vendor payment from a property manager first seen two weeks ago posts to a six-year member's personal account, addressed to the LLC he formed in August after leaving his job. He told us it was coming and his devices and spending fit a new trades business, but most of it is already heading to a two-week-old outside account and the sending bank has called asking whose account this is.
| Question | Grayson's answer |
|---|---|
proceeds_of_fraud | 59% true |
mule_likelihood | 0.59 of 4, confidence 61% (Very unlikely 69%, Unlikely 17%, Uncertain 4%, Likely 6%, Very likely 4%) |
action | hold_and_contact, confidence 78% |
15,766 input tokens, $0.00055 per decision, answered in 312 ms.
The request, with long lists cut short. The full request is ambiguous.json (56 KB).
{
"model": "grayson-1",
"state": {
"review": {
"as_of": "2026-10-08T15:05:00Z",
"queue": "Incoming ACH review",
"trigger": "ACH CCD credit of $31,640.00 to a consumer account",
"rules_fired": [
"ACH-01 corporate credit (CCD/CTX) over $10,000 to a consumer account",
"ACH-04 receiver name in the entry does not match an account owner",
"ACH-06 credit more than 1.5 times the largest ACH credit in the last 12 months",
"ACH-07 credit more than 10 times the largest ACH credit in the last 12 months",
"ACH-11 outbound transfer of more than 50% of a credit within 24 hours of posting"
],
"funds_status": "Credit posted with funds available; no hold placed at posting"
},
"member": {
"name": "Owen B. Castellano",
"age": 41,
"member_since": "2020-03-09",
"address": "Mason, OH (apartment; at this address since 2021)",
"occupation_on_file": "Facilities project coordinator, Kestrel Property Services (2024 KYC refresh)",
"stated_monthly_deposits_usd": 4500,
"identity_verification": "Verified in branch at membership, 2020",
"phone_on_file": "(513) 555-0118, unchanged since 2020",
"email_on_file": "owen.castellano@example.com, unchanged since 2020",
"risk_rating": "Standard",
"business_relationships_on_file": "None completed. Business checking application started 2026-09-12 (see member_contacts)",
"other_products": [
"Savings x6624 ($2,310.44)"
]
},
"account": {
"account": "Personal checking x6623",
"owners": [
"Owen B. Castellano"
],
"opened": "2020-03-09",
"opening_channel": "Branch",
"debit_card": "x9104, active",
"limits": {
"online_wire_per_day_usd": 10000,
"external_transfer_per_day_usd": "30000 until 2026-10-13, normally 5000",
"p2p_per_day_usd": 2500,
"atm_per_day_usd": 500,
"courtesy_pay_usd": 500
},
"largest_ach_credit_prior_12_months_usd": 2177.12,
"average_balance_90d_usd": 2491.51
},
"prior_alerts_and_cases": [],
"monthly_summary": {
"columns": [
"month",
"credits_usd",
"credit_count",
"debits_usd",
"debit_count",
"ending_balance_usd",
"overdraft_or_nsf_fees"
],
"rows": [
[
"2026-05",
4307.08,
2,
3696.01,
37,
2826.67,
0
],
[
"2026-06",
4267.93,
2,
4179.93,
37,
2914.67,
0
],
[
"2026-07",
6216.86,
3,
4658.93,
49,
4472.6,
0
],
[
"2026-08",
1500,
1,
3634.14,
35,
2338.46,
0
],
[
"2026-09",
4682,
3,
4226.54,
36,
2793.92,
1
],
[
"2026-10",
0,
0,
2093.14,
10,
700.78,
0
]
]
},
"transactions": {
"note": "Posted items 2026-05-01 to 2026-10-07; debits negative; balance is the ledger balance after each item",
"columns": [
"posted",
"type",
"description",
"amount_usd",
"balance_usd"
],
"rows": [
[
"2026-05-01",
"ACH debit",
"CEDAR BLUFF RESIDENTIAL RENT WEB",
-1485,
730.6
],
[
"2026-05-01",
"Card",
"KROGER #0912 MASON OH",
-47.11,
683.49
],
[
"2026-05-01",
"Card",
"SKYLINE CHILI #0141 MASON OH",
-6.84,
676.65
],
[
"2026-05-03",
"Card",
"TRADER JOE'S #669 CINCINNATI OH",
-54.6,
622.05
],
[
"2026-05-03",
"Card",
"SKYLINE CHILI #0141 MASON OH",
-39.22,
582.83
],
"… 210 more in ambiguous.json"
]
},
"ach_originators_on_account": {
"columns": [
"company_name",
"company_id",
"sec",
"entry_description",
"receiver_names",
"… 5 more in ambiguous.json"
],
"rows": [
[
"KESTREL PROPERTY",
"x5528",
"PPD",
"PAYROLL / FINAL PAY",
[
"OWEN CASTELLANO"
],
"… 5 more in ambiguous.json"
],
[
"ORLESTON PROP MG",
"x3307",
"CCD",
"VENDOR PMT",
[
"CASTELLANO FACILITY SO"
],
"… 5 more in ambiguous.json"
],
[
"IRS TREAS 310",
"x0001",
"PPD",
"TAX REF",
[
"OWEN CASTELLANO"
],
"… 5 more in ambiguous.json"
]
]
},
"devices": {
"columns": [
"device",
"description",
"first_seen",
"last_seen",
"logins_since_first_seen",
"networks"
],
"rows": [
[
"D1",
"MacBook, Safari, online banking",
"2021-06-20",
"2026-10-08",
812,
"Home ISP, Mason OH"
],
[
"D2",
"iPhone, our mobile app",
"2023-10-02",
"2026-10-08",
1094,
"Home ISP and mobile carrier, Cincinnati OH area"
]
]
},
"online_banking_log": {
"note": "From 2026-08-15; times UTC",
"columns": [
"ts",
"event",
"device",
"ip",
"network",
"auth",
"detail"
],
"rows": [
[
"2026-08-15T13:03:55Z",
"login",
"D1",
"198.51.100.77",
"Residential ISP, Mason OH",
"Password + saved device",
""
],
[
"2026-08-15T14:37:55Z",
"login",
"D2",
"192.0.2.83",
"Mobile carrier, Cincinnati OH",
"Face ID",
""
],
[
"2026-08-18T21:48:20Z",
"login",
"D2",
"192.0.2.115",
"Mobile carrier, Cincinnati OH",
"Face ID",
""
],
[
"2026-08-18T23:06:09Z",
"login",
"D1",
"198.51.100.77",
"Residential ISP, Mason OH",
"Password + saved device",
""
],
[
"2026-08-19T11:14:44Z",
"login",
"D2",
"192.0.2.65",
"Mobile carrier, Cincinnati OH",
"Face ID",
""
],
"… 63 more in ambiguous.json"
]
},
"payees_and_external_accounts": {
"columns": [
"type",
"name",
"added",
"added_from",
"verification",
"payments",
"total_usd",
"last_paid"
],
"rows": [
[
"P2P",
"KYLE BRANNIGAN",
"2021-09-04",
"D1",
"Phone number enrolled with P2P network",
23,
905,
"2026-09-13"
],
[
"P2P",
"DANA CASTELLANO",
"2022-12-24",
"D2",
"Phone number enrolled with P2P network",
11,
610,
"2026-08-29"
],
[
"External account",
"x4410, business checking at an online bank (title CASTELLANO FACILITY SOLUTIONS LLC)",
"2026-09-25",
"D1",
"Instant verification; account title matches the LLC in his business application, not his own name",
1,
100,
"2026-09-26"
]
]
},
"member_contacts": [
{
"ts": "2026-07-20T15:44:00Z",
"channel": "Phone",
"summary": "Member asked how to move his direct deposit; said he is leaving Kestrel Property Services at the end of July."
},
{
"ts": "2026-09-10T13:15:00Z",
"channel": "Phone",
"summary": "Member asked to waive the 9/9 overdraft fee (car payment posted before his savings transfer). Refunded as a courtesy, first in 12 months."
},
{
"ts": "2026-09-12T14:31:07Z",
"channel": "Secure message",
"summary": "From member: 'I started my own facilities maintenance company, Castellano Facility Solutions LLC. Can I open a business account online? A couple of clients may pay me into this account until it's set up.' Reply: link to the business application."
},
{
"ts": "2026-09-12T14:46:52Z",
"channel": "Business account application",
"summary": "Castellano Facility Solutions LLC, single member Owen B. Castellano, Mason OH. Articles of organization uploaded (filed with the Ohio Secretary of State 2026-08-19). EIN confirmation letter not uploaded; application incomplete, reminder sent 2026-09-19."
},
{
"ts": "2026-10-05T21:03:29Z",
"channel": "Secure message",
"summary": "From member: 'I have a $31,640 payment coming from Orleston Property Group for phase 1 of an HVAC retrofit. I need to move most of it to my business account to pay subcontractors and equipment. Can you raise my external transfer limit to $30,000 this week?'"
},
{
"ts": "2026-10-06T14:22:00Z",
"channel": "Phone (outbound)",
"summary": "Callback to the phone on file to confirm the limit request. Member confirmed; said Orleston Property Group manages apartment buildings and hired him to coordinate an HVAC replacement at a Cincinnati property. Said their regional manager found him through a professional networking site in September, that he coordinates the work remotely through local subcontractors, and that he plans to visit the site later this month. Said the equipment comes from a supplier Orleston Property Group uses at its other properties, which asked for a deposit by wire. Limit raised until 2026-10-13."
}
],
"credit_under_review": {
"received": "2026-10-08T06:30:00Z",
"posted": "2026-10-08T10:15:36Z",
"rail": "ACH, next-day (settled 2026-10-08)",
"sec_code": "CCD",
"amount_usd": 31640,
"company_name": "ORLESTON PROP MG",
"company_id": "x3307",
"company_entry_description": "VENDOR PMT",
"receiver_name": "CASTELLANO FACILITY SO",
"receiver_id_number": "V2291",
"addenda": "INV 1003 PH1 HVAC RETROFIT BLDG C D",
"sending_bank": "Regional bank, Tampa FL (routing xxxxx1186)",
"trace_number": "xxxxxxxxxx75512",
"account_number_in_entry": "x6623 (matches this account)",
"return_deadline": "R17 return must reach the sending bank by opening of business 2026-10-13 (2 banking days after settlement; 2026-10-12 is a Federal Reserve holiday)"
},
"originator_and_sending_bank": {
"originator_history_with_this_account": "One entry: 2026-09-24 CCD $2,150.00, receiver CASTELLANO FACILITY SO, addenda INV 1001 SITE ASSESSMENT; not returned or disputed. No entry for an invoice 1002",
"originator_history_at_our_bank": "No entries from company ID x3307 to any other member in the 24 months on file",
"sending_bank_history": "2,310 entries to our members in the last 12 months; 0.3% returned; 1 fraud report (2025, unrelated originator)",
"sending_bank_contact": "ACH fraud desk on file (phone and secure email); not yet contacted by us",
"receiver_name_check": "CASTELLANO FACILITY SO does not match the owner (OWEN B CASTELLANO) except by surname; matches the LLC named in his incomplete business application",
"consortium_checks": "Member identity, phone and email: no fraud reports. External account x4410: no reports (opened recently, little history)"
},
"notices_from_sending_bank": [
{
"ts": "2026-10-08T14:20:00Z",
"channel": "Phone call to our ACH operations",
"summary": "Caller from the sending bank's ACH operations asked us to confirm the name on the account that received trace xxxxxxxxxx75512, saying their customer's accounts payable team was verifying a vendor's bank account. No fraud claim and no request to return. We declined to confirm account details by phone and asked for a written request; none received yet."
}
],
"activity_since_credit": [
{
"ts": "2026-10-08T12:41:15Z",
"type": "login",
"device": "D1",
"ip": "198.51.100.77",
"network": "Residential ISP, Mason OH",
"auth": "Password + saved device"
},
{
"ts": "2026-10-08T12:44:02Z",
"type": "external_transfer",
"device": "D1",
"amount_usd": 24000,
"to": "x4410, business checking at an online bank (linked 2026-09-25)",
"status": "Pending, sends in the 14:00 ET ACH window"
},
{
"ts": "2026-10-08T12:48:51Z",
"type": "login",
"device": "D2",
"ip": "192.0.2.150",
"network": "Mobile carrier, Cincinnati OH",
"auth": "Face ID"
},
{
"ts": "2026-10-08T12:49:37Z",
"type": "p2p_payee_added",
"device": "D2",
"payee": "JUSTIN KOEHLER, individual, never paid"
},
{
"ts": "2026-10-08T12:50:20Z",
"type": "p2p_payment",
"device": "D2",
"amount_usd": 1800,
"to": "JUSTIN KOEHLER",
"memo": "Bldg C duct work",
"status": "Sent"
},
{
"ts": "2026-10-08T13:32:48Z",
"type": "card_authorization",
"card": "x9104",
"amount_usd": 1146.2,
"merchant": "GRAINGER 912 CINCINNATI OH",
"status": "Approved, pending"
},
{
"ts": "2026-10-08T13:58:06Z",
"type": "online_wire_request",
"device": "D1",
"amount_usd": 4950,
"beneficiary": "COOLRIDGE MECHANICAL SUPPLY LLC, business account at another US bank, never paid",
"memo": "Equipment deposit PO 1003-A",
"status": "Pending, queued for the 15:00 ET wire cutoff"
}
],
"balances": {
"ledger_before_credit_usd": 700.78,
"ledger_now_usd": 30540.78,
"available_now_usd": 444.58,
"pending_outbound_usd": {
"external_transfer": 24000,
"card_authorization": 1146.2,
"wire": 4950
}
}
},
"questions": {
"proceeds_of_fraud": {
"type": "noul",
"instructions": "Is the credit under review the proceeds of fraud against the sender or someone else, such as business email compromise, account takeover, payroll diversion or a scam?"
},
"mule_likelihood": {
"type": "score",
"instructions": "How likely is it that the account holder is acting as a money mule, knowingly or unknowingly, by receiving the credit under review and moving it on for someone else?",
"criteria": [
"Very unlikely (under 10%)",
"Unlikely (10-40%)",
"Uncertain (40-60%)",
"Likely (60-90%)",
"Very likely (over 90%)"
]
},
"action": {
"type": "choice",
"instructions": "What should the receiving institution do with the credit under review?",
"criteria": {
"release": "Release the funds and allow normal account activity",
"hold_and_contact": "Hold the funds, restrict outbound transfers and contact the sending bank to confirm the payment",
"return": "Return the credit to the sending bank as suspected fraud and restrict outbound transfers"
}
}
}
}The response. Probabilities and confidence are shortened to four decimals here, and the score to three; responses carry full precision.
{
"id": "dec_63f65aaa6385418698a8c6cb65741a39",
"model": "grayson-1",
"answers": {
"proceeds_of_fraud": {
"type": "noul",
"noul": 0.5927
},
"mule_likelihood": {
"type": "score",
"score": 0.586,
"legend": {
"0": "Very unlikely (under 10%)",
"1": "Unlikely (10-40%)",
"2": "Uncertain (40-60%)",
"3": "Likely (60-90%)",
"4": "Very likely (over 90%)"
},
"confidence": 0.6089,
"probabilities": {
"0": 0.6872,
"1": 0.1737,
"2": 0.0439,
"3": 0.0564,
"4": 0.0388
}
},
"action": {
"type": "choice",
"choice": "hold_and_contact",
"confidence": 0.7829,
"probabilities": {
"release": 0.0426,
"hold_and_contact": 0.8553,
"return": 0.1021
}
}
},
"usage": {
"input_tokens": 15766,
"output_tokens": 0
}
}A yes/no answer is Grayson's probability that it's true. A choice answer is the top option and Grayson's confidence: 0% when every option is equally likely, 100% when one option has all the probability. A score answer is the expected level, numbering the levels in its criteria from 0, with its confidence measured the same way and, when no level reaches 70%, each level's probability. A multiple-choice answer lists the options at 50% or more.
proceeds_of_fraud: above your threshold, delay availability of the funds; Nacha's funds-availability exception requires you to notify the sending bank promptly when you use it.mule_likelihood: route a high sum of "Likely" and "Very likely" to your mule-account team, separately from the decision about this credit.action: whenreturnandhold_and_contactare close, hold and restrict outbound transfers; a hold can be released, but a return can't be taken back.
Call it from your code
Save an example as request.json, such as fraud.json, and send it with your API key in GRAYSON_API_KEY:
curl https://api.finic.ai/v1/decide \
-H "Authorization: Bearer $GRAYSON_API_KEY" \
-H "Content-Type: application/json" \
--data @request.jsonThe problem
The receiving institution sees only an ACH credit with a company name, an entry description and a receiver name, not the compromise that produced it. Once the funds move on, they are rarely recovered. Simple rules separate the cases poorly: name mismatches are common on legitimate credits, and a large-credit threshold flags every insurance settlement and tax refund.
What to send
Send what your operations team would see on the account and the credit, cut at the moment you decide:
- The name on the entry and the account's owners. A company or another person's name on a consumer account suggests the sender was misled, unless it's a trade name you have on file.
- What kind of credit it is. A corporate SEC code or vendor-payment description on a personal account that never received one.
- Months of the account's activity. Payroll, bills and spending show the account's normal; a credit far above anything before it, or to a dormant account, is out of pattern.
- The originator's history. Whether this company has paid this account or your other customers before, and under which receiver names.
- Access and profile changes before the credit. New devices, contact changes and linked accounts show an account being prepared or taken over.
- What happened after it posted. Money leaving within hours is the strongest sign of a mule account.
- What the customer and the sending bank said. Messages, call notes and any call or request from the sending bank. A customer forwarding a "client's" payment to "their supplier" is describing a mule arrangement.
Add your own policy
When to return rather than hold is a business decision the data alone can't settle: some institutions always hold and call the sending bank first, while others return on the spot when the evidence is strong. This one returns, the same day, a large corporate credit to a consumer account with an unexplained name mismatch while money is already moving to new payees.
Your return policy for name mismatches adds this to the state of the obvious example:
{
"institution_policy": "ACH-14, name mismatches on incoming credits. We post ACH credits by account number, but we do not hold a CCD or CTX credit over $10,000 to a consumer account for a call to the sending bank when all three of these are true: (1) the receiver name in the entry matches no owner of the account; (2) we have no business relationship on file between the member and the originator or the named receiver; (3) money has started leaving the account, or a transfer is pending, to a payee or external account added in the last 14 days. In that case, return the full credit the same banking day with return reason R17 and QUESTIONABLE in the addenda, block outbound transfers, and refer the member to BSA. Holding the funds and contacting the sending bank is for mismatches that do not meet all three conditions."
}| Question | Without | With your return policy for name mismatches |
|---|---|---|
proceeds_of_fraud | 98% true | 98% true |
mule_likelihood | 3.92 of 4, confidence 95% | 3.91 of 4, confidence 94% |
action | hold_and_contact, confidence 82% | return, confidence 96% |
All three conditions hold in the obvious-fraud example (the receiver name matches no owner, nothing on file ties the member to the originator or the named receiver, and money is going to a P2P payee added that morning and a crypto exchange account linked 13 days earlier), so the action moves from holding the funds to returning the credit. The other two examples don't meet the conditions: the contractor's trade name is on file, and the new LLC is named in its owner's business account application.
Where to call it
- When the credit posts, for credits your screening routes for review, before the funds become available.
- Again when money starts to leave an account holding a recent large credit, with the outbound activity added.
- When the answer is uncertain, hold the funds and call the sending bank, which can ask its own customer whether the payment was intended.
Cost and latency
| Example | Input tokens | Per decision | Per 1,000 decisions | Latency |
|---|---|---|---|---|
| Obvious | 13,566 | $0.00047 | $0.47 | 192 ms |
| Legitimate | 21,788 | $0.00076 | $0.76 | 238 ms |
| Ambiguous | 15,766 | $0.00055 | $0.55 | 312 ms |
You pay only for input tokens, at $0.035 per million, and each request is rounded up to the next millionth of a dollar, so a request with a larger state costs proportionally more; every response reports its size in usage.input_tokens. Latency is the median of 5 calls each through api.finic.ai from US-West, and grows with the number of input tokens. Add your own network time to api.finic.ai.
Evaluate on your own data
Score Grayson on your own past cases before you use it: a CSV with one row per case and a column with the right answer to each question. Every other column is sent as the case.
pipx install https://docs.finic.ai/downloads/grayson_cli-0.4.0-py3-none-any.whl
grayson eval my-cases.csv --questions https://docs.finic.ai/recipes/incoming-payment-fraud/questions.json --label proceeds_of_fraud=<column> --label mule_likelihood=<column> --label action=<column>Each --label names the column with that question's right answer:
proceeds_of_fraud:trueorfalsemule_likelihood: a level, such as "Very likely (over 90%)"action:release,hold_and_contact,return
Or run grayson on its own to set up your questions step by step. You get each question's accuracy and a CSV with Grayson's answer next to yours for every case.
FAQ
Should I hold or return a credit I think is fraudulent?
Nacha rules allow either: since October 2024, a receiving bank that reasonably suspects a credit is unauthorized or induced by false pretenses may delay its availability (notifying the sending bank promptly) and may return it with R17 and QUESTIONABLE in the addenda. Many teams hold and contact the sending bank first, because a return can't be undone. Whichever you choose, restrict outbound transfers at once: a return is for the full amount, so you fund whatever has already left.
Can Grayson tell an unwitting mule from a complicit one?
The mule_likelihood question covers both on purpose, because the decision about the credit is the same either way. To separate them, add a question such as "Does the account holder appear to be the victim of a job, romance or investment scam that is using their account?" and include the customer's messages and call notes. Intent often becomes clear only after someone talks to the customer, so ask again with the call notes added.
What if the name on the credit matches my customer?
Then the most common giveaway is missing, and the other signals carry the decision: a new or recently reactivated account, a type of credit the account has never received, new devices or profile changes beforehand, and money leaving soon after. Fraudsters also open accounts, including business accounts, in names that match what the sender expects to see.
Related recipes
Detect money mule accounts
Whether an account is passing other people's money through, whether the holder knows, and what to do
Detect business email compromise in vendor payments
Catch payments to a vendor's new bank account after a fake or compromised change request.
Recipes
Every use case, with its questions and cost per decision.
Check deposits
Grayson decides whether a deposited check is counterfeit, altered, stolen or a duplicate, and whether to release funds, place an exception hold or reject it.
Scam payments
Grayson screens a customer's outgoing Faster Payment for authorised push payment scams, names the likely scam type and picks release, warn, hold and call, or block, before the money leaves.