Classify card disputes and detect friendly fraud
Grayson classifies card disputes as friendly fraud, account takeover or stolen card from authentication, logins and past disputes, and recommends a resolution.
Grayson checks a cardholder's unauthorized-transaction claim against how the transaction was authenticated, the logins and devices around it, and the cardholder's merchant and dispute history. It returns how likely the cardholder authorized the transaction, whether it looks like first-party (friendly) fraud, account takeover, a stolen card or an authorized purchase, and whether to approve, give provisional credit or deny, for about $0.56 to $0.75 per 1,000 decisions.
- Decides: Classify unauthorized-transaction claims and choose provisional credit, approval or denial.
- Call it: When a cardholder files an unauthorized-transaction claim
- Questions: 2 choice, 1 score, 1 yes/no
- Cost: $0.00056 to $0.00075 per decision ($0.56 to $0.75 per 1,000) for these examples' 16,070 to 21,435 input tokens
- Latency: 216 to 232 ms for these examples, the median of 5 calls each through api.finic.ai from US-West
Examples
Three debit card claims, each sent with four months of card authorizations, six months of account activity, 3-D Secure and online banking logs, contact history and the merchant's order details where it has them: a member disputing game-console orders placed from his own phone, a retiree whose card number was tested and used overnight by someone else, and a member disputing orders her ex-partner placed after he moved out.
Open in Playground
Three game-console orders a member says he never placed, all from his own phone. A member disputes three orders at an online electronics store as unauthorized. They passed a one-time code sent to his phone, came from his iPhone on his home internet, were delivered to his apartment, and he went over the charges with us in a chat four days later. He has lost a near-identical claim before.
| Question | Grayson's answer |
|---|---|
claim_type | first_party, confidence 83% |
authorized_likelihood | 3.92 of 4, confidence 96% |
records_contradict_claim | 99% true |
resolution | deny, confidence 96% |
20,490 input tokens, $0.00072 per decision, answered in 227 ms.
The request, with long lists cut short. The full request is fraud.json (74 KB).
{
"model": "grayson-1",
"state": {
"case": {
"case_id": "DSP-2026-104772",
"queue": "Debit card disputes, intake",
"claim_received": "2026-10-05T15:22:00Z",
"regulation": "Regulation E (consumer debit card, point-of-sale)",
"provisional_credit_due_by": "2026-10-19",
"final_determination_due_by": "2027-01-03"
},
"member": {
"member_id": "mem_31862",
"name": "Devon R. Halloway",
"age": 31,
"member_since": "2019-08-14",
"address_on_file": "3318 Brookhaven Dr, Apt 2B, Columbus, OH 43229 (since 2022-04-30)",
"phone_on_file": "(614) 555-0187, mobile, unchanged since 2021-06-11",
"email_on_file": "d.halloway@example.net, unchanged since 2020-02-03",
"owners_and_users": "Sole owner of all accounts; no joint owners or authorized users",
"income": "Payroll direct deposit every other Friday from MIDLAND CROSSDOCK PAYROLL",
"products": [
"Checking x5520 (opened 2019-08-14)",
"Savings x5538 (balance $18.40)",
"Visa debit card x7193",
"Auto loan x9104 (opened 2024-06-03, $389.42 a month, current)"
]
},
"card": {
"card": "Visa debit x7193",
"issued": "2025-03-18 (reissued at expiry; previous card x6630)",
"expires": "2029-03",
"pin_last_changed": "2025-03-22",
"mobile_wallet": "Apple Pay token provisioned 2025-03-20 to the member's iPhone (device B1), verified in the banking app",
"alerts_and_controls": "Push alert for purchases over $100 (on since 2024-02-10); low-balance alert under $50 (on since 2026-07-01); card never locked",
"travel_notices": "None",
"debit_card_overdraft_opt_in": false,
"status_at_claim": "Closed 2026-10-05T15:34Z during the claim call at the member's request; replacement x2286 ordered"
},
"network_alerts": [
{
"received": "2026-05-03",
"source": "Visa compromised account alert (CAMS)",
"event": "Data compromise at a restaurant point-of-sale service provider, not named to issuers",
"data_elements": "Card number, expiration date, cardholder name. No CVV2, no PIN.",
"our_action": "Monitored, not reissued (our policy reissues on confirmed fraud or when CVV2 or PIN is exposed)",
"fraud_on_card_since": "None confirmed"
}
],
"deposit_account": {
"account": "Checking x5520",
"overdraft_coverage": "Not opted in for ATM and one-time debit card overdraft; checks, ACH and recurring card payments can overdraw ($29 fee, at most 3 a day)",
"available_balance_at_claim": -106.74,
"average_daily_balance_90_days": 926.95,
"lowest_balance_180_days": -324.9,
"month_end_balances": {
"2026-04": 1240.64,
"2026-05": 1031.29,
"2026-06": 1242.53,
"2026-07": 2447,
"2026-08": 1032.85,
"2026-09": 1039.25
},
"overdraft_and_nsf_12_months": "12 overdraft fees from 2026-04-08 to 2026-10-05 (in other_account_activity), one refunded as a courtesy; before that, 2025-11-24 and 2026-01-02"
},
"card_transactions": {
"period": "2026-06-08 to 2026-10-05, card x7193, all authorizations including declines; times UTC (member is in US Eastern time)",
"columns": [
"time_utc",
"merchant",
"mcc",
"amount_usd",
"entry",
"verification",
"result"
],
"rows": [
[
"2026-06-09T01:07:31Z",
"AMAZON MKTPL*URPH682G8 AMZN.COM/BILL WA",
"5999",
18.24,
"card on file",
"stored credential",
"approved"
],
[
"2026-06-09T01:42:44Z",
"WM SUPERCENTER #2311 COLUMBUS OH",
"5411",
28.1,
"chip",
"PIN",
"approved"
],
[
"2026-06-09T13:30:13Z",
"NETFLIX.COM LOS GATOS CA",
"4899",
15.49,
"recurring",
"stored credential",
"approved"
],
[
"2026-06-09T17:24:56Z",
"Amazon.com*RPSRMX0DZ AMZN.COM/BILL WA",
"5942",
33,
"card on file",
"stored credential",
"approved"
],
[
"2026-06-12T15:47:15Z",
"RAISING CANES #0412 COLUMBUS OH",
"5814",
11.31,
"Apple Pay",
"Face ID",
"approved"
],
"… 188 more in fraud.json"
]
},
"other_account_activity": {
"period": "2026-04-08 to 2026-10-05, checking x5520, excluding card transactions",
"columns": [
"posted",
"description",
"type",
"amount_usd"
],
"rows": [
[
"2026-04-10",
"MIDLAND CROSSDOCK PAYROLL PPD",
"ACH credit",
1382.47
],
[
"2026-04-18",
"ZELLE FROM ANDRE HOLLIS",
"Zelle in",
60
],
[
"2026-04-20",
"TRANSFER TO LOAN x9104 (AUTO)",
"transfer",
-389.42
],
[
"2026-04-24",
"MIDLAND CROSSDOCK PAYROLL PPD",
"ACH credit",
1381.21
],
[
"2026-04-24",
"AEP OHIO UTIL PMT WEB",
"ACH debit",
-61.62
],
"… 54 more in fraud.json"
]
},
"three_d_secure_log": {
"period": "2026-04-08 to 2026-10-05, every 3-D Secure authentication on card x7193 (our access control server)",
"devices": {
"T1": "iPhone, Mobile Safari, iOS 18; same device fingerprint as online banking device B1 since 2023-10"
},
"columns": [
"time_utc",
"merchant",
"amount_usd",
"flow",
"result",
"device",
"ip"
],
"rows": [
[
"2026-04-25T01:47:03Z",
"STRIDEHAUS.COM PORTLAND OR",
118,
"frictionless",
"authenticated",
"T1",
"198.51.100.77"
],
[
"2026-07-12T02:05:38Z",
"STRIDEHAUS.COM PORTLAND OR",
164.99,
"frictionless",
"authenticated",
"T1",
"198.51.100.77"
],
[
"2026-07-14T02:22:13Z",
"NIKE.COM BEAVERTON OR",
69.37,
"frictionless",
"authenticated",
"T1",
"198.51.100.77"
],
[
"2026-08-29T01:14:22Z",
"KELDRATECH.COM ONTARIO CA",
649.99,
"challenge: SMS code to (614) 555-0187",
"authenticated",
"T1",
"198.51.100.77"
],
[
"2026-08-29T01:19:05Z",
"KELDRATECH.COM ONTARIO CA",
189.98,
"frictionless",
"authenticated",
"T1",
"198.51.100.77"
],
[
"2026-09-12T23:48:51Z",
"KELDRATECH.COM ONTARIO CA",
79.99,
"frictionless",
"authenticated",
"T1",
"198.51.100.77"
],
[
"2026-09-14T18:02:37Z",
"KELDRATECH.COM ONTARIO CA",
34.99,
"frictionless",
"authenticated",
"T1",
"203.0.113.45"
],
[
"2026-09-18T01:03:38Z",
"NIKE.COM BEAVERTON OR",
102.33,
"frictionless",
"authenticated",
"T1",
"198.51.100.77"
]
]
},
"digital_banking": {
"devices": {
"B1": "iPhone 14, mobile app, first seen 2023-10-02, last seen 2026-10-05",
"B2": "Windows 10 PC, Chrome, first seen 2021-01-15, last seen 2026-06-03"
},
"ip_addresses": {
"198.51.100.77": "Residential cable ISP, Columbus, OH; 231 of the member's 388 sessions in the last 12 months",
"203.0.113.0/24": "Mobile carrier, Ohio; the member's phone away from home"
},
"profile_changes_12_months": [
{
"date": "2026-07-01",
"change": "Turned on low-balance alert (under $50)",
"device": "B1",
"ip": "198.51.100.77"
}
],
"sessions_90_days": {
"columns": [
"time_utc",
"device",
"ip",
"activity"
],
"rows": [
[
"2026-07-09T00:05:45Z",
"B1",
"198.51.100.77",
"mobile app, Face ID; account summary"
],
[
"2026-07-09T22:10:45Z",
"B1",
"198.51.100.77",
"mobile app, Face ID; account activity"
],
[
"2026-07-10T00:52:05Z",
"B1",
"198.51.100.77",
"mobile app, Face ID; account summary"
],
[
"2026-07-10T11:00:37Z",
"B1",
"198.51.100.77",
"mobile app, Face ID; account summary"
],
[
"2026-07-12T16:28:40Z",
"B1",
"198.51.100.77",
"mobile app, Face ID; Zelle"
],
"… 51 more in fraud.json"
]
}
},
"contact_history_12_months": [
{
"time": "2025-11-24T17:40:00Z",
"channel": "Phone",
"summary": "Asked why a rent payment overdrew the account. Explained how ACH items are paid into overdraft and offered the low-balance alert; member declined the alert then."
},
{
"time": "2026-06-02T16:05:00Z",
"channel": "Phone",
"summary": "Asked for a refund of the 6/1 overdraft fee from the rent payment. Refunded $29 as a courtesy (one per 12 months)."
},
{
"time": "2026-07-01T00:12:00Z",
"channel": "Secure message",
"summary": "Asked how to set up a low-balance alert. Sent instructions; member turned it on the same evening."
},
{
"time": "2026-09-02T17:18:00Z",
"channel": "In-app chat",
"summary": "Member asked why the account was negative after payday. Agent listed the debits since the 8/28 deposit, including KELDRATECH.COM $649.99 and $189.98 on 8/29 and WILLOWBEND APTS $1,085.00 on 9/1.",
"transcript_excerpt": [
"Member: why is my account negative i just got paid friday",
"Agent: Since your deposit on 8/28 these have posted: KELDRATECH.COM $649.99 and $189.98 on 8/29, WILLOWBEND APTS $1,085.00 on 9/1, plus a $120 ATM withdrawal and a few smaller purchases. The rent payment overdrew the account and a $29 overdraft fee was charged.",
"Member: ok yea. can u take the fee off",
"Agent: I'm sorry, a courtesy refund was already given on 6/2, so I'm not able to refund this one.",
"Member: ok"
]
},
{
"time": "2026-10-01T15:11:33Z",
"channel": "Phone",
"summary": "Card declined at a store minutes earlier. Explained it was for insufficient funds. Member asked about a small-dollar loan; sent the application link."
}
],
"prior_disputes": [
{
"filed": "2024-11-18",
"merchant": "LOOTFORGE MARKET (online game items)",
"amount_usd": 310,
"reason": "Unauthorized, card in possession",
"outcome": "Credited; merchant did not respond to the chargeback"
},
{
"filed": "2025-06-09",
"merchant": "STRIDEHAUS.COM (online sneakers)",
"amount_usd": 540,
"reason": "Unauthorized, card in possession (2 orders)",
"outcome": "Provisional credit reversed 2025-07-22: the merchant's representment showed the same device and IP address as two earlier undisputed orders (Visa Compelling Evidence 3.0) and delivery to the address on file. Member notified in writing; did not respond.",
"since_then": "Three more purchases at STRIDEHAUS.COM (2025-09-14, 2026-04-24, 2026-07-11), none disputed"
},
{
"filed": "2026-02-16",
"merchant": "Online phone-accessory retailer",
"amount_usd": 88.4,
"reason": "Merchandise not received",
"outcome": "Closed 2026-02-27; merchant refunded the member"
}
],
"disputed_merchant": {
"merchant": "KELDRATECH.COM ONTARIO CA",
"acquirer_name": "Keldra Technology Supply LLC",
"mcc": "5732 Electronics stores",
"location": "Ontario, CA, US (e-commerce)",
"our_portfolio_90_days": {
"cards_with_purchases": 2318,
"fraud_claims": 4,
"fraud_claim_rate_pct": 0.17,
"card_testing_watchlist": false
},
"member_history_before_window": [
{
"time_utc": "2025-12-20T02:33:10Z",
"amount_usd": 59.99,
"three_d_secure": "frictionless, device T1, IP 198.51.100.77",
"disputed": false
},
{
"time_utc": "2026-03-02T23:58:41Z",
"amount_usd": 129.99,
"three_d_secure": "frictionless, device T1, IP 198.51.100.77",
"disputed": false
}
],
"merchant_order_details": {
"source": "Visa Order Insight, merchant response retrieved during the claim call at 2026-10-05T15:31:48Z",
"customer_account": {
"name": "Devon Halloway",
"created": "2025-12-19",
"email": "d.halloway@example.net (matches our email on file)",
"phone": "(614) 555-0187 (matches our phone on file)",
"orders": 6
},
"orders": [
{
"order": "KT-4471902",
"date": "2025-12-19",
"amount_usd": 59.99,
"items": "Wireless controller",
"ship_to": "Address on file",
"delivery": "Delivered 2025-12-23"
},
{
"order": "KT-5120388",
"date": "2026-03-02",
"amount_usd": 129.99,
"items": "Gaming headset; 2-year protection plan",
"ship_to": "Address on file",
"delivery": "Delivered 2026-03-05"
},
{
"order": "KT-6650117",
"date": "2026-08-28",
"amount_usd": 649.99,
"items": "Game console, 1 TB, with two games",
"ship_to": "Address on file",
"delivery": "UPS Ground, delivered 2026-09-01 14:02 local, left at front door, delivery photo on file"
},
{
"order": "KT-6650241",
"date": "2026-08-28",
"amount_usd": 189.98,
"items": "Wireless controller (2)",
"ship_to": "Address on file",
"delivery": "UPS Ground, delivered 2026-09-01 14:02 local, same shipment as KT-6650117"
},
{
"order": "KT-6803315",
"date": "2026-09-12",
"amount_usd": 79.99,
"items": "Controller charging dock; digital game code emailed to the account email",
"ship_to": "Address on file",
"delivery": "USPS, delivered 2026-09-15, in or at mailbox; game code redeemed 2026-09-12 20:02 local"
},
{
"order": "KT-6911820",
"date": "2026-09-14",
"amount_usd": 34.99,
"items": "Digital game add-on, emailed to the account email",
"ship_to": "None (digital)",
"delivery": "Code redeemed 2026-09-14 14:05 local"
}
],
"device_and_ip": "The same device ID on all six orders; IP 198.51.100.77 on all but KT-6911820 (mobile carrier IP)",
"compelling_evidence_3_0": "Qualifies: two undisputed orders 120 to 365 days before the dispute (2025-12-19 and 2026-03-02) share the device ID, IP address and shipping address with the disputed orders",
"returns_or_refund_requests": "None"
}
},
"disputed_transactions": [
{
"authorized": "2026-08-29T01:14:22Z",
"posted": "2026-08-31",
"auth_id": "K4Q81Z",
"merchant": "KELDRATECH.COM ONTARIO CA",
"mcc": "5732 Electronics stores",
"amount_usd": 649.99,
"channel": "E-commerce, card number keyed at checkout (POS entry 01, condition 59)",
"eci": "05 (3-D Secure, fully authenticated)",
"cavv_result": "2 (CAVV passed)",
"three_d_secure": {
"flow": "Challenge",
"method": "One-time code by SMS to (614) 555-0187",
"code_sent": "2026-08-29T01:13:40Z",
"code_entered": "2026-08-29T01:14:09Z, correct on first attempt",
"device": "T1",
"ip": "198.51.100.77"
},
"avs_result": "Y (street and ZIP match)",
"cvv2_result": "M (match)",
"issuer_fraud_score": 212,
"rules_fired": [],
"alert_sent": "Push notification (purchase over $100) delivered to device B1 at 01:14:24Z"
},
{
"authorized": "2026-08-29T01:19:05Z",
"posted": "2026-08-31",
"auth_id": "K4R07M",
"merchant": "KELDRATECH.COM ONTARIO CA",
"mcc": "5732 Electronics stores",
"amount_usd": 189.98,
"channel": "E-commerce, card number keyed at checkout (POS entry 01, condition 59)",
"eci": "05 (3-D Secure, fully authenticated)",
"cavv_result": "2 (CAVV passed)",
"three_d_secure": {
"flow": "Frictionless (risk-based, same device and session as the order 5 minutes earlier)",
"device": "T1",
"ip": "198.51.100.77"
},
"avs_result": "Y (street and ZIP match)",
"cvv2_result": "M (match)",
"issuer_fraud_score": 164,
"rules_fired": [],
"alert_sent": "Push notification (purchase over $100) delivered to device B1 at 01:19:07Z"
},
{
"authorized": "2026-09-12T23:48:51Z",
"posted": "2026-09-14",
"auth_id": "M2C55T",
"merchant": "KELDRATECH.COM ONTARIO CA",
"mcc": "5732 Electronics stores",
"amount_usd": 79.99,
"channel": "E-commerce, stored card in the merchant account (POS entry 10, credential on file)",
"eci": "05 (3-D Secure, fully authenticated)",
"cavv_result": "2 (CAVV passed)",
"three_d_secure": {
"flow": "Frictionless",
"device": "T1",
"ip": "198.51.100.77"
},
"avs_result": "Y (street and ZIP match)",
"cvv2_result": "not sent (stored credential)",
"issuer_fraud_score": 88,
"rules_fired": [],
"alert_sent": "None (under $100)"
}
],
"claim": {
"filed": "2026-10-05T15:22:00Z",
"channel": "Phone",
"reason_selected": "Unauthorized transaction, card in possession",
"transactions": 3,
"amount_usd": 919.96,
"card_reported_lost_or_stolen": false,
"cardholder_statement": "I didn't make these. I've never heard of Keldra Tech and I never ordered anything from them. I only saw the charges when I went through my statement this weekend. My card's been in my wallet the whole time and nobody uses my phone but me. I need this money back, my car payment is coming out.",
"intake_questions": [
{
"question": "Is the card in your possession?",
"answer": "Yes, in my wallet."
},
{
"question": "When did you last use the card yourself?",
"answer": "Last week, I think. Gas or food."
},
{
"question": "Has anyone else used the card or card number, or had access to your phone or online banking?",
"answer": "No. I live alone and nobody else uses my card or my phone."
},
{
"question": "Have you shared your card number, PIN, a password or a verification code, or had calls, texts or emails asking for them?",
"answer": "No, never."
},
{
"question": "Do you recognize the merchant? Have you contacted the merchant?",
"answer": "No, I've never heard of them. I haven't contacted them."
},
{
"question": "Did you receive any goods or services from these transactions?",
"answer": "No, nothing came to my apartment."
},
{
"question": "Did you receive any verification codes or alerts you didn't expect?",
"answer": "I don't remember getting a code. I get a lot of texts."
},
{
"question": "Will you sign a written statement of unauthorized use? Have you filed a police report?",
"answer": "Yes, I'll sign it. I haven't filed a police report."
}
],
"documents": {
"written_statement": "E-signed during the call, 2026-10-05T15:40Z",
"police_report": "None",
"merchant_evidence": "Order details retrieved during the call (see disputed_merchant)"
},
"agent_notes": "Member firm that he never shopped at KELDRATECH.COM. Asked about the 9/2 chat where these charges were listed: said he didn't really read it. Asked twice whether the credit could be given today. Card closed and reissued at his request. Merchant order details pulled during the call (see disputed_merchant)."
}
},
"questions": {
"claim_type": {
"type": "choice",
"instructions": "Which explanation best fits the transaction or transactions the cardholder is disputing?",
"criteria": {
"first_party": "First-party (friendly) fraud: the cardholder made or agreed to the transaction and is knowingly claiming they didn't",
"account_takeover": "Account takeover: someone else got into the cardholder's online banking, phone, email or mobile wallet and used the card through that access",
"stolen_card": "Third-party fraud with a lost, stolen or counterfeit card or stolen card details, without access to the cardholder's other accounts",
"authorized_or_merchant": "Not fraud: the transaction was authorized, and the cardholder doesn't recognize it or has a problem with the merchant (an unfamiliar billing name, a purchase by someone they let use the card, a subscription, goods not received)"
}
},
"authorized_likelihood": {
"type": "score",
"instructions": "How likely is it that the cardholder made the disputed transaction or transactions, or let someone else make them with their card?",
"criteria": [
"Very unlikely (under 10%)",
"Unlikely (10-40%)",
"Uncertain (40-60%)",
"Likely (60-90%)",
"Very likely (over 90%)"
]
},
"records_contradict_claim": {
"type": "noul",
"instructions": "Do the institution's own records contradict what the cardholder says in the claim?"
},
"resolution": {
"type": "choice",
"instructions": "How should the institution resolve this unauthorized-transaction claim at intake?",
"criteria": {
"approve": "Approve the claim now: credit the amount permanently and close it as unauthorized",
"provisional_credit": "Give provisional credit and investigate further before deciding",
"deny": "Deny the claim and send the cardholder a written explanation with the evidence that the transaction was authorized"
}
}
}
}The response. Probabilities and confidence are shortened to four decimals here, and the score to three; responses carry full precision.
{
"id": "dec_c5dd295bd5ec40dd80807aa602fffef9",
"model": "grayson-1",
"answers": {
"claim_type": {
"type": "choice",
"choice": "first_party",
"confidence": 0.83,
"probabilities": {
"first_party": 0.8725,
"account_takeover": 0.0036,
"stolen_card": 0.0059,
"authorized_or_merchant": 0.1181
}
},
"authorized_likelihood": {
"type": "score",
"score": 3.916,
"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.9574,
"probabilities": {
"0": 0.0122,
"1": 0.0051,
"2": 0.0031,
"3": 0.0138,
"4": 0.9659
}
},
"records_contradict_claim": {
"type": "noul",
"noul": 0.9933
},
"resolution": {
"type": "choice",
"choice": "deny",
"confidence": 0.9621,
"probabilities": {
"approve": 0.0179,
"provisional_credit": 0.0074,
"deny": 0.9747
}
}
},
"usage": {
"input_tokens": 20490,
"output_tokens": 0
}
}Open in Playground
A retiree's card tested with $1 at 3 a.m., then used at a site that never saw her. A 64-year-old member's card was tested with a $1 charity charge at 2:52 a.m. and then charged $786.43 at an electronics site, with no 3-D Secure, from a data-center IP, for an order shipped to a reshipper. She answered NO to our fraud texts when she woke up. A new phone, an August trip and a recent password reset are all in the record and all explained.
| Question | Grayson's answer |
|---|---|
claim_type | stolen_card, confidence 84% |
authorized_likelihood | 0.09 of 4, confidence 95% |
records_contradict_claim | 27% true |
resolution | approve, confidence 83% |
16,070 input tokens, $0.00056 per decision, answered in 216 ms.
The request, with long lists cut short. The full request is legitimate.json (57 KB).
{
"model": "grayson-1",
"state": {
"case": {
"case_id": "DSP-2026-104801",
"queue": "Debit card disputes, intake",
"claim_received": "2026-10-06T11:31:00Z",
"regulation": "Regulation E (consumer debit card, point-of-sale)",
"provisional_credit_due_by": "2026-10-20",
"final_determination_due_by": "2027-01-04"
},
"member": {
"member_id": "mem_04417",
"name": "Linda M. Sorensen",
"age": 64,
"member_since": "2003-04-11",
"address_on_file": "742 Wexford Ln, Cincinnati, OH 45230 (since 2003-04-11)",
"phone_on_file": "(513) 555-0163, mobile, unchanged since 2016-05-02",
"email_on_file": "lindasorensen@example.com, unchanged since 2012-09-18",
"owners_and_users": "Sole owner; daughter Karen S. Whitfield is payable-on-death beneficiary on savings x0427, with no access",
"income": "Social Security on the second Wednesday and a pension annuity on the 1st",
"products": [
"Checking x0419 (opened 2003-04-11)",
"Savings x0427 (balance $41,206.18)",
"12-month CD x0435",
"Visa debit card x2045"
]
},
"card": {
"card": "Visa debit x2045",
"issued": "2024-06-04 (reissued at expiry)",
"expires": "2028-06",
"pin_last_changed": "2019-02-11",
"mobile_wallet": "None",
"alerts_and_controls": "SMS fraud alerts to (513) 555-0163 (default for all cards); no purchase or balance alerts; card never locked",
"travel_notices": "None (none filed for the August trip)",
"debit_card_overdraft_opt_in": false,
"status_at_claim": "Put on hold 2026-10-06T07:38Z by the fraud system pending the member's reply; closed 11:44Z during the claim call; replacement x6618 mailed"
},
"network_alerts": [
{
"received": "2026-09-10",
"source": "Visa compromised account alert (CAMS)",
"event": "E-commerce data compromise at a merchant not named to issuers",
"data_elements": "Card number, expiration date, CVV2, billing ZIP code",
"our_action": "Card added to heightened monitoring for 90 days; scheduled for reissue in the 2026-10-15 batch",
"fraud_on_card_since": "None before 2026-10-06"
}
],
"deposit_account": {
"account": "Checking x0419",
"overdraft_coverage": "Not opted in for ATM and one-time debit card overdraft",
"available_balance_at_claim": 15953.98,
"average_daily_balance_90_days": 13963.64,
"lowest_balance_180_days": 5428.65,
"month_end_balances": {
"2026-04": 5428.65,
"2026-05": 8172.57,
"2026-06": 8970.19,
"2026-07": 11536.85,
"2026-08": 12265.12,
"2026-09": 14831.47
},
"overdraft_and_nsf_12_months": "None"
},
"card_transactions": {
"period": "2026-06-09 to 2026-10-06, card x2045, all authorizations including declines; times UTC (member is in US Eastern time)",
"columns": [
"time_utc",
"merchant",
"mcc",
"amount_usd",
"entry",
"verification",
"result"
],
"rows": [
[
"2026-06-09T13:17:31Z",
"MEIJER #187 CINCINNATI OH",
"5411",
53.94,
"chip",
"PIN",
"approved"
],
[
"2026-06-10T17:35:38Z",
"PANERA BREAD #600123 CINCINNATI OH",
"5814",
29.28,
"chip",
"no CVM",
"approved"
],
[
"2026-06-11T14:44:31Z",
"SALON ROUGE CINCINNATI OH",
"7230",
70,
"chip",
"no CVM",
"approved"
],
[
"2026-06-11T18:36:31Z",
"SHELL OIL 57442190 CINCINNATI OH",
"5542",
43.47,
"chip",
"ZIP code",
"approved"
],
[
"2026-06-12T12:06:41Z",
"NETFLIX.COM LOS GATOS CA",
"4899",
7.99,
"recurring",
"stored credential",
"approved"
],
"… 141 more in legitimate.json"
]
},
"other_account_activity": {
"period": "2026-04-09 to 2026-10-06, checking x0419, excluding card transactions",
"columns": [
"posted",
"description",
"type",
"amount_usd"
],
"rows": [
[
"2026-04-10",
"STATE FARM RO 27 SFPP",
"ACH debit",
-162.4
],
[
"2026-04-15",
"DUKE ENERGY OH WEB PMT",
"ACH debit",
-88.73
],
[
"2026-04-21",
"CHECK 1438",
"check",
-120
],
[
"2026-05-01",
"MIDWEST EDUCATORS ANNUITY PMT",
"ACH credit",
3108.44
],
[
"2026-05-01",
"HEARTLAND MUTUAL MEDSUPP PREM",
"ACH debit",
-187.5
],
"… 55 more in legitimate.json"
]
},
"three_d_secure_log": {
"period": "2026-04-09 to 2026-10-06, every 3-D Secure authentication on card x2045 (our access control server)",
"devices": {
"T1": "iPad, Safari, iPadOS 18; same device fingerprint as online banking device B1"
},
"columns": [
"time_utc",
"merchant",
"amount_usd",
"flow",
"result",
"device",
"ip"
],
"rows": [
[
"2026-08-29T00:14:55Z",
"KOHLS.COM MENOMONEE FLS WI",
63.07,
"frictionless",
"authenticated",
"T1",
"198.51.100.140"
],
[
"2026-09-28T00:20:18Z",
"KOHLS.COM MENOMONEE FLS WI",
50.49,
"frictionless",
"authenticated",
"T1",
"198.51.100.140"
]
],
"note": "None of the 10/6 transactions used 3-D Secure; the merchants did not request it."
},
"card_alerts_sent": [
{
"sent": "2026-08-16T18:02:14Z",
"type": "SMS fraud alert",
"text": "Did you attempt $612.00 at COASTAL HOME DECOR MYRTLE BEACH SC? Reply YES or NO.",
"reply": "YES at 2026-08-16T18:03:40Z; card cleared, purchase retried and approved at 18:05:47Z"
},
{
"sent": "2026-10-06T07:31:14Z",
"type": "SMS fraud alert",
"text": "Did you attempt $786.43 at VANTRELL DIGITAL? Reply YES or NO.",
"reply": "NO at 2026-10-06T11:06:40Z"
},
{
"sent": "2026-10-06T07:39:30Z",
"type": "SMS fraud alert",
"text": "Did you attempt $1,129.00 at ORVENTA GIFTS? Reply YES or NO. Your card is on hold until you reply.",
"reply": "NO at 2026-10-06T11:06:58Z"
}
],
"digital_banking": {
"devices": {
"B1": "iPad (9th gen), mobile app, first seen 2021-03-14, last seen 2026-10-01",
"B2": "iPhone 12, mobile app, first seen 2022-11-26, last seen 2026-09-26",
"B3": "iPhone 16, mobile app, first seen 2026-09-26 (enrolled with a one-time code to the phone on file, from the home IP)"
},
"ip_addresses": {
"198.51.100.140": "Residential fiber ISP, Cincinnati, OH; 171 of the member's 186 sessions in the last 12 months",
"203.0.113.0/24": "Mobile carrier, Ohio and South Carolina",
"192.0.2.88": "Hotel network, Myrtle Beach, SC (2026-08-15 to 2026-08-20)"
},
"profile_changes_12_months": [
{
"date": "2026-07-09",
"change": "Password reset after a lockout (one-time code to the phone on file); see the 7/9 call",
"device": "B1",
"ip": "198.51.100.140"
},
{
"date": "2026-09-26",
"change": "New device B3 enrolled",
"device": "B3",
"ip": "198.51.100.140"
}
],
"sessions_90_days": {
"columns": [
"time_utc",
"device",
"ip",
"activity"
],
"rows": [
[
"2026-07-09T14:48:02Z",
"B1",
"198.51.100.140",
"password reset: one-time code to (513) 555-0163, then login"
],
[
"2026-07-09T18:22:34Z",
"B2",
"198.51.100.140",
"mobile app, Face ID; account summary"
],
[
"2026-07-10T00:04:39Z",
"B2",
"198.51.100.140",
"mobile app, Face ID; bill pay"
],
[
"2026-07-11T13:22:04Z",
"B1",
"198.51.100.140",
"mobile app, passcode; account summary"
],
[
"2026-07-13T23:33:49Z",
"B1",
"198.51.100.140",
"mobile app, passcode; account activity"
],
"… 33 more in legitimate.json"
]
}
},
"contact_history_12_months": [
{
"time": "2026-07-09T14:31:00Z",
"channel": "Phone",
"summary": "Locked out of online banking after too many password attempts. Agent verified her and walked her through a reset on her iPad."
},
{
"time": "2026-08-24T15:20:00Z",
"channel": "Phone",
"summary": "Asked about renewal rates for her CD; renewed x0435 for 12 months at 3.85%."
},
{
"time": "2026-09-26T20:33:00Z",
"channel": "Phone",
"summary": "Daughter on the line with the member's permission; asked how to move the banking app to a new iPhone. Agent explained device enrollment; member received and read back the one-time code herself."
}
],
"prior_disputes": [
{
"filed": "2024-03-19",
"merchant": "Online garden supplier",
"amount_usd": 64.5,
"reason": "Merchandise not received",
"outcome": "Withdrawn 2024-04-02 after the merchant refunded the member"
}
],
"disputed_merchants": [
{
"merchant": "LUMENFIELD RELIEF FUND",
"mcc": "8398 Charitable organizations",
"location": "e-commerce, acquirer in US",
"our_portfolio": "First seen 2026-10-01. $1.00 authorizations on 63 of our cards in 5 days, 59 of them cards that had never used this merchant; 21 declined for CVV2 mismatch. On our card-testing watchlist since 2026-10-03.",
"member_history": "None before 2026-10-06"
},
{
"merchant": "VANTRELL DIGITAL",
"mcc": "5732 Electronics stores",
"location": "Wilmington, DE (e-commerce)",
"our_portfolio": "First seen 2026-09-29. 9 of our cards, 5 of them already in fraud claims, all after a $1.00 authorization at LUMENFIELD RELIEF FUND.",
"member_history": "None before 2026-10-06",
"merchant_order_details": {
"source": "Visa Order Insight, merchant response retrieved during the claim call at 2026-10-06T11:39:02Z",
"customer_account": {
"name": "Linda Sorensen",
"created": "2026-10-06T07:24:51Z",
"email": "lindasorensen.1961@example.org (not our email on file)",
"phone": "(305) 555-0129 (not our phone on file)",
"orders": 1
},
"orders": [
{
"order": "VD-0091442",
"date": "2026-10-06",
"amount_usd": 786.43,
"items": "Wireless earbuds (2), smartwatch (1); overnight shipping",
"bill_to": "Member's address on file",
"ship_to": "Package-forwarding address in Doral, FL (a commercial reshipping service; suite number assigned to a reshipping customer)",
"delivery": "Not shipped; merchant placed the order on hold after our inquiry"
}
],
"device_and_ip": "Windows 10 desktop, Chrome; browser time zone UTC+03:00; IP 203.0.113.58 (hosting provider data center, Frankfurt, DE)",
"compelling_evidence_3_0": "Does not qualify: no earlier orders from this card"
}
},
{
"merchant": "ORVENTA GIFTS and QUILLAMOR AUDIO",
"note": "Declined attempts, not disputed. Neither merchant had seen this card before."
}
],
"common_point_of_purchase": "Fraud analytics run 2026-10-02: 14 of our cards bought at HEARTHWILLOW QUILTS (first seen in our portfolio 2026-07-06) and 6 of them have since had card-not-present fraud. This card bought there on 2026-08-03 ($89.95).",
"disputed_transactions": [
{
"authorized": "2026-10-06T06:53:41Z",
"posted": "pending",
"auth_id": "Q7D20B",
"merchant": "LUMENFIELD RELIEF FUND",
"mcc": "8398 Charitable organizations",
"amount_usd": 1,
"channel": "E-commerce, card number keyed (POS entry 01, condition 59)",
"eci": "07 (no 3-D Secure)",
"avs_result": "Z (ZIP matches, street does not)",
"cvv2_result": "M (match); the attempt 91 seconds earlier failed CVV2",
"issuer_fraud_score": 288,
"rules_fired": [
"Merchant on card-testing watchlist (score raised, below decline threshold)"
]
},
{
"authorized": "2026-10-06T07:31:12Z",
"posted": "pending",
"auth_id": "Q7F64H",
"merchant": "VANTRELL DIGITAL",
"mcc": "5732 Electronics stores",
"merchant_location": "Wilmington, DE, US (e-commerce)",
"amount_usd": 786.43,
"channel": "E-commerce, card number keyed (POS entry 01, condition 59)",
"eci": "07 (no 3-D Secure)",
"avs_result": "Z (ZIP matches, street does not)",
"cvv2_result": "M (match)",
"issuer_fraud_score": 640,
"rules_fired": [
"Card-not-present purchase within 2 hours of a $1 authorization at a watchlisted merchant: approve and send SMS alert"
]
}
],
"claim": {
"filed": "2026-10-06T11:31:00Z",
"channel": "Phone",
"reason_selected": "Unauthorized transaction, card in possession",
"transactions": 2,
"amount_usd": 787.43,
"card_reported_lost_or_stolen": false,
"cardholder_statement": "I got a text in the middle of the night asking if I tried to spend over a thousand dollars at a gift shop. I was asleep and only saw it when I got up, so I answered NO. Then I looked in the app and there's another one for almost eight hundred dollars at a place I've never heard of, and a dollar to some charity. My card is right here in my wallet. I haven't given my card number to anybody.",
"intake_questions": [
{
"question": "Is the card in your possession?",
"answer": "Yes, it's in my wallet."
},
{
"question": "When did you last use the card yourself?",
"answer": "Kroger, yesterday around 5:30 in the evening."
},
{
"question": "Has anyone else used the card or card number, or had access to your phone or online banking?",
"answer": "No. I got a new iPhone at the Verizon store on the 26th and my daughter helped me put the bank app on it, but she doesn't have my card or my password."
},
{
"question": "Have you shared your card number, PIN, a password or a verification code, or had calls, texts or emails asking for them?",
"answer": "No calls or texts like that. I haven't given my card number to anyone."
},
{
"question": "Do you recognize the merchant? Have you contacted the merchant?",
"answer": "No, I don't know any of them. I haven't contacted them."
},
{
"question": "Did you receive any goods or services from these transactions?",
"answer": "No."
},
{
"question": "Did you receive any verification codes or alerts you didn't expect?",
"answer": "Only the fraud texts this morning."
},
{
"question": "Will you sign a written statement of unauthorized use? Have you filed a police report?",
"answer": "Yes, I'll sign it. I haven't called the police."
}
],
"documents": {
"written_statement": "E-signed during the call, 2026-10-06T11:52Z",
"police_report": "None",
"merchant_evidence": "Order details retrieved for VANTRELL DIGITAL; none available for LUMENFIELD RELIEF FUND"
},
"agent_notes": "Member calm and specific. Confirmed her last purchases (Kroger 10/5, Verizon store 9/26). When asked about recent online shopping she named Amazon, Kohl's and a quilt website she found on Facebook in August. Card closed and reissued; member told about the common-point-of-purchase alert only in general terms."
}
},
"questions": {
"claim_type": {
"type": "choice",
"instructions": "Which explanation best fits the transaction or transactions the cardholder is disputing?",
"criteria": {
"first_party": "First-party (friendly) fraud: the cardholder made or agreed to the transaction and is knowingly claiming they didn't",
"account_takeover": "Account takeover: someone else got into the cardholder's online banking, phone, email or mobile wallet and used the card through that access",
"stolen_card": "Third-party fraud with a lost, stolen or counterfeit card or stolen card details, without access to the cardholder's other accounts",
"authorized_or_merchant": "Not fraud: the transaction was authorized, and the cardholder doesn't recognize it or has a problem with the merchant (an unfamiliar billing name, a purchase by someone they let use the card, a subscription, goods not received)"
}
},
"authorized_likelihood": {
"type": "score",
"instructions": "How likely is it that the cardholder made the disputed transaction or transactions, or let someone else make them with their card?",
"criteria": [
"Very unlikely (under 10%)",
"Unlikely (10-40%)",
"Uncertain (40-60%)",
"Likely (60-90%)",
"Very likely (over 90%)"
]
},
"records_contradict_claim": {
"type": "noul",
"instructions": "Do the institution's own records contradict what the cardholder says in the claim?"
},
"resolution": {
"type": "choice",
"instructions": "How should the institution resolve this unauthorized-transaction claim at intake?",
"criteria": {
"approve": "Approve the claim now: credit the amount permanently and close it as unauthorized",
"provisional_credit": "Give provisional credit and investigate further before deciding",
"deny": "Deny the claim and send the cardholder a written explanation with the evidence that the transaction was authorized"
}
}
}
}The response. Probabilities and confidence are shortened to four decimals here, and the score to three; responses carry full precision.
{
"id": "dec_9f493f0bc6cb4c7dae356ae35704bd83",
"model": "grayson-1",
"answers": {
"claim_type": {
"type": "choice",
"choice": "stolen_card",
"confidence": 0.8406,
"probabilities": {
"first_party": 0.0142,
"account_takeover": 0.0235,
"stolen_card": 0.8804,
"authorized_or_merchant": 0.0819
}
},
"authorized_likelihood": {
"type": "score",
"score": 0.085,
"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.9549,
"probabilities": {
"0": 0.9639,
"1": 0.0156,
"2": 0.0039,
"3": 0.0045,
"4": 0.0121
}
},
"records_contradict_claim": {
"type": "noul",
"noul": 0.2689
},
"resolution": {
"type": "choice",
"choice": "approve",
"confidence": 0.832,
"probabilities": {
"approve": 0.888,
"provisional_credit": 0.0936,
"deny": 0.0184
}
}
},
"usage": {
"input_tokens": 16070,
"output_tokens": 0
}
}Open in Playground
Orders from an ex-partner's phone after he moved out, with her card still saved. A member disputes five September charges made from her ex-partner's phone at two merchants where he had used her card since June, while they lived together and she let him use it for small things. Our records back up the breakup and two orders went to his new address, but one came to her house, she saw a September charge without reporting it, and whether she told us he still had her card depends on a call recording nobody has reviewed yet.
| Question | Grayson's answer |
|---|---|
claim_type | authorized_or_merchant, confidence 41% |
authorized_likelihood | 1.12 of 4, confidence 37% (Very unlikely 50%, Unlikely 21%, Uncertain 8%, Likely 13%, Very likely 10%) |
records_contradict_claim | 88% true |
resolution | provisional_credit, confidence 28% |
21,435 input tokens, $0.00075 per decision, answered in 232 ms.
The request, with long lists cut short. The full request is ambiguous.json (78 KB).
{
"model": "grayson-1",
"state": {
"case": {
"case_id": "DSP-2026-104788",
"queue": "Debit card disputes, intake",
"claim_received": "2026-10-03T13:40:00Z",
"regulation": "Regulation E (consumer debit card, point-of-sale)",
"provisional_credit_due_by": "2026-10-16",
"final_determination_due_by": "2027-01-01"
},
"member": {
"member_id": "mem_18240",
"name": "Renee A. Castillo",
"age": 38,
"member_since": "2015-10-02",
"address_on_file": "2251 Glenmore Ave, Kettering, OH 45420 (since 2020-07-17)",
"phone_on_file": "(937) 555-0129, mobile, unchanged since 2017-03-30",
"email_on_file": "renee.castillo@example.com, unchanged since 2017-03-30",
"owners_and_users": "Sole owner of all accounts; no joint owners or authorized users, now or before",
"income": "Payroll direct deposit every other Friday from RIVERBEND MEDICAL GRP",
"products": [
"Checking x7731 (opened 2015-10-02)",
"Savings x7749 (balance $4,882.10)",
"Visa debit card x5582"
]
},
"card": {
"card": "Visa debit x5582",
"issued": "2024-09-10 (reissued at expiry)",
"expires": "2028-09",
"pin_last_changed": "2024-09-14",
"mobile_wallet": "Apple Pay token provisioned 2024-09-12 to the member's iPhone (device B1)",
"alerts_and_controls": "No purchase or balance alerts set. Locked by the member in the app 2026-10-03T01:09Z.",
"travel_notices": "None",
"debit_card_overdraft_opt_in": false,
"status_at_claim": "Closed 2026-10-03T13:52Z during the claim call; replacement x3907 ordered"
},
"network_alerts": [],
"deposit_account": {
"account": "Checking x7731",
"overdraft_coverage": "Not opted in for ATM and one-time debit card overdraft",
"available_balance_at_claim": 6402.89,
"average_daily_balance_90_days": 6036.34,
"lowest_balance_180_days": 1077.13,
"month_end_balances": {
"2026-04": 1865.22,
"2026-05": 5139.66,
"2026-06": 5528.8,
"2026-07": 6409.01,
"2026-08": 6188.56,
"2026-09": 5608.2
},
"overdraft_and_nsf_12_months": "None"
},
"card_transactions": {
"period": "2026-06-06 to 2026-10-03, card x5582, all authorizations including declines; times UTC (member is in US Eastern time)",
"columns": [
"time_utc",
"merchant",
"mcc",
"amount_usd",
"entry",
"verification",
"result"
],
"rows": [
[
"2026-06-07T21:03:57Z",
"ALDI 72031 KETTERING OH",
"5411",
44.7,
"Apple Pay",
"Face ID",
"approved"
],
[
"2026-06-07T21:31:15Z",
"MEIJER #219 KETTERING OH",
"5411",
50.82,
"chip",
"PIN",
"approved"
],
[
"2026-06-08T01:49:28Z",
"TARGET.COM MINNEAPOLIS MN",
"5310",
55.7,
"e-commerce",
"3DS frictionless",
"approved"
],
[
"2026-06-08T21:41:20Z",
"KROGER #0961 KETTERING OH",
"5411",
100.12,
"contactless",
"no CVM",
"approved"
],
[
"2026-06-08T22:57:13Z",
"KROGER #0961 KETTERING OH",
"5411",
45.96,
"chip",
"PIN",
"approved"
],
"… 189 more in ambiguous.json"
]
},
"other_account_activity": {
"period": "2026-04-06 to 2026-10-03, checking x7731, excluding card transactions",
"columns": [
"posted",
"description",
"type",
"amount_usd"
],
"rows": [
[
"2026-04-06",
"BRIGHT OAKS LEARNING CTR TUITION",
"ACH debit",
-172
],
[
"2026-04-08",
"AT&T MOBILITY ONLINE PMT",
"ACH debit",
-118.4
],
[
"2026-04-13",
"BRIGHT OAKS LEARNING CTR TUITION",
"ACH debit",
-172
],
[
"2026-04-13",
"AES OHIO WEB PMT",
"ACH debit",
-102.41
],
[
"2026-04-15",
"CENTERPOINT ENERGY OH PMT",
"ACH debit",
-58.66
],
"… 75 more in ambiguous.json"
]
},
"three_d_secure_log": {
"period": "2026-04-06 to 2026-10-03, every 3-D Secure authentication on card x5582 (our access control server)",
"devices": {
"T1": "iPhone, Mobile Safari, iOS 18; same device fingerprint as online banking device B1",
"T2": "Android phone (Pixel 8), Chrome; first seen 2026-06-14; never seen in the member's online banking"
},
"columns": [
"time_utc",
"merchant",
"amount_usd",
"flow",
"result",
"device",
"ip"
],
"rows": [
[
"2026-04-18T01:36:22Z",
"OLDNAVY.COM SAN FRANCISCO CA",
35.93,
"frictionless",
"authenticated",
"T1",
"198.51.100.56"
],
[
"2026-05-07T17:04:45Z",
"OLDNAVY.COM SAN FRANCISCO CA",
81.32,
"frictionless",
"authenticated",
"T1",
"198.51.100.56"
],
[
"2026-05-13T01:22:31Z",
"OLDNAVY.COM SAN FRANCISCO CA",
74.83,
"frictionless",
"authenticated",
"T1",
"198.51.100.56"
],
[
"2026-06-08T01:49:28Z",
"TARGET.COM MINNEAPOLIS MN",
55.7,
"frictionless",
"authenticated",
"T1",
"198.51.100.56"
],
[
"2026-06-15T01:40:18Z",
"SOLVARA ATHLETIC PORTLAND OR",
132.48,
"frictionless",
"authenticated",
"T2",
"198.51.100.56"
],
"… 17 more in ambiguous.json"
]
},
"card_alerts_sent": [
{
"sent": "2026-09-27T22:12:05Z",
"type": "3-D Secure one-time code by SMS to (937) 555-0129",
"for": "FRAGWORKS.GG $99.99 (device T2)",
"result": "Not entered; timed out at 22:17:05Z, purchase not authorized"
},
{
"sent": "2026-09-27T22:19:42Z",
"type": "3-D Secure one-time code by SMS to (937) 555-0129",
"for": "FRAGWORKS.GG $99.99 (device T2)",
"result": "Not entered; timed out at 22:24:42Z, purchase not authorized"
}
],
"digital_banking": {
"devices": {
"B1": "iPhone 15, mobile app, first seen 2023-11-24, last seen 2026-10-03",
"B2": "Windows laptop, Edge, first seen 2020-08-01, last seen 2026-08-30"
},
"ip_addresses": {
"198.51.100.56": "Residential cable ISP, Kettering, OH; 204 of the member's 297 sessions in the last 12 months",
"192.0.2.140": "Employer network (hospital), Dayton, OH",
"203.0.113.27, 203.0.113.180": "Mobile carrier, Ohio; the member's phone away from home",
"203.0.113.141": "Mobile carrier, Dayton, OH area; never seen in the member's online banking",
"198.51.100.203": "Residential cable ISP, Dayton, OH; never seen in the member's online banking"
},
"profile_changes_12_months": [
{
"date": "2026-09-08",
"change": "Online banking password changed",
"device": "B1",
"ip": "198.51.100.56"
},
{
"date": "2026-09-08",
"change": "Zelle recipient TYLER PIKE deleted",
"device": "B1",
"ip": "198.51.100.56"
}
],
"sessions_90_days": {
"columns": [
"time_utc",
"device",
"ip",
"activity"
],
"rows": [
[
"2026-07-06T16:10:03Z",
"B1",
"198.51.100.56",
"mobile app, Face ID; account summary"
],
[
"2026-07-06T23:38:17Z",
"B1",
"198.51.100.56",
"mobile app, Face ID; account activity"
],
[
"2026-07-11T17:55:40Z",
"B1",
"198.51.100.56",
"mobile app, Face ID; bill pay"
],
[
"2026-07-13T16:10:39Z",
"B1",
"203.0.113.27",
"mobile app, Face ID; account activity"
],
[
"2026-07-15T10:27:15Z",
"B1",
"198.51.100.56",
"mobile app, Face ID; account activity"
],
"… 38 more in ambiguous.json"
]
}
},
"contact_history_12_months": [
{
"time": "2026-05-14T16:10:00Z",
"channel": "Secure message",
"summary": "Asked to raise her mobile deposit limit; raised to $5,000 a day."
},
{
"time": "2026-09-08T14:12:00Z",
"channel": "Phone",
"agent": "Member services (not disputes)",
"summary": "Member asked how to remove her ex-partner, Tyler Pike, from her accounts; he moved out 9/7 and 'has all my stuff saved on his phone'. He is not an owner or authorized user on any account. Had her change her online banking password during the call and delete him as a Zelle recipient. Member satisfied.",
"card_action": "None; card x5582 was not blocked or reissued, and the note does not say whether the card came up",
"recording": "Available in the call-recording system (kept 24 months); not yet reviewed"
}
],
"prior_disputes": [
{
"filed": "2024-02-12",
"merchant": "Hotel booking site",
"amount_usd": 236.18,
"reason": "Cancelled reservation, refund not received",
"outcome": "Closed 2024-02-29 after the merchant issued the credit"
}
],
"disputed_merchants": [
{
"merchant": "SOLVARA ATHLETIC PORTLAND OR",
"mcc": "5661 Shoe stores",
"location": "Portland, OR (e-commerce)",
"our_portfolio_90_days": {
"cards_with_purchases": 1104,
"fraud_claims": 2,
"fraud_claim_rate_pct": 0.18
},
"merchant_order_details": {
"source": "Visa Order Insight, merchant response retrieved during the claim call at 2026-10-03T13:47:20Z",
"customer_account": {
"name": "Tyler Pike",
"created": "2026-06-14",
"email": "tpike.mx@example.net (not the member's)",
"phone": "(937) 555-0177 (not the member's)",
"card_x5582_saved": "2026-06-14",
"orders": 5
},
"orders": [
{
"order": "SA-2210457",
"date": "2026-06-14",
"amount_usd": 132.48,
"items": "Men's running shoes",
"ship_to": "Member's address on file",
"delivery": "Delivered 2026-06-18"
},
{
"order": "SA-2398110",
"date": "2026-08-23",
"amount_usd": 96,
"items": "Men's slides; socks (6-pack)",
"ship_to": "Member's address on file",
"delivery": "Delivered 2026-08-27"
},
{
"order": "SA-2471906",
"date": "2026-09-11",
"amount_usd": 214.97,
"items": "Men's basketball shoes; hoodie",
"ship_to": "418 Wyoming St, Apt 3, Dayton, OH 45410 (new address added to the account 2026-09-11)",
"delivery": "Delivered 2026-09-16"
},
{
"order": "SA-2502384",
"date": "2026-09-23",
"amount_usd": 168.4,
"items": "Men's training shoes",
"ship_to": "Member's address on file (the account's default address)",
"delivery": "Delivered 2026-09-28, front porch"
},
{
"order": "SA-2533071",
"date": "2026-09-29",
"amount_usd": 289,
"items": "Men's limited-release sneakers",
"ship_to": "418 Wyoming St, Apt 3, Dayton, OH 45410",
"delivery": "Delivered 2026-10-02"
}
],
"device_and_ip": "The same Android device ID on all five orders; IP 198.51.100.56 on the June and August orders, 203.0.113.141 and 198.51.100.203 on the September orders",
"compelling_evidence_3_0": "Does not qualify: the earliest undisputed order is 111 days before the dispute (Visa requires 120 to 365)"
}
},
{
"merchant": "FRAGWORKS.GG AUSTIN TX",
"mcc": "5816 Digital goods: games",
"location": "Austin, TX (e-commerce)",
"our_portfolio_90_days": {
"cards_with_purchases": 3870,
"fraud_claims": 9,
"fraud_claim_rate_pct": 0.23
},
"merchant_order_details": "Merchant not enrolled in an order-details service; nothing available at intake",
"subscription": "FRAGWORKS.GG PREMIUM $14.99 a month since 2026-06-20 (started from device T2 at the member's home IP); renewals on 7/20 and 8/20 not disputed"
}
],
"disputed_transactions": [
{
"authorized": "2026-09-12T02:18:44Z",
"posted": "2026-09-14",
"auth_id": "F3J11P",
"merchant": "SOLVARA ATHLETIC PORTLAND OR",
"mcc": "5661 Shoe stores",
"amount_usd": 214.97,
"channel": "E-commerce, stored card in the merchant account (POS entry 10, credential on file)",
"eci": "05 (3-D Secure, fully authenticated)",
"three_d_secure": {
"flow": "Frictionless",
"device": "T2",
"ip": "203.0.113.141"
},
"avs_result": "Y (street and ZIP match)",
"cvv2_result": "not sent (stored credential)",
"issuer_fraud_score": 141,
"rules_fired": []
},
{
"authorized": "2026-09-19T03:05:10Z",
"posted": "2026-09-21",
"auth_id": "F9W02C",
"merchant": "FRAGWORKS.GG AUSTIN TX",
"mcc": "5816 Digital goods: games",
"amount_usd": 49.99,
"channel": "E-commerce, stored card in the merchant account (POS entry 10, credential on file)",
"eci": "05 (3-D Secure, fully authenticated)",
"three_d_secure": {
"flow": "Frictionless",
"device": "T2",
"ip": "198.51.100.203"
},
"avs_result": "not checked (digital goods)",
"cvv2_result": "not sent (stored credential)",
"issuer_fraud_score": 122,
"rules_fired": []
},
{
"authorized": "2026-09-20T08:04:24Z",
"posted": "2026-09-21",
"auth_id": "F9X48K",
"merchant": "FRAGWORKS.GG PREMIUM AUSTIN TX",
"mcc": "5816 Digital goods: games",
"amount_usd": 14.99,
"channel": "Recurring, merchant-initiated (stored credential; subscription started 2026-06-20 with 3-D Secure from device T2)",
"eci": "07 (merchant-initiated, no 3-D Secure)",
"avs_result": "not checked",
"cvv2_result": "not sent",
"issuer_fraud_score": 35,
"rules_fired": []
},
{
"authorized": "2026-09-24T01:41:27Z",
"posted": "2026-09-25",
"auth_id": "G1B73R",
"merchant": "SOLVARA ATHLETIC PORTLAND OR",
"mcc": "5661 Shoe stores",
"amount_usd": 168.4,
"channel": "E-commerce, stored card in the merchant account (POS entry 10, credential on file)",
"eci": "05 (3-D Secure, fully authenticated)",
"three_d_secure": {
"flow": "Frictionless",
"device": "T2",
"ip": "198.51.100.203"
},
"avs_result": "Y (street and ZIP match)",
"cvv2_result": "not sent (stored credential)",
"issuer_fraud_score": 158,
"rules_fired": []
},
{
"authorized": "2026-09-30T00:52:09Z",
"posted": "2026-10-01",
"auth_id": "G4M90D",
"merchant": "SOLVARA ATHLETIC PORTLAND OR",
"mcc": "5661 Shoe stores",
"amount_usd": 289,
"channel": "E-commerce, stored card in the merchant account (POS entry 10, credential on file)",
"eci": "05 (3-D Secure, fully authenticated)",
"three_d_secure": {
"flow": "Frictionless",
"device": "T2",
"ip": "203.0.113.141"
},
"avs_result": "Y (street and ZIP match)",
"cvv2_result": "not sent (stored credential)",
"issuer_fraud_score": 203,
"rules_fired": []
}
],
"claim": {
"filed": "2026-10-03T13:40:00Z",
"channel": "Phone",
"reason_selected": "Unauthorized transaction, card in possession",
"transactions": 5,
"amount_usd": 737.35,
"card_reported_lost_or_stolen": false,
"cardholder_statement": "My ex-boyfriend, Tyler, moved out on September 7th. When we lived together he'd use my card for food or little things if I said it was OK, and he must have saved it on his phone. I never said he could use it after he left. I saw one charge from the shoe website in September and figured it was something he'd ordered before he moved out. When I looked last night there were a bunch more, so I locked the card.",
"intake_questions": [
{
"question": "Is the card in your possession?",
"answer": "Yes."
},
{
"question": "When did you last use the card yourself?",
"answer": "Kroger on Thursday."
},
{
"question": "Has anyone else used the card or card number, or had access to your phone or online banking?",
"answer": "When we lived together he'd use it for food or little things, when I said OK. I never told him he could keep it on his own accounts. Nobody's had my phone. I changed my banking password after he left."
},
{
"question": "Have you shared your card number, PIN, a password or a verification code, or had calls, texts or emails asking for them?",
"answer": "I never gave him the number to keep, he must have saved it. Nobody's asked me for codes. When I called on the 8th I told you he had all my stuff saved on his phone, and I thought that took care of it."
},
{
"question": "Do you recognize the merchant? Have you contacted the merchant?",
"answer": "The shoe site and the game site are his. I haven't contacted them."
},
{
"question": "Did you receive any goods or services from these transactions?",
"answer": "A box with his name on it came on the 28th. I figured he forgot to change his address, so I left it on the porch and it was gone the next day."
},
{
"question": "Did you receive any verification codes or alerts you didn't expect?",
"answer": "Maybe one night I got a code text. I didn't pay attention to it."
},
{
"question": "Will you sign a written statement of unauthorized use? Have you filed a police report?",
"answer": "I'll sign it. I don't really want to get him in trouble, but I'll file a police report if I have to."
}
],
"documents": {
"written_statement": "Sent by e-sign 2026-10-03T13:58Z, not yet returned",
"police_report": "None yet; member says she will file one if needed",
"merchant_evidence": "Order details retrieved for SOLVARA ATHLETIC; none available for FRAGWORKS.GG",
"call_recording_2026_09_08": "Requested 2026-10-03, not yet reviewed"
},
"agent_notes": "Member upset but cooperative. Says she and Tyler don't speak and he hasn't contacted her about the charges. When I read her the June to August charges at the same two merchants, she said she didn't remember them but 'he lived there then', and she didn't want to add them to the claim. Did not know about the FRAGWORKS.GG subscription. Says she told us on the 9/8 call that he had her card saved; the 9/8 note doesn't mention the card. Card closed and reissued. Merchant order details pulled for SOLVARA ATHLETIC."
}
},
"questions": {
"claim_type": {
"type": "choice",
"instructions": "Which explanation best fits the transaction or transactions the cardholder is disputing?",
"criteria": {
"first_party": "First-party (friendly) fraud: the cardholder made or agreed to the transaction and is knowingly claiming they didn't",
"account_takeover": "Account takeover: someone else got into the cardholder's online banking, phone, email or mobile wallet and used the card through that access",
"stolen_card": "Third-party fraud with a lost, stolen or counterfeit card or stolen card details, without access to the cardholder's other accounts",
"authorized_or_merchant": "Not fraud: the transaction was authorized, and the cardholder doesn't recognize it or has a problem with the merchant (an unfamiliar billing name, a purchase by someone they let use the card, a subscription, goods not received)"
}
},
"authorized_likelihood": {
"type": "score",
"instructions": "How likely is it that the cardholder made the disputed transaction or transactions, or let someone else make them with their card?",
"criteria": [
"Very unlikely (under 10%)",
"Unlikely (10-40%)",
"Uncertain (40-60%)",
"Likely (60-90%)",
"Very likely (over 90%)"
]
},
"records_contradict_claim": {
"type": "noul",
"instructions": "Do the institution's own records contradict what the cardholder says in the claim?"
},
"resolution": {
"type": "choice",
"instructions": "How should the institution resolve this unauthorized-transaction claim at intake?",
"criteria": {
"approve": "Approve the claim now: credit the amount permanently and close it as unauthorized",
"provisional_credit": "Give provisional credit and investigate further before deciding",
"deny": "Deny the claim and send the cardholder a written explanation with the evidence that the transaction was authorized"
}
}
}
}The response. Probabilities and confidence are shortened to four decimals here, and the score to three; responses carry full precision.
{
"id": "dec_c1be127f2593467f8d2bb924f6700724",
"model": "grayson-1",
"answers": {
"claim_type": {
"type": "choice",
"choice": "authorized_or_merchant",
"confidence": 0.4134,
"probabilities": {
"first_party": 0.206,
"account_takeover": 0.0279,
"stolen_card": 0.206,
"authorized_or_merchant": 0.5601
}
},
"authorized_likelihood": {
"type": "score",
"score": 1.124,
"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.3688,
"probabilities": {
"0": 0.4951,
"1": 0.2064,
"2": 0.0759,
"3": 0.1252,
"4": 0.0975
}
},
"records_contradict_claim": {
"type": "noul",
"noul": 0.8808
},
"resolution": {
"type": "choice",
"choice": "provisional_credit",
"confidence": 0.2767,
"probabilities": {
"approve": 0.3141,
"provisional_credit": 0.5178,
"deny": 0.1681
}
}
},
"usage": {
"input_tokens": 21435,
"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.
claim_typeroutes the case: first-party and authorized purchases to an investigator, account takeover to account security, stolen cards to chargeback and reissue.authorized_likelihood: add "Likely" and "Very likely"; approve below a low cutoff, and have an investigator confirm a denial above a high one.resolution: approve automatically only when the approve probability is high and the records don't contradict the claim; have a person review every denial, and give provisional credit when the answers are split, as in the ex-partner case.
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
An unauthorized-transaction claim can be third-party fraud, or first-party fraud by a cardholder who made the purchase and disputes it anyway. Rules handle the simple cases, such as chip and PIN with the card in the cardholder's hand, but miss the ones where the claim and the records disagree, such as a correct one-time code entered from the cardholder's home internet connection.
What to send
Send the claim with the records an investigator would pull:
- Card and account history. Months of authorizations (declines included) and account activity show the member's normal pattern, earlier purchases at the merchant and any money pressure.
- How the transaction was authenticated. Chip and PIN or a 3-D Secure code narrows who could have made it.
- Device, IP and shipping address from checkout. A match with the cardholder's banking sessions or home points to their household.
- Logins and profile changes around the transaction. A reset, new device or contact change just before points to account takeover.
- Merchant and dispute history. Undisputed earlier purchases, or repeated claims at merchants they keep using, point to the cardholder.
- The merchant's order details, where the card network's order-details service has them: the merchant account's email and phone, the ship-to address, delivery and device.
- Compromise and testing signals. A breach alert or small test charge makes third-party fraud plausible, not proven.
- The claim in the cardholder's words, and earlier contact notes. Grayson reads them against the records; contradictions are what investigators look for.
Add your own policy
Institutions draw the line for denying a claim at intake differently, and examiners expect you to follow your own written procedure, so put it in the request. This one allows a denial at intake only when every disputed transaction had strong authentication (chip and PIN, or a one-time-code challenge), confirmed delivery to the address on file, and no compromised-account alert on the card in the 180 days before it.
Your intake denial policy adds this to the state of the obvious example:
{
"disputes_procedure": "Debit card unauthorized-transaction claims, intake (procedure DC-7, rev. 2026-06). An intake analyst may deny a claim without provisional credit only when every disputed transaction meets all three of these conditions: (1) it was authenticated with something only the member controls, meaning chip and PIN with the card in the member's possession, or a 3-D Secure challenge (not frictionless) sent to a phone number unchanged for at least 30 days; (2) for goods shipped to an address, we hold the merchant's carrier delivery confirmation to the member's address on file; (3) the card had no card network compromised-account alert (CAMS) in the 180 days before the transaction. If any condition is not met for any disputed transaction, do not deny at intake: give provisional credit within 10 business days of the claim, request the merchant's evidence, and assign the case to an investigator, who makes the final decision. Never approve at intake a claim that our records contradict."
}| Question | Without | With your intake denial policy |
|---|---|---|
claim_type | first_party, confidence 83% | first_party, confidence 77% |
authorized_likelihood | 3.92 of 4, confidence 96% | 3.90 of 4, confidence 95% |
records_contradict_claim | 99% true | 98% true |
resolution | deny, confidence 96% | provisional_credit, confidence 82% |
In the game-console case, two of the three orders passed 3-D Secure without a challenge, and the card was in a compromised-account alert 117 days before the first order, so the policy calls for provisional credit and an investigator's decision instead of a denial at intake. The other answers stay the same: the records still point to the member.
Where to call it
- At intake, while the cardholder is still on the phone, so the agent can see the answers and ask follow-up questions.
- Send uncertain cases to an analyst with the answers attached, and give provisional credit if the investigation will run past 10 business days.
- Call it again when the merchant's evidence arrives, with that evidence added to the state, before the final decision.
Cost and latency
| Example | Input tokens | Per decision | Per 1,000 decisions | Latency |
|---|---|---|---|---|
| Obvious | 20,490 | $0.00072 | $0.72 | 227 ms |
| Legitimate | 16,070 | $0.00056 | $0.56 | 216 ms |
| Ambiguous | 21,435 | $0.00075 | $0.75 | 232 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/card-dispute-classification/questions.json --label claim_type=<column> --label authorized_likelihood=<column> --label records_contradict_claim=<column> --label resolution=<column>Each --label names the column with that question's right answer:
claim_type:first_party,account_takeover,stolen_card,authorized_or_merchantauthorized_likelihood: a level, such as "Very likely (over 90%)"records_contradict_claim:trueorfalseresolution:approve,provisional_credit,deny
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
Can Grayson tell friendly fraud from a genuine fraud claim?
It weighs the evidence an investigator uses: whether the authentication relied on something only the cardholder controls, whether the device and IP match their banking sessions, whether they've bought from the merchant before, and whether their statement fits those records. When the records conflict, as when a card number was exposed in a breach but the purchase passed a code sent to the cardholder's phone, the probabilities spread out, and that's the case to send to a person.
Does this replace a Regulation E investigation?
No. Regulation E requires a reasonable investigation of each claim and, when you find no error, a written explanation and the cardholder's right to the documents you relied on. Use Grayson to triage at intake, point investigators at the evidence and keep decisions consistent, and keep a person responsible for denials.
Does it work for credit card disputes?
Yes. The classification is the same, but credit card claims fall under Regulation Z, which caps the cardholder's liability for unauthorized use at $50 and lets them withhold payment of the disputed amount while you investigate, instead of requiring provisional credit. Change the resolution options to match your credit card process, or use network reason codes as choice options with descriptions.
Related recipes
Screen card authorizations for fraud in real time
Score card authorizations for fraud and choose approve, step up or decline, next to your existing rules.
Fraud typology classification
Label a fraud claim with a FraudClassifier class, scam type and contributing factors; decide reimbursement.
Recipes
Every use case, with its questions and cost per decision.
Card authorizations
Grayson screens card authorizations for card testing, fallback and card-not-present fraud from recent card activity, and picks approve, step up or decline.
Fleet fuel cards
Grayson checks a fleet card's fuel authorization against the truck's telematics, its fill history and the station, separates cloned cards and fuel theft from routine fills, and picks approve, alert, decline or block.