Fraud typology classification
Grayson labels a fraud claim with a FraudClassifier class, a ScamClassifier type and contributing factors, and decides reimbursement, from the claim file: statements, payments, account history and session logs.
Grayson classifies a fraud or scam claim with the categories of the Federal Reserve's FraudClassifier and ScamClassifier models (who initiated the payment and how, which type of scam, and which contributing factors were present) and answers whether the law and your reimbursement policy call for repaying the customer. It reads the claim file (the customer's statement and interview notes, each payment with how it was initiated, months of account history and the session logs around the events) and costs about $0.53 to $0.71 per 1,000 decisions.
- Decides: Label a fraud claim with a FraudClassifier class, scam type and contributing factors; decide reimbursement.
- Call it: When a fraud claim has the customer's statement and payment records
- Questions: 2 choice, 1 multiple choice, 1 yes/no
- Cost: $0.00053 to $0.00071 per decision ($0.53 to $0.71 per 1,000) for these examples' 15,214 to 20,264 input tokens
- Latency: 249 to 288 ms for these examples, the median of 5 calls each through api.finic.ai from US-West
Examples
Three claims at a credit union, each with six months of account history, 90 days of digital-banking sessions, call summaries and the payments: a bank impostor scam in which a member wired her savings from a branch, a self-employed member reporting his own scheduled IRS payment as fraud, and a refund scam over remote access where it's unclear whether the member or the caller sent the P2P payment.
Open in Playground
A bank impostor talks a member into wiring her savings to a "holding account". A 67-year-old member typed her password into a lookalike sign-in page, read two codes to a caller spoofing our number, then moved $8,000 from savings and wired $8,400 from the branch to a company she'd never paid, telling staff it was her own account as the caller instructed. The wire is the payment under review; she sent it herself, and no reimbursement policy is in the file.
| Question | Grayson's answer |
|---|---|
fraud_classifier | manipulated_relationship_trust, confidence 85% |
scam_type | bank_impostor, confidence 96% |
contributing_factors | unsolicited_contact, credentials_phished, code_shared, new_device, new_recipient, coached, pressure |
reimburse | 13% true |
20,248 input tokens, $0.00071 per decision, answered in 288 ms.
The request, with long lists cut short. The full request is fraud.json (67 KB).
{
"model": "grayson-1",
"state": {
"member": {
"member_id": "M-0048813",
"name": "Linda Marchetti",
"age": 67,
"member_since": "2009-03-16",
"employment": "Retired school administrator; income is a pension and Social Security",
"address": "Westerville, OH; unchanged since 2009",
"mobile_phone_on_file": "614-555-0142, last changed 2016-08-09",
"email_on_file": "lmarchetti@example.net, last changed 2019-02-11",
"trusted_contact_person": "None on file",
"digital_banking": "Enrolled 2014-10-02. Mobile app on two trusted devices. One-time codes go by SMS to the mobile phone on file and are required for a new device, a new P2P recipient over $500 and contact-detail changes.",
"p2p": "Enrolled 2021-06-20; limit $2,500 per day",
"alerts": "Card verification texts on; no balance or transfer alerts"
},
"accounts": {
"columns": [
"account",
"type",
"opened",
"balance_usd_2026-10-01"
],
"rows": [
[
"x3306",
"checking",
"2009-03-16",
5705.71
],
[
"x8841",
"savings",
"2009-03-16",
14900.66
],
[
"x2015",
"12-month share certificate",
"2026-02-14",
25000
],
[
"x7193",
"Visa credit card, limit $8,000",
"2015-05-02",
1284.66
]
]
},
"devices": {
"columns": [
"device",
"first_seen",
"trusted",
"last_seen"
],
"rows": [
[
"iPhone 13, app",
"2022-11-05",
true,
"2026-09-30"
],
[
"iPad 8th gen, app",
"2020-12-26",
true,
"2026-09-19"
],
[
"Windows 10, Chrome 128, browser",
"2026-09-27",
false,
"2026-09-27"
],
[
"Android 14, Chrome Mobile 129, browser",
"2026-09-28",
false,
"2026-09-28"
]
]
},
"checking_x3306_history": {
"columns": [
"posted",
"type",
"description",
"amount_usd",
"balance_usd"
],
"rows": [
[
"2026-04-01",
"ACH credit",
"SCHL EMPLOYEES RET SYS BENEFIT PPD",
2914.36,
6776.77
],
[
"2026-04-01",
"ACH debit",
"MUTUAL OF OMAHA INS PREMIUM PPD",
-212.18,
6564.59
],
[
"2026-04-02",
"P2P sent",
"P2P SENT TO K. ROMERO",
-120,
6444.59
],
[
"2026-04-03",
"transfer out",
"RECURRING TRANSFER TO SAVINGS x8841",
-500,
5944.59
],
[
"2026-04-04",
"card purchase",
"KROGER #547 WESTERVILLE OH",
-136.99,
5807.6
],
"… 228 more in fraud.json"
]
},
"savings_x8841_history": {
"columns": [
"posted",
"type",
"description",
"amount_usd",
"balance_usd"
],
"rows": [
[
"2026-04-03",
"transfer in",
"RECURRING TRANSFER FROM CHECKING x3306",
500,
19374.06
],
[
"2026-04-30",
"dividend",
"DIVIDEND",
4.39,
19378.45
],
[
"2026-05-03",
"transfer in",
"RECURRING TRANSFER FROM CHECKING x3306",
500,
19878.45
],
[
"2026-05-31",
"dividend",
"DIVIDEND",
4.25,
19882.7
],
[
"2026-06-03",
"transfer in",
"RECURRING TRANSFER FROM CHECKING x3306",
500,
20382.7
],
"… 9 more in fraud.json"
]
},
"p2p_recipients": {
"columns": [
"recipient",
"token",
"added",
"payments",
"total_usd",
"last_paid"
],
"rows": [
[
"A. Marchetti (daughter)",
"phone x2290",
"2021-06-20",
14,
1850,
"2026-08-21"
],
[
"K. Romero",
"email k***@example.com",
"2022-03-02",
101,
12120,
"2026-09-24"
],
[
"D. Nguyen",
"phone x6618",
"2023-01-14",
31,
1985,
"2026-09-02"
],
[
"M. Ferrante",
"phone x4471",
"2026-09-28",
1,
2400,
"2026-09-28"
]
]
},
"wire_history": [
{
"date": "2019-07-22",
"direction": "outgoing",
"amount_usd": 18500,
"beneficiary": "Title company, Columbus OH",
"purpose": "Condo purchase closing",
"channel": "Branch"
}
],
"digital_banking_sessions_90_days": {
"columns": [
"start",
"device",
"ip",
"network",
"sign_in",
"activity"
],
"rows": [
[
"2026-07-02T09:14:00-04:00",
"iPhone 13 app (trusted)",
"203.0.113.18",
"Residential cable, Westerville OH",
"Face ID",
"moved $1,000.00 checking to savings"
],
[
"2026-07-06T07:19:00-04:00",
"iPhone 13 app (trusted)",
"203.0.113.18",
"Residential cable, Westerville OH",
"Face ID",
"viewed Visa x7193 activity"
],
[
"2026-07-09T07:56:00-04:00",
"iPhone 13 app (trusted)",
"203.0.113.18",
"Residential cable, Westerville OH",
"Face ID",
"sent P2P $120.00 to K. Romero"
],
[
"2026-07-12T20:31:00-04:00",
"iPad 8th gen app (trusted)",
"203.0.113.18",
"Residential cable, Westerville OH",
"passcode",
"viewed checking activity"
],
[
"2026-07-15T08:34:00-04:00",
"iPhone 13 app (trusted)",
"203.0.113.18",
"Residential cable, Westerville OH",
"Face ID",
"viewed Visa x7193 activity"
],
"… 45 more in fraud.json"
]
},
"rule_hits_12_months": [
{
"ts": "2026-07-17T13:02:00-04:00",
"rule": "CARD-OUT-OF-REGION",
"item": "BELK #0312 CHARLOTTE NC $84.20",
"action": "Verification text; member replied YES; approved"
},
{
"ts": "2026-09-27T19:46:31-04:00",
"rule": "DB-NEW-DEVICE-HOSTING-IP",
"item": "Sign-in attempt",
"action": "New-device code required; not entered; informational only"
},
{
"ts": "2026-09-28T11:04:05-04:00",
"rule": "DB-NEW-DEVICE-HOSTING-IP",
"item": "Sign-in",
"action": "Code entered; session allowed; score 640, below the 700 review threshold"
},
{
"ts": "2026-09-28T11:08:41-04:00",
"rule": "P2P-REALTIME-RISK",
"item": "P2P $2,400.00 to M. Ferrante",
"action": "Score 812/999 (new device, new recipient, hosting network); step-up code passed; released"
},
{
"ts": "2026-09-28T13:07:00-04:00",
"rule": "WIRE-ELDER-THIRD-PARTY",
"item": "Wire $8,400.00 to Ridgeline Asset Custody LLC",
"action": "Member 65+, first wire in 24 months, beneficiary name does not match member: branch manager review required; completed and released by manager"
}
],
"contact_center_history": [
{
"ts": "2026-06-02T10:41:00-04:00",
"channel": "Inbound call",
"summary": "Member set a travel note for Charlotte, NC, 2026-07-16 to 2026-07-21."
},
{
"ts": "2026-08-11T09:05:00-04:00",
"channel": "Inbound call",
"summary": "Member locked out of the app after three wrong passwords. Agent verified her and walked her through the forgot-password flow on her iPhone."
},
{
"ts": "2026-09-29T09:14:00-04:00",
"channel": "Inbound call to the number on her card",
"summary": "Claim intake (recording summarized): member reports a caller from 'the fraud department' who had her move savings and wire it to a 'holding account'; she now believes it was a scam. Agent locked digital banking, cancelled the Android session, put a hold on P2P, and opened the claim. Member upset and apologetic; says she 'did everything he said'."
}
],
"outbound_contact_check": "No calls, texts or emails from our contact center, fraud team or branches to the member between 2026-09-01 and 2026-09-29, other than automated code texts and the 2026-07-17 card verification text.",
"brand_protection_alert": "Our brand-protection vendor found a copy of our sign-in page on a lookalike domain registered 2026-09-25 (not ours). Seven members reported texts linking to it on 2026-09-27 and 2026-09-28. Takedown completed 2026-09-29T16:40:00-04:00.",
"prior_claims": [
{
"opened": "2023-05-18",
"type": "Card dispute",
"detail": "Duplicate restaurant charge, $86.40",
"outcome": "Merchant credited"
}
],
"prior_scam_reimbursements": "None",
"event_timeline": [
{
"ts": "2026-09-27T19:46:31-04:00",
"event": "Sign-in attempt from a new Windows device, hosting IP 198.51.100.62 (Ashburn VA); password correct on first try; new-device code sent by SMS; not entered; abandoned 19:51"
},
{
"ts": "2026-09-28T11:03:12-04:00",
"event": "Code text sent: 'Your sign-in code is ******. Use it only to sign in on a new device. We will never call to ask for this code.'"
},
{
"ts": "2026-09-28T11:04:05-04:00",
"event": "Sign-in from a new Android device, same hosting IP; password correct; code entered 53 seconds after it was sent"
},
{
"ts": "2026-09-28T11:05:20-04:00",
"event": "Attempt to add a second mobile number to the profile; blocked (contact changes from a new device need a call-in verification)"
},
{
"ts": "2026-09-28T11:06:44-04:00",
"event": "P2P recipient added: M. Ferrante, phone token x4471. Network: token enrolled 2026-09-24 at a national bank; no earlier payments from our members"
},
"… 16 more in fraud.json"
],
"member_statement": "Recorded at intake on 2026-09-29: \"Sunday night I got a text that said my credit union account was suspended because of an unusual sign-in, with a link. I tapped it and put in my username and password, and the page just kept spinning. Monday about eleven a man called, and my phone said it was the credit union. He said he was Kevin in the fraud department and he knew my name and that I have checking and savings. He said someone was trying to get into my account and a code would come to my phone to prove it was me, and I read it to him. Then he said the hacker had sent $2,400 and another code would come to cancel it, so I read that one too. He said the hacker still had my login and my savings weren't safe, and the security team had opened a holding account at a partner bank where my money would be protected. He kept saying it had to be done today, before the hacker emptied my savings, and that if I hung up he couldn't stop it. He had me move $8,000 from savings into checking on my phone and go to the branch to wire it. He said not to tell them about the fraud department because somebody at my branch might be involved, and to say it was my own new account. He stayed on the phone the whole time; I had my earbuds in. He said a case officer would call me Tuesday morning with my new account number. Nobody called and his number just rings, so I called the number on my card.\"",
"investigator_notes": "Interview 2026-09-30 by phone. Member repeated the account above without changes. She showed a screenshot of her call log: incoming call 10:57 a.m. Monday, 1 h 52 min, displayed as our main number; our telephony shows no outbound call to her. She confirms she entered her username and password on the page from the text on Sunday evening and read both codes aloud. She did not install any app and nobody saw her screen. She has never heard of Ridgeline Asset Custody or M. Ferrante. She says she told the teller and the manager it was her own account because the caller said to, and that he was listening through her earbuds. No family member involved. Member is clear and consistent; no sign of confusion beyond the event.",
"branch_records": {
"teller_note": "Member asked to wire $8,400 to 'my new account at another bank'. Beneficiary on the instructions she read from her phone is Ridgeline Asset Custody LLC, not in her name; she said it is 'the company that holds the account'. Asked whether anyone had contacted her or asked her to move money: she said no. She had earbuds in and a call running on her phone, and said it was her daughter. Referred to the branch manager under the third-party wire procedure.",
"manager_note": "Spoke with member 13:18 to 13:31. Explained bank impostor scams and that we never ask members to move money to protect it. Member said she understood, that nobody had asked her to move money, and that she was moving funds to a higher-yield account. ID verified (Ohio driver's license). Member signed the wire scam warning acknowledgment. Released."
},
"recovery": {
"wire_recall": "Requested 2026-09-29 09:41. Beneficiary bank replied 2026-10-01 14:12: the funds were wired out of the beneficiary account on 2026-09-28 at 15:20 Central; $0.00 remaining; account restricted.",
"p2p_fraud_report": "Filed 2026-09-29 10:05; receiving bank has not replied."
},
"claim": {
"claim_id": "CLM-2026-09-0611",
"opened": "2026-09-29T09:21:00-04:00",
"reported_by": "Member, by phone to the number on her card",
"review_requested": "2026-10-02T09:30:00-04:00",
"payments_in_claim": [
{
"payment_id": "P2P-55203",
"type": "P2P transfer (bank network)",
"amount_usd": 2400,
"sent": "2026-09-28T11:08:41-04:00",
"from_account": "checking x3306",
"to": "M. Ferrante, phone token x4471, first payment to this recipient",
"initiated_from": "Android 14, Chrome Mobile, first seen 2026-09-28 11:04, hosting IP 198.51.100.62",
"authentication": "Password correct; new-device code and new-recipient payment code, both sent by SMS to the phone on file, entered correctly"
},
{
"payment_id": "WIRE-20260928-0042",
"type": "Outgoing domestic wire (Fedwire)",
"amount_usd": 8400,
"fee_usd": 25,
"sent": "2026-09-28T13:39:12-04:00",
"from_account": "checking x3306",
"beneficiary": "Ridgeline Asset Custody LLC, account x5512, Houston TX",
"beneficiary_bank": "A commercial bank in Houston, TX (routing xxxxx0193)",
"originator_to_beneficiary_info": "OWN FUNDS TRANSFER",
"stated_purpose": "Transfer to own account at another bank",
"initiated_from": "In person at the Westerville branch; Ohio driver's license verified; member signed the wire request and the scam warning acknowledgment; manager review completed",
"funded_by": "$8,000.00 moved from savings x8841 at 11:31 the same day"
}
],
"payment_under_review": "WIRE-20260928-0042"
}
},
"questions": {
"fraud_classifier": {
"type": "choice",
"instructions": "Using the Federal Reserve's FraudClassifier model, how should the payment under review be classified? An authorized party is someone with the right to initiate the payment; an unauthorized party is someone without that right.",
"criteria": {
"manipulated_products_services": "Authorized party was manipulated: products and services fraud (paid for goods or services that were never delivered or were grossly inferior)",
"manipulated_relationship_trust": "Authorized party was manipulated: relationship and trust fraud (sent money to a trusted party, or an impostor posing as one, with no goods or services expected in return)",
"acted_embezzlement": "Authorized party acted fraudulently: embezzlement (misused funds placed in their trust or belonging to their employer)",
"acted_false_claim": "Authorized party acted fraudulently: false claim (lied to receive a payment or avoid a payment obligation)",
"acted_synthetic_id": "Authorized party acted fraudulently: synthetic identity (used a fabricated identity built from real and invented personal information)",
"modified_compromised_credentials": "Unauthorized party modified the payment information after initiation, using stolen login credentials",
"modified_impersonation": "Unauthorized party modified the payment information after initiation, by impersonating the authorized party without their login credentials",
"modified_physical_alteration": "Unauthorized party modified the payment information after initiation, by altering a physical payment instrument such as a check",
"takeover_compromised_credentials": "Unauthorized party took over the account using stolen login credentials, and initiated the payment",
"takeover_impersonation": "Unauthorized party took over the account by impersonating the authorized party without their login credentials, and initiated the payment",
"misused_digital": "Unauthorized party, without control of the account, used legitimate account information to initiate an electronic payment",
"misused_physical_counterfeit": "Unauthorized party used a forged or counterfeit physical payment instrument",
"not_fraud": "Not fraud: the account holder made the payment without being deceived"
}
},
"scam_type": {
"type": "choice",
"instructions": "Using the Federal Reserve's ScamClassifier model, which scam type is this case? A scam is the use of deception or manipulation intended to achieve financial gain, whether the account holder sent the money or let someone else into the account.",
"criteria": {
"merchandise": "Merchandise: paid for goods that were never delivered or were substantially different from what was advertised",
"investment": "Investment: invested in a financial asset on false promises of a high return",
"property_sale_rental": "Property sale or rental: paid for a home, apartment or property that was fictitious, unavailable or not owned by the seller",
"romance_impostor": "Romance impostor: a fictitious online identity built a romantic or friendly relationship, then asked for money",
"government_impostor": "Government impostor: someone posed as a government agency, law enforcement or a court",
"bank_impostor": "Bank impostor: someone posed as a financial institution, its fraud department or its staff",
"business_impostor": "Business impostor: someone posed as a legitimate business or brand, such as tech support, a utility or an employer",
"relative_family_friend": "Relative, family or friend: someone posed as a relative or friend, or someone acting for one, with a false emergency",
"other_trusted_party": "Other trusted party: someone posed in another role, such as a charity, to ask for money on a false expectation",
"not_scam": "Not a scam: no one deceived or manipulated the account holder"
}
},
"contributing_factors": {
"type": "multi_choice",
"instructions": "Which of these happened in this case?",
"criteria": {
"unsolicited_contact": "Someone contacted the customer first, by call, text, email or message, and that contact led to the payments",
"credentials_phished": "The customer entered or gave their online banking password somewhere other than the institution's own app or website",
"code_shared": "The customer gave a one-time passcode or security code to another person",
"remote_access": "The customer installed or allowed remote-access software on their device",
"new_device": "A device the customer had never used signed in to the account",
"new_recipient": "Money went to a recipient the customer had never paid before",
"coached": "The customer was told to mislead the institution's staff or hide the real reason for a payment",
"pressure": "The customer was pressured into making the payments, with urgency or a threat such as losing their money, arrest or a deadline"
}
},
"reimburse": {
"type": "noul",
"instructions": "Under the law and any reimbursement policy stated in this case, should the institution reimburse the customer for the payment under review?"
}
}
}The response. Probabilities and confidence are shortened to four decimals here, and the score to three; responses carry full precision.
{
"id": "dec_1a6fc596e1ff4e1ca95bf0ccbb5f6cbb",
"model": "grayson-1",
"answers": {
"fraud_classifier": {
"type": "choice",
"choice": "manipulated_relationship_trust",
"confidence": 0.8507,
"probabilities": {
"manipulated_products_services": 0.0203,
"manipulated_relationship_trust": 0.8622,
"acted_embezzlement": 0.0058,
"acted_false_claim": 0.0075,
"acted_synthetic_id": 0.0066,
"modified_compromised_credentials": 0.0158,
"modified_impersonation": 0.0158,
"modified_physical_alteration": 0.0027,
"takeover_compromised_credentials": 0.023,
"takeover_impersonation": 0.0066,
"misused_digital": 0.0024,
"misused_physical_counterfeit": 0.0019,
"not_fraud": 0.0295
}
},
"scam_type": {
"type": "choice",
"choice": "bank_impostor",
"confidence": 0.9608,
"probabilities": {
"merchandise": 0.0021,
"investment": 0.0057,
"property_sale_rental": 0.0015,
"romance_impostor": 0.001,
"government_impostor": 0.0031,
"bank_impostor": 0.9647,
"business_impostor": 0.0045,
"relative_family_friend": 0.0027,
"other_trusted_party": 0.001,
"not_scam": 0.0138
}
},
"contributing_factors": {
"type": "multi_choice",
"multi_choice": [
"unsolicited_contact",
"credentials_phished",
"code_shared",
"new_device",
"new_recipient",
"coached",
"pressure"
],
"probabilities": {
"unsolicited_contact": 0.9797,
"credentials_phished": 0.9991,
"code_shared": 0.9998,
"remote_access": 0.0004,
"new_device": 0.9994,
"new_recipient": 0.9998,
"coached": 0.9999,
"pressure": 0.9991
}
},
"reimburse": {
"type": "noul",
"noul": 0.1329
}
},
"usage": {
"input_tokens": 20248,
"output_tokens": 0
}
}Open in Playground
A self-employed member reports his own scheduled IRS estimated tax payment as fraud. A member reported a $4,200 IRS debit as fraud after an IRS impostor called him. The debit is the third quarterly estimated payment this year, same amount and originator as the others; he moved $4,200 from his "Tax reserve" savings four days before it, and the impostor call came two weeks after it.
| Question | Grayson's answer |
|---|---|
fraud_classifier | not_fraud, confidence 81% |
scam_type | not_scam, confidence 94% |
contributing_factors | None at 50% or more |
reimburse | 1% true |
20,264 input tokens, $0.00071 per decision, answered in 274 ms.
The request, with long lists cut short. The full request is legitimate.json (69 KB).
{
"model": "grayson-1",
"state": {
"member": {
"member_id": "M-0213077",
"name": "Gregory Haldane",
"age": 48,
"member_since": "2014-05-20",
"employment": "Self-employed architectural illustrator (sole proprietor); income is client payments by ACH and check",
"address": "Denver, CO; unchanged since 2019",
"mobile_phone_on_file": "720-555-0163, last changed 2018-02-27",
"email_on_file": "ghaldane@example.net, last changed 2014-05-20",
"digital_banking": "Enrolled 2014-05-20. Online banking on a trusted MacBook and the mobile app on a trusted iPhone. One-time codes by SMS to the mobile phone on file.",
"p2p": "Not enrolled",
"alerts": "Card verification texts on; low-balance alert at $1,000",
"account_nicknames": {
"savings x6034": "Tax reserve"
}
},
"accounts": {
"columns": [
"account",
"type",
"opened",
"balance_usd_2026-10-06"
],
"rows": [
[
"x5120",
"checking",
"2014-05-20",
9992.44
],
[
"x6034",
"savings (nickname 'Tax reserve')",
"2019-01-08",
11866.59
],
[
"x7781",
"auto loan, $412.36 monthly by transfer",
"2024-06-11",
13906.42
]
]
},
"devices": {
"columns": [
"device",
"first_seen",
"trusted",
"last_seen"
],
"rows": [
[
"MacBook Pro, Safari",
"2022-09-14",
true,
"2026-10-03"
],
[
"iPhone 15, app",
"2023-10-02",
true,
"2026-10-05"
]
]
},
"checking_x5120_history": {
"columns": [
"posted",
"type",
"description",
"amount_usd",
"balance_usd"
],
"rows": [
[
"2026-04-01",
"ACH debit",
"ROCKET MORTGAGE MTG PYMT PPD",
-2184.62,
2733.9
],
[
"2026-04-01",
"card purchase",
"WHOLE FOODS MKT #10215 DENVER CO",
-48.89,
2685.01
],
[
"2026-04-02",
"ACH debit",
"KAISER PERMANENTE CO PREMIUM PPD",
-612.4,
2072.61
],
[
"2026-04-02",
"card purchase",
"CONOCO - SEI 26111 DENVER CO",
-42.43,
2030.18
],
[
"2026-04-03",
"ACH credit",
"HARTWELL PIKE ARCH PAYABLES CCD",
5840,
7870.18
],
"… 261 more in legitimate.json"
]
},
"savings_x6034_history": {
"columns": [
"posted",
"type",
"description",
"amount_usd",
"balance_usd"
],
"rows": [
[
"2026-04-06",
"transfer in",
"ONLINE TRANSFER FROM CHECKING x5120",
1450,
10852.77
],
[
"2026-04-13",
"transfer out",
"ONLINE TRANSFER TO CHECKING x5120",
-5600,
5252.77
],
[
"2026-04-20",
"transfer in",
"ONLINE TRANSFER FROM CHECKING x5120",
800,
6052.77
],
[
"2026-04-30",
"transfer in",
"ONLINE TRANSFER FROM CHECKING x5120",
500,
6552.77
],
[
"2026-04-30",
"dividend",
"DIVIDEND",
2.98,
6555.75
],
"… 21 more in legitimate.json"
]
},
"digital_banking_sessions_90_days": {
"columns": [
"start",
"device",
"ip",
"network",
"sign_in",
"activity"
],
"rows": [
[
"2026-07-08T09:45:00-06:00",
"iPhone 15 app (trusted)",
"192.0.2.77",
"Mobile carrier, Denver CO",
"Face ID",
"viewed savings x6034 activity"
],
[
"2026-07-10T12:15:00-06:00",
"MacBook Pro, Safari (trusted)",
"198.51.100.33",
"Business ISP, Denver CO",
"password",
"moved $1,300.00 checking to savings x6034 (Tax reserve)"
],
[
"2026-07-11T18:52:00-06:00",
"MacBook Pro, Safari (trusted)",
"203.0.113.44",
"Residential fiber, Denver CO",
"password",
"viewed balances; viewed checking activity"
],
[
"2026-07-13T12:25:00-06:00",
"iPhone 15 app (trusted)",
"192.0.2.77",
"Mobile carrier, Denver CO",
"Face ID",
"viewed savings x6034 activity"
],
[
"2026-07-14T07:50:00-06:00",
"MacBook Pro, Safari (trusted)",
"203.0.113.44",
"Residential fiber, Denver CO",
"password",
"viewed balances"
],
"… 48 more in legitimate.json"
]
},
"rule_hits_12_months": [
{
"ts": "2026-05-19T06:00:00-06:00",
"rule": "DEP-RETURNED-ITEM",
"item": "Mobile deposit 05/15 $1,150.00 returned NSF",
"action": "Notice sent; fee assessed; no hold on future deposits"
},
{
"ts": "2026-09-11T15:40:00-06:00",
"rule": "CARD-OUT-OF-REGION",
"item": "HYATT PLACE PHOENIX DOWNTOWN pre-authorization $700.00",
"action": "Verification text; member replied YES; approved"
},
{
"ts": "2026-09-15T05:30:00-06:00",
"rule": "ACH-LARGE-DEBIT",
"item": "IRS USATAXPYMT $4,200.00 (4.6x the member's 90-day average debit)",
"action": "Auto-cleared: originator on the government-originator list; 10 earlier debits from this originator in 24 months"
}
],
"contact_center_history": [
{
"ts": "2026-05-19T11:02:00-06:00",
"channel": "Inbound call",
"summary": "Member asked about the returned mobile deposit. Agent explained NSF return; member said the client would pay by ACH instead."
},
{
"ts": "2026-09-30T15:40:00-06:00",
"channel": "Inbound call",
"summary": "Member reported a call earlier that day from someone claiming to be the IRS who said he owed back taxes and faced arrest unless he paid today by gift cards. He hung up after about two minutes, gave no account or card details and paid nothing. Asked whether we share his information with the IRS; agent explained we don't, and added an account note."
},
{
"ts": "2026-10-05T10:12:00-06:00",
"channel": "Inbound call",
"summary": "Claim intake (recording summarized): member disputes a $4,200.00 IRS debit on 2026-09-15 as unauthorized; believes the IRS impostors or a duplicate IRS charge caused it. Agent opened the claim. Agent explained a written statement of unauthorized debit would send the payment back to the IRS; member chose to wait for the investigator before signing it."
}
],
"prior_claims": [
{
"opened": "2025-03-04",
"type": "Debit card, unauthorized card-not-present",
"detail": "$312.77 at an online electronics merchant; card reissued",
"outcome": "Reimbursed under Regulation E"
}
],
"prior_scam_reimbursements": "None",
"debits_from_same_originator_24_months": {
"originator": "IRS, company entry description USATAXPYMT, SEC PPD",
"columns": [
"settled",
"amount_usd"
],
"rows": [
[
"2024-09-16",
3600
],
[
"2025-01-15",
3600
],
[
"2025-04-15",
2211
],
[
"2025-04-15",
3900
],
[
"2025-06-16",
3900
],
"… 6 more in legitimate.json"
]
},
"event_timeline": [
{
"ts": "2026-06-12T07:31:00-06:00",
"event": "Online transfer $4,200.00 savings x6034 to checking, from the trusted MacBook"
},
{
"ts": "2026-06-15",
"event": "IRS USATAXPYMT $4,200.00 and CO DEPT REVENUE $780.00 debits posted"
},
{
"ts": "2026-09-11",
"event": "Online transfer $4,200.00 savings x6034 to checking, from the trusted iPhone (Face ID) on a Phoenix mobile-carrier IP; card activity places the member in Phoenix 2026-09-10 to 2026-09-14"
},
{
"ts": "2026-09-15",
"event": "IRS USATAXPYMT $4,200.00 and CO DEPT REVENUE $780.00 debits posted"
},
{
"ts": "2026-09-30T15:40:00-06:00",
"event": "Member reported an IRS impostor call (no payment, no details given)"
},
"… 4 more in legitimate.json"
],
"member_statement": "Recorded at intake on 2026-10-05: \"Somebody took $4,200 out of my checking on September 15th and it says IRS. Last Wednesday a guy called saying he was with the IRS, that I owed back taxes and there was a warrant, and I hung up on him. He knew my address. Then Saturday I'm going through my statement and I see the IRS took $4,200. I already paid my estimates. I did two in June because I knew I'd be traveling in September. So either the IRS charged me twice or those guys got into my account. I didn't authorize this.\"",
"investigator_notes": "Interview 2026-10-06 by phone. Member pays federal estimated taxes himself through the IRS website using checking x5120; his CPA prepares the annual return. He says he submitted two payments in June, one for June and one for September, and thought both were taken in June. Our records show one IRS debit in June (2026-06-15, $4,200.00). Asked about the $780.00 Colorado Department of Revenue debit on 2026-09-15: he says that is his state estimate, set up in June, and is fine. He has given his account number to no one else; the 2026-09-30 caller did not ask for bank details. No remote-access software, no codes shared, no new devices. He agreed to check his IRS online account for a third-quarter payment and call back; no callback as of 2026-10-07 09:00.",
"claim": {
"claim_id": "CLM-2026-10-0087",
"opened": "2026-10-05T10:12:00-06:00",
"reported_by": "Member, by phone",
"review_requested": "2026-10-07T09:00:00-06:00",
"regulation_e": "Reported 5 days after the statement that first showed the debit",
"payments_in_claim": [
{
"payment_id": "ACHD-20260915-0193",
"type": "Incoming ACH debit",
"amount_usd": 4200,
"settled": "2026-09-15",
"account": "checking x5120",
"originator": "IRS",
"company_entry_description": "USATAXPYMT",
"sec_code": "PPD",
"individual_name_field": "GREGORY R HALDANE",
"individual_id_field": "IRS payment reference, 15 digits (masked)",
"funded_by": "$4,200.00 moved from savings x6034 (Tax reserve) on 2026-09-11 from the trusted iPhone"
}
],
"payment_under_review": "ACHD-20260915-0193"
}
},
"questions": {
"fraud_classifier": {
"type": "choice",
"instructions": "Using the Federal Reserve's FraudClassifier model, how should the payment under review be classified? An authorized party is someone with the right to initiate the payment; an unauthorized party is someone without that right.",
"criteria": {
"manipulated_products_services": "Authorized party was manipulated: products and services fraud (paid for goods or services that were never delivered or were grossly inferior)",
"manipulated_relationship_trust": "Authorized party was manipulated: relationship and trust fraud (sent money to a trusted party, or an impostor posing as one, with no goods or services expected in return)",
"acted_embezzlement": "Authorized party acted fraudulently: embezzlement (misused funds placed in their trust or belonging to their employer)",
"acted_false_claim": "Authorized party acted fraudulently: false claim (lied to receive a payment or avoid a payment obligation)",
"acted_synthetic_id": "Authorized party acted fraudulently: synthetic identity (used a fabricated identity built from real and invented personal information)",
"modified_compromised_credentials": "Unauthorized party modified the payment information after initiation, using stolen login credentials",
"modified_impersonation": "Unauthorized party modified the payment information after initiation, by impersonating the authorized party without their login credentials",
"modified_physical_alteration": "Unauthorized party modified the payment information after initiation, by altering a physical payment instrument such as a check",
"takeover_compromised_credentials": "Unauthorized party took over the account using stolen login credentials, and initiated the payment",
"takeover_impersonation": "Unauthorized party took over the account by impersonating the authorized party without their login credentials, and initiated the payment",
"misused_digital": "Unauthorized party, without control of the account, used legitimate account information to initiate an electronic payment",
"misused_physical_counterfeit": "Unauthorized party used a forged or counterfeit physical payment instrument",
"not_fraud": "Not fraud: the account holder made the payment without being deceived"
}
},
"scam_type": {
"type": "choice",
"instructions": "Using the Federal Reserve's ScamClassifier model, which scam type is this case? A scam is the use of deception or manipulation intended to achieve financial gain, whether the account holder sent the money or let someone else into the account.",
"criteria": {
"merchandise": "Merchandise: paid for goods that were never delivered or were substantially different from what was advertised",
"investment": "Investment: invested in a financial asset on false promises of a high return",
"property_sale_rental": "Property sale or rental: paid for a home, apartment or property that was fictitious, unavailable or not owned by the seller",
"romance_impostor": "Romance impostor: a fictitious online identity built a romantic or friendly relationship, then asked for money",
"government_impostor": "Government impostor: someone posed as a government agency, law enforcement or a court",
"bank_impostor": "Bank impostor: someone posed as a financial institution, its fraud department or its staff",
"business_impostor": "Business impostor: someone posed as a legitimate business or brand, such as tech support, a utility or an employer",
"relative_family_friend": "Relative, family or friend: someone posed as a relative or friend, or someone acting for one, with a false emergency",
"other_trusted_party": "Other trusted party: someone posed in another role, such as a charity, to ask for money on a false expectation",
"not_scam": "Not a scam: no one deceived or manipulated the account holder"
}
},
"contributing_factors": {
"type": "multi_choice",
"instructions": "Which of these happened in this case?",
"criteria": {
"unsolicited_contact": "Someone contacted the customer first, by call, text, email or message, and that contact led to the payments",
"credentials_phished": "The customer entered or gave their online banking password somewhere other than the institution's own app or website",
"code_shared": "The customer gave a one-time passcode or security code to another person",
"remote_access": "The customer installed or allowed remote-access software on their device",
"new_device": "A device the customer had never used signed in to the account",
"new_recipient": "Money went to a recipient the customer had never paid before",
"coached": "The customer was told to mislead the institution's staff or hide the real reason for a payment",
"pressure": "The customer was pressured into making the payments, with urgency or a threat such as losing their money, arrest or a deadline"
}
},
"reimburse": {
"type": "noul",
"instructions": "Under the law and any reimbursement policy stated in this case, should the institution reimburse the customer for the payment under review?"
}
}
}The response. Probabilities and confidence are shortened to four decimals here, and the score to three; responses carry full precision.
{
"id": "dec_0d767f1201ac4012a0c69f7143b8037a",
"model": "grayson-1",
"answers": {
"fraud_classifier": {
"type": "choice",
"choice": "not_fraud",
"confidence": 0.8149,
"probabilities": {
"manipulated_products_services": 0.0063,
"manipulated_relationship_trust": 0.0134,
"acted_embezzlement": 0.0104,
"acted_false_claim": 0.0771,
"acted_synthetic_id": 0.0049,
"modified_compromised_credentials": 0.0172,
"modified_impersonation": 0.0072,
"modified_physical_alteration": 0.0044,
"takeover_compromised_credentials": 0.0134,
"takeover_impersonation": 0.0023,
"misused_digital": 0.0118,
"misused_physical_counterfeit": 0.0023,
"not_fraud": 0.8292
}
},
"scam_type": {
"type": "choice",
"choice": "not_scam",
"confidence": 0.9425,
"probabilities": {
"merchandise": 0.0027,
"investment": 0.0024,
"property_sale_rental": 0.0044,
"romance_impostor": 0.0034,
"government_impostor": 0.0324,
"bank_impostor": 0.0021,
"business_impostor": 0.0027,
"relative_family_friend": 0.0009,
"other_trusted_party": 0.0009,
"not_scam": 0.9483
}
},
"contributing_factors": {
"type": "multi_choice",
"multi_choice": [],
"probabilities": {
"unsolicited_contact": 0.1067,
"credentials_phished": 0.0006,
"code_shared": 0.0003,
"remote_access": 0.0001,
"new_device": 0.0004,
"new_recipient": 0.018,
"coached": 0.0006,
"pressure": 0.0759
}
},
"reimburse": {
"type": "noul",
"noul": 0.0141
}
},
"usage": {
"input_tokens": 20264,
"output_tokens": 0
}
}Open in Playground
A refund scam over remote access, where it's unclear who pressed send. A 74-year-old member let a caller posing as a computer-support company onto his laptop. During the session $4,000 moved from his savings to look like an overpaid refund, then $2,450 went by P2P to a new recipient from his own trusted laptop. His accounts of whether he or the caller sent it conflict, and the session signals point both ways.
| Question | Grayson's answer |
|---|---|
fraud_classifier | manipulated_relationship_trust, confidence 56% |
scam_type | business_impostor, confidence 92% |
contributing_factors | unsolicited_contact, code_shared, remote_access, new_recipient, coached, pressure |
reimburse | 75% true |
15,214 input tokens, $0.00053 per decision, answered in 249 ms.
The request, with long lists cut short. The full request is ambiguous.json (51 KB).
{
"model": "grayson-1",
"state": {
"member": {
"member_id": "M-0007342",
"name": "Walter Pryce",
"age": 74,
"member_since": "2003-08-11",
"employment": "Retired machinist; income is a pension and Social Security",
"address": "Tucson, AZ; unchanged since 2011",
"mobile_phone_on_file": "520-555-0137, last changed 2020-01-22",
"email_on_file": "wpryce52@example.net, last changed 2016-04-30",
"trusted_contact_person": "Ellen Pryce-Ruiz (daughter), 520-555-0181, added 2024-02-06",
"digital_banking": "Online banking in a browser on one trusted laptop; no mobile app. One-time codes by SMS to the mobile phone on file for a new device, a new P2P recipient over $500 and contact-detail changes.",
"p2p": "Enrolled 2025-12-20; limit $2,500 per day; limit changes only by phone or in a branch",
"alerts": "Card verification texts on"
},
"accounts": {
"columns": [
"account",
"type",
"opened",
"balance_usd_2026-10-03"
],
"rows": [
[
"x4418",
"checking",
"2003-08-11",
10602.66
],
[
"x9062",
"savings",
"2003-08-11",
26564.87
]
]
},
"devices": {
"columns": [
"device",
"first_seen",
"trusted",
"last_seen"
],
"rows": [
[
"Windows 11 laptop, Chrome",
"2023-03-04",
true,
"2026-10-02 (trust removed 2026-10-02 17:01)"
]
]
},
"checking_x4418_history": {
"columns": [
"posted",
"type",
"description",
"amount_usd",
"balance_usd"
],
"rows": [
[
"2026-04-01",
"ACH credit",
"MFG RETIREE PENSION TR BENEFIT PPD",
1642.18,
5583.84
],
[
"2026-04-01",
"ACH debit",
"SAGUARO VISTA HOA DUES PPD",
-185,
5398.84
],
[
"2026-04-02",
"ATM withdrawal",
"ATM WDL OUR ATM GRANT RD BRANCH",
-200,
5198.84
],
[
"2026-04-03",
"ACH debit",
"UNITEDHEALTHCARE PREM PPD",
-248.6,
4950.24
],
[
"2026-04-03",
"card purchase",
"CIRCLE K 2706633 TUCSON AZ",
-35.43,
4914.81
],
"… 177 more in ambiguous.json"
]
},
"savings_x9062_history": {
"columns": [
"posted",
"type",
"description",
"amount_usd",
"balance_usd"
],
"rows": [
[
"2026-04-06",
"transfer in",
"ONLINE TRANSFER FROM CHECKING x4418",
400,
28518.4
],
[
"2026-04-30",
"dividend",
"DIVIDEND",
7.68,
28526.08
],
[
"2026-05-05",
"transfer in",
"ONLINE TRANSFER FROM CHECKING x4418",
400,
28926.08
],
[
"2026-05-31",
"dividend",
"DIVIDEND",
7.72,
28933.8
],
[
"2026-06-05",
"transfer in",
"ONLINE TRANSFER FROM CHECKING x4418",
400,
29333.8
],
"… 8 more in ambiguous.json"
]
},
"p2p_recipients": {
"columns": [
"recipient",
"token",
"added",
"payments",
"total_usd",
"last_paid"
],
"rows": [
[
"T. Pryce (grandson)",
"phone x3045",
"2025-12-20",
3,
250,
"2026-08-09"
],
[
"Dorian Vance",
"phone x8836",
"2026-10-02",
1,
2450,
"2026-10-02"
]
]
},
"digital_banking_sessions_90_days": {
"columns": [
"start",
"device",
"ip",
"network",
"sign_in",
"activity"
],
"rows": [
[
"2026-07-06T11:06:00-07:00",
"Windows 11 laptop, Chrome (trusted)",
"203.0.113.77",
"Residential cable, Tucson AZ",
"password",
"moved $400.00 checking to savings"
],
[
"2026-07-07T10:28:00-07:00",
"Windows 11 laptop, Chrome (trusted)",
"203.0.113.77",
"Residential cable, Tucson AZ",
"password",
"viewed balances"
],
[
"2026-07-11T15:03:00-07:00",
"Windows 11 laptop, Chrome (trusted)",
"203.0.113.77",
"Residential cable, Tucson AZ",
"password",
"viewed balances"
],
[
"2026-07-20T16:53:00-07:00",
"Windows 11 laptop, Chrome (trusted)",
"203.0.113.77",
"Residential cable, Tucson AZ",
"password",
"viewed checking activity"
],
[
"2026-08-03T14:24:00-07:00",
"Windows 11 laptop, Chrome (trusted)",
"203.0.113.77",
"Residential cable, Tucson AZ",
"password",
"viewed checking activity"
],
"… 16 more in ambiguous.json"
]
},
"rule_hits_12_months": [
{
"ts": "2026-06-09T10:12:00-07:00",
"rule": "CARD-LARGE-PURCHASE",
"item": "DISCOUNT TIRE $684.32",
"action": "Verification text; member replied YES; approved"
},
{
"ts": "2026-10-02T14:04:22-07:00",
"rule": "SESSION-REMOTE-ACCESS",
"item": "Online transfer $4,000.00 savings to checking",
"action": "Remote-access signal on; transfers between the member's own accounts are not held; logged"
},
{
"ts": "2026-10-02T14:13:24-07:00",
"rule": "P2P-REALTIME-RISK",
"item": "P2P $2,450.00 to Dorian Vance",
"action": "Score 688/999 (new recipient, remote-access signal, amount 10x his largest P2P); below the 750 hold threshold; step-up code passed; released"
}
],
"contact_center_history": [
{
"ts": "2025-12-20T10:30:00-07:00",
"channel": "Branch visit",
"summary": "Member enrolled in P2P with staff help to send money to his grandson."
},
{
"ts": "2026-10-02T16:52:00-07:00",
"channel": "Inbound call, member with his daughter on the line",
"summary": "Claim intake (recording summarized). Asked whether he sent the $2,450 payment, the member said: 'Yes, I sent it back to them, they gave me too much refund.' His daughter said: 'Dad, you told me he did it on the computer.' Member: 'Well, he did it, I just did what he said. I don't know, the screen went dark for a while.' Member said he installed a program the caller sent so the caller could 'process the refund', and typed his password on our site while the caller watched. Agent explained the $4,000 'refund' came from his own savings. Agent locked digital banking, removed the laptop as a trusted device, disabled P2P, filed a network fraud report and opened the claim."
}
],
"prior_claims": "None",
"prior_scam_reimbursements": "None",
"session_signals_2026_10_02": {
"source": "Behavioral-biometrics and session-risk script on our online banking pages",
"remote_access_signal": "On from 13:58:41 to 14:22:10 (screen size changed from 1920x1080 to 1280x720 at 13:58:41 and back at 14:22:10; pointer and keyboard events consistent with a remote-desktop tool)",
"pages": {
"columns": [
"page",
"time",
"user_match_score",
"pointer_jumps",
"notes"
],
"rows": [
[
"sign-in",
"13:55:10",
0.84,
0,
"Password typed; member's usual typing rhythm"
],
[
"transfer between accounts",
"14:03:50 to 14:04:22",
0.22,
9,
"Amount typed fast and evenly; cursor jumped between fields with no movement between"
],
[
"P2P add recipient",
"14:08:55 to 14:09:30",
0.71,
0,
"Name typed in the member's usual rhythm; phone number pasted from the clipboard"
],
[
"P2P send",
"14:11:20 to 14:13:24",
0.41,
2,
"Amount and memo 'refund' typed, median 190 ms between keys (member's usual 340 ms; remote-controlled sessions in our portfolio typically 140 ms); code typed 44 seconds after it was sent, all 6 digits within 1.3 seconds; cursor jumped to the Send button"
],
[
"P2P send (declined)",
"14:15:40 to 14:16:05",
0.31,
3,
"Amount typed"
],
[
"settings: P2P limit",
"14:17:02",
null,
1,
"Page viewed; no change possible online"
]
]
},
"score_reference": "user_match_score 0 to 1; the member's 90-day median is 0.81; sessions later confirmed as remote-controlled in our portfolio have a median of 0.31"
},
"email_forwarded_by_daughter": {
"received": "2026-10-02T13:38:12-07:00",
"from": "\"Billing Department\" <billing.renewals@pcplan-orders.example.net>",
"reply_to": "pcplan.support.desk@example.com",
"to": "wpryce52@example.net",
"subject": "Your order #PC-88213907 has been renewed",
"body": "Invoice for a 2-year 'PC Protection Plan' auto-renewal, $399.99, 'charged to your card on file'. 'If you did not authorize this renewal, call 1-888-555-0147 within 24 hours to cancel and receive a full refund.' No card number or merchant address shown.",
"headers": "SPF pass for the sending domain (registered 2026-09-21); no DKIM signature; sent through a bulk-mail relay",
"member_card_activity": "No $399.99 charge, and no computer-protection subscription, on any of his cards with us"
},
"event_timeline": [
{
"ts": "2026-10-02T13:40:00-07:00",
"event": "Per the member: email 'Your computer protection plan renewed: $399.99' with a number to call to cancel; he called it about 13:45"
},
{
"ts": "2026-10-02T13:52:00-07:00",
"event": "Per the member: installed a program from a link the caller read out"
},
{
"ts": "2026-10-02T13:55:10-07:00",
"event": "Sign-in from his trusted laptop, home IP; password; no code needed"
},
{
"ts": "2026-10-02T13:58:41-07:00",
"event": "Remote-access signal on"
},
{
"ts": "2026-10-02T14:04:22-07:00",
"event": "Online transfer $4,000.00 savings x9062 to checking x4418"
},
"… 10 more in ambiguous.json"
],
"member_statement": "Recorded at the investigator interview on 2026-10-03: \"I got an email that said they renewed my computer protection for $399.99, and I never ordered that, so I called to cancel. The man was very nice. He said he'd refund it and had me put a program on so he could do it. I signed in to the credit union so he could see the refund come in. Then the screen went black and said please wait, and he said not to touch the mouse. When it came back he was upset, he said he'd put in $4,000 instead of $400 and he'd lose his job, and there it was in my checking. He said a code would come on my phone to reverse it and to read it to him, and I did. I didn't type the money in. Then he said it didn't all go and he'd call me Monday for the rest.\"",
"investigator_notes": "Interview 2026-10-03 with the member and his daughter (his trusted contact). Asked about his words at intake ('I sent it back to them'), he said: 'I meant I let him do it. I was confused, I'm still confused.' He is not sure whether he typed anything after the screen came back, and not sure whether the code went in before or after he read it out. The daughter says that when he phoned her at 15:30 he said 'the computer man sent the money back for me'. He has used P2P three times, each with his grandson's help on the phone. The program is still on the laptop; the daughter will bring the laptop to the branch on 2026-10-06 for our IT vendor to read the program's connection log, which may show whether the caller had control at 14:11 to 14:13. Member is upset but coherent.",
"recovery": {
"p2p_fraud_report": "Filed 2026-10-02 17:10. Receiving bank replied 2026-10-03 13:20: funds moved out the same afternoon; $0.00 available; account under review.",
"remote_access_program": "Still installed; member told not to use the laptop for banking"
},
"claim": {
"claim_id": "CLM-2026-10-0029",
"opened": "2026-10-02T17:04:00-07:00",
"reported_by": "Member, by phone, with his daughter",
"review_requested": "2026-10-05T09:00:00-07:00",
"regulation_e": "Reported the same day; investigation deadline 2026-10-16 (10 business days)",
"payments_in_claim": [
{
"payment_id": "XFER-20261002-7713",
"type": "Online transfer between the member's own accounts",
"amount_usd": 4000,
"sent": "2026-10-02T14:04:22-07:00",
"from_account": "savings x9062",
"to_account": "checking x4418",
"note": "No money left the member's accounts"
},
{
"payment_id": "P2P-90417",
"type": "P2P transfer (bank network)",
"amount_usd": 2450,
"sent": "2026-10-02T14:13:24-07:00",
"from_account": "checking x4418",
"to": "Dorian Vance, phone token x8836, first payment to this recipient",
"memo": "refund",
"initiated_from": "Member's trusted Windows laptop, home IP, during a session with the remote-access signal on",
"authentication": "Password typed at sign-in (member's typing rhythm); new-recipient code sent by SMS to the member's phone and entered on the laptop 44 seconds later"
}
],
"payment_under_review": "P2P-90417"
}
},
"questions": {
"fraud_classifier": {
"type": "choice",
"instructions": "Using the Federal Reserve's FraudClassifier model, how should the payment under review be classified? An authorized party is someone with the right to initiate the payment; an unauthorized party is someone without that right.",
"criteria": {
"manipulated_products_services": "Authorized party was manipulated: products and services fraud (paid for goods or services that were never delivered or were grossly inferior)",
"manipulated_relationship_trust": "Authorized party was manipulated: relationship and trust fraud (sent money to a trusted party, or an impostor posing as one, with no goods or services expected in return)",
"acted_embezzlement": "Authorized party acted fraudulently: embezzlement (misused funds placed in their trust or belonging to their employer)",
"acted_false_claim": "Authorized party acted fraudulently: false claim (lied to receive a payment or avoid a payment obligation)",
"acted_synthetic_id": "Authorized party acted fraudulently: synthetic identity (used a fabricated identity built from real and invented personal information)",
"modified_compromised_credentials": "Unauthorized party modified the payment information after initiation, using stolen login credentials",
"modified_impersonation": "Unauthorized party modified the payment information after initiation, by impersonating the authorized party without their login credentials",
"modified_physical_alteration": "Unauthorized party modified the payment information after initiation, by altering a physical payment instrument such as a check",
"takeover_compromised_credentials": "Unauthorized party took over the account using stolen login credentials, and initiated the payment",
"takeover_impersonation": "Unauthorized party took over the account by impersonating the authorized party without their login credentials, and initiated the payment",
"misused_digital": "Unauthorized party, without control of the account, used legitimate account information to initiate an electronic payment",
"misused_physical_counterfeit": "Unauthorized party used a forged or counterfeit physical payment instrument",
"not_fraud": "Not fraud: the account holder made the payment without being deceived"
}
},
"scam_type": {
"type": "choice",
"instructions": "Using the Federal Reserve's ScamClassifier model, which scam type is this case? A scam is the use of deception or manipulation intended to achieve financial gain, whether the account holder sent the money or let someone else into the account.",
"criteria": {
"merchandise": "Merchandise: paid for goods that were never delivered or were substantially different from what was advertised",
"investment": "Investment: invested in a financial asset on false promises of a high return",
"property_sale_rental": "Property sale or rental: paid for a home, apartment or property that was fictitious, unavailable or not owned by the seller",
"romance_impostor": "Romance impostor: a fictitious online identity built a romantic or friendly relationship, then asked for money",
"government_impostor": "Government impostor: someone posed as a government agency, law enforcement or a court",
"bank_impostor": "Bank impostor: someone posed as a financial institution, its fraud department or its staff",
"business_impostor": "Business impostor: someone posed as a legitimate business or brand, such as tech support, a utility or an employer",
"relative_family_friend": "Relative, family or friend: someone posed as a relative or friend, or someone acting for one, with a false emergency",
"other_trusted_party": "Other trusted party: someone posed in another role, such as a charity, to ask for money on a false expectation",
"not_scam": "Not a scam: no one deceived or manipulated the account holder"
}
},
"contributing_factors": {
"type": "multi_choice",
"instructions": "Which of these happened in this case?",
"criteria": {
"unsolicited_contact": "Someone contacted the customer first, by call, text, email or message, and that contact led to the payments",
"credentials_phished": "The customer entered or gave their online banking password somewhere other than the institution's own app or website",
"code_shared": "The customer gave a one-time passcode or security code to another person",
"remote_access": "The customer installed or allowed remote-access software on their device",
"new_device": "A device the customer had never used signed in to the account",
"new_recipient": "Money went to a recipient the customer had never paid before",
"coached": "The customer was told to mislead the institution's staff or hide the real reason for a payment",
"pressure": "The customer was pressured into making the payments, with urgency or a threat such as losing their money, arrest or a deadline"
}
},
"reimburse": {
"type": "noul",
"instructions": "Under the law and any reimbursement policy stated in this case, should the institution reimburse the customer for the payment under review?"
}
}
}The response. Probabilities and confidence are shortened to four decimals here, and the score to three; responses carry full precision.
{
"id": "dec_c602aac048e9415599300daa05af6465",
"model": "grayson-1",
"answers": {
"fraud_classifier": {
"type": "choice",
"choice": "manipulated_relationship_trust",
"confidence": 0.5569,
"probabilities": {
"manipulated_products_services": 0.1919,
"manipulated_relationship_trust": 0.591,
"acted_embezzlement": 0.0074,
"acted_false_claim": 0.0123,
"acted_synthetic_id": 0.0084,
"modified_compromised_credentials": 0.0178,
"modified_impersonation": 0.0333,
"modified_physical_alteration": 0.004,
"takeover_compromised_credentials": 0.0202,
"takeover_impersonation": 0.0428,
"misused_digital": 0.0123,
"misused_physical_counterfeit": 0.0035,
"not_fraud": 0.055
}
},
"scam_type": {
"type": "choice",
"choice": "business_impostor",
"confidence": 0.9164,
"probabilities": {
"merchandise": 0.0029,
"investment": 0.0043,
"property_sale_rental": 0.0026,
"romance_impostor": 0.0023,
"government_impostor": 0.0038,
"bank_impostor": 0.0217,
"business_impostor": 0.9248,
"relative_family_friend": 0.0071,
"other_trusted_party": 0.0026,
"not_scam": 0.0279
}
},
"contributing_factors": {
"type": "multi_choice",
"multi_choice": [
"unsolicited_contact",
"code_shared",
"remote_access",
"new_recipient",
"coached",
"pressure"
],
"probabilities": {
"unsolicited_contact": 0.9987,
"credentials_phished": 0.1645,
"code_shared": 0.9999,
"remote_access": 1,
"new_device": 0.0003,
"new_recipient": 0.9998,
"coached": 0.5621,
"pressure": 0.6513
}
},
"reimburse": {
"type": "noul",
"noul": 0.7549
}
},
"usage": {
"input_tokens": 15214,
"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.
fraud_classifierandscam_type: record the top option when it's high and well ahead of the runner-up; send close calls to an analyst.contributing_factorsreturns a probability per factor; its eight options cost more tokens than the other three questions together, so trim to those you report on.reimburseis the probability that it's true: send likely reimbursements to payout and the rest to an analyst, and keep a person responsible for every denial. A middle probability, as in the remote-access claim, usually means it's unclear who sent the payment.
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 hardest call is authorization, and one claim often contains both kinds: a payment a scammer sent with a code the customer read out, and a wire the customer was talked into sending. The facts that separate them sit in free text next to device and authentication records, which is why rules based on payment type alone get it wrong.
What to send
Send the claim and its records, naming one payment per call as payment_under_review:
- How each payment was initiated. Device, session, codes and whether the customer was present answer the authorized-or-unauthorized question.
- The customer's statement, verbatim. The deception it describes defines the ScamClassifier type.
- Sign-ins, devices, codes and session signals. A new device signing in minutes after a code went to the customer points to credentials given away; a remote-access signal on the customer's own device raises the question of who was in control.
- Staff notes from the payment. A stated purpose that doesn't fit the beneficiary suggests coaching.
- Account history, recipient history and timeline. Months of activity show what's normal for the customer, such as earlier payments to the same payee or money moved between their own accounts beforehand. A first-ever recipient stands out, and the reporting date drives Regulation E liability and policy windows.
- Recovery steps. Recalls and network fraud reports change what's left to repay, not the class.
Add your own policy
US law doesn't require you to repay a wire the customer sent themselves, but many institutions repay some scam losses under written conditions, which Grayson applies when they're in the request. This one repays impostor scams up to $10,000 when the member reports within three business days and hasn't been repaid before, and excludes members who gave staff false information unless the impostor told them what to say.
Your scam reimbursement policy adds this to the state of the obvious example:
{
"reimbursement_policy": "Impostor scam reimbursement (effective 2026-07-01). We reimburse a member who was deceived into sending a payment by someone impersonating our credit union, another financial institution or a government agency, up to $10,000 per member in any 12 months, less any amount recovered, when all of these are true: (1) the member reports the scam within 3 business days of the payment; (2) the member has not received a scam reimbursement in the past 24 months; (3) the member did not give our staff false information to complete the payment, unless the impersonator told them what to say. The policy covers wires, P2P payments and online transfers that the member sent. Transfers someone else made from the member's account are handled as unauthorized transfers under Regulation E, not under this policy."
}| Question | Without | With your scam reimbursement policy |
|---|---|---|
fraud_classifier | manipulated_relationship_trust, confidence 85% | manipulated_relationship_trust, confidence 86% |
scam_type | bank_impostor, confidence 96% | bank_impostor, confidence 98% |
contributing_factors | unsolicited_contact, credentials_phished, code_shared, new_device, new_recipient, coached, pressure | unsolicited_contact, credentials_phished, code_shared, new_device, new_recipient, coached, pressure |
reimburse | 13% true | 97% true |
Applied to the bank impostor example: the member reported the day after the wire, has no earlier scam reimbursement, and told the teller and branch manager what the caller told her to say, so the policy covers the $8,400 wire and reimburse flips to yes while the classes stay the same.
Where to call it
- Once the statement and payment records are attached, usually at the end of the intake call, and once per payment with a different
payment_under_review. - Unauthorized transfers go to your Regulation E error-resolution process: generally 10 business days to investigate, or 45 days if you give provisional credit.
- Uncertain answers go to an analyst; call again when new facts arrive, such as the receiving bank's reply to a recall.
Cost and latency
| Example | Input tokens | Per decision | Per 1,000 decisions | Latency |
|---|---|---|---|---|
| Obvious | 20,248 | $0.00071 | $0.71 | 288 ms |
| Legitimate | 20,264 | $0.00071 | $0.71 | 274 ms |
| Ambiguous | 15,214 | $0.00053 | $0.53 | 249 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/fraud-scam-classification/questions.json --label fraud_classifier=<column> --label scam_type=<column> --label contributing_factors=<column> --label reimburse=<column>Each --label names the column with that question's right answer:
fraud_classifier:manipulated_products_services,manipulated_relationship_trust,acted_embezzlement,acted_false_claim,acted_synthetic_id,modified_compromised_credentials,modified_impersonation,modified_physical_alteration,takeover_compromised_credentials,takeover_impersonation,misused_digital,misused_physical_counterfeit,not_fraudscam_type:merchandise,investment,property_sale_rental,romance_impostor,government_impostor,bank_impostor,business_impostor,relative_family_friend,other_trusted_party,not_scamcontributing_factors: option keys separated by|(unsolicited_contact,credentials_phished,code_shared,remote_access,new_device,new_recipient,coached,pressure)reimburse:trueorfalse
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
Is a scam always an authorized payment?
No. The ScamClassifier model also counts scams that end in unauthorized payments, and the CFPB's Regulation E FAQs say that when a third party tricks a consumer into sharing account access information, such as a texted code, and uses it to make a transfer, the transfer is unauthorized. In this recipe's bank impostor example, the P2P payment is a FraudClassifier account takeover with compromised credentials and the wire is relationship and trust fraud; both are bank impostor scams.
Can I use my own taxonomy instead of the Federal Reserve's?
Yes. The options are plain text, so replace them with your own categories and definitions, or ask both in one request, and keep the wording fixed once you've chosen thresholds. Grayson isn't affiliated with or endorsed by the Federal Reserve; the questions in this recipe paraphrase the models' definitions.
Can it spot a false claim dressed up as a scam?
The FraudClassifier question includes the false claim class, which competes with the others on the evidence, such as payments from the customer's own trusted device to a recipient they've paid before, or a statement that contradicts the device and authentication records. Grayson returns a probability, not a finding, so send claims with a high false-claim probability to an investigator, who documents the decision.
Related recipes
Classify card disputes and detect friendly fraud
Classify unauthorized-transaction claims and choose provisional credit, approval or denial.
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.
Contact triage
Grayson reads a call transcript, chat or secure message with the account's recent sign-ins, payments and contacts, and decides what it's about, whether to freeze now, where to route it and whether the customer is vulnerable.
State
What to put in the state, the formats Grayson accepts, and how the state counts toward the token limit.