Triage AML transaction monitoring alerts
Decide whether a transaction monitoring alert is explained by what you know about the customer, which typology it fits, how likely it meets the SAR standard, and whether to close it, ask the customer, escalate or file.
Grayson triages a transaction monitoring alert the way your first-level analysts do. It returns whether the activity fits what you know about the customer, which typology it looks like (structuring, a funnel account, layering, trade-based laundering, fraud proceeds, or explained), how likely it meets the standard for a suspicious activity report (SAR), and whether to close the alert, ask the customer for information, escalate it to an investigator or recommend a SAR. It reads the alert with the KYC profile, months of transactions, earlier alerts and what the customer has said, and costs about $0.55 to $0.69 per 1,000 decisions.
- Decides: Close, ask the customer, escalate or file on a transaction monitoring alert, with the typology and how likely it meets the SAR standard
- Call it: When a transaction monitoring rule or model raises an alert on a customer
- Questions: 1 yes/no, 2 choice, 1 score
- Cost: $0.00055 to $0.00069 per decision ($0.55 to $0.69 per 1,000) for these examples' 15,787 to 19,774 input tokens
- Latency: 225 to 268 ms for these examples, the median of 5 calls each through api.finic.ai from US-West
Examples
Three alerts, each sent with the KYC profile and expected activity, screening results, 12 months of monthly totals, every posted transaction for the last three months (about 160 to 220 of them), the counterparties, earlier alerts and how they were closed, and what the customer has said and sent. They are a warehouse supervisor depositing cash in amounts just under $10,000, a general contractor paying its subcontractors within days of each construction draw, and a seafood importer passing a new buyer's wires to a packer in Ecuador for a 2% commission.
Open in Playground
A warehouse supervisor deposits $185,850 in cash, always under $10,000. Since mid-July a salaried customer has deposited $185,850 in cash at six branches and three ATMs, in teller deposits of $8,900 to $9,900 and never on the same day after the one day that produced a currency transaction report. The cash bought a pickup and a house, he has given three different sources for it, and a teller reports that he asked how to deposit cash without the paperwork.
| Question | Grayson's answer |
|---|---|
fits_profile | Under 1% true |
typology | structuring, confidence 93% |
suspicious_likelihood | 3.61 of 4, confidence 71% |
action | file_sar, confidence 93% |
15,787 input tokens, $0.00055 per decision, answered in 225 ms.
The request, with long lists cut short. The full request is fraud.json (53 KB).
{
"model": "grayson-1",
"state": {
"customer": {
"customer_id": "C-2210457",
"name": "Corey D. Lindell",
"type": "Individual",
"age": 37,
"customer_since": "2018-03-12",
"home": "Memphis, TN 38133; renting an apartment, at this address since 2021",
"occupation_on_file": "Warehouse shift supervisor, Delta Gateway Logistics LLC (since 2016)",
"stated_annual_income_usd": 56000,
"expected_activity": {
"monthly_deposits_usd": 3800,
"deposit_sources": "Payroll",
"cash_deposits": "Under $500 a month",
"wires": "None expected",
"international": "None",
"business_activity": "None declared"
},
"identity_verification": "In branch 2018-03-12 with a Tennessee driver's license; ID re-presented for the 2026-07-28 CTR",
"last_kyc_refresh": "2025-12-09 (after the November 2025 alert)",
"risk_rating": "Medium (raised from Low on 2025-12-09: cash activity above expected)",
"products": [
"Personal checking x5182",
"Savings x5190",
"Debit card x6617"
],
"businesses_on_file": "None. No business accounts, no DBA, no EIN on file"
},
"screening": {
"sanctions": "No match (daily screening, last run 2026-10-05)",
"pep": "Not a politically exposed person",
"adverse_media": "One hit reviewed 2025-12-08: a 2024 news article about a man of the same name in Dayton, OH, aged 58; dismissed as a different person"
},
"accounts": [
{
"account": "Personal checking x5182",
"opened": "2018-03-12",
"owners": "Corey D. Lindell (sole owner)",
"status": "Open, no restrictions",
"balance_now_usd": 58518.51
},
{
"account": "Savings x5190",
"opened": "2018-03-12",
"balance_now_usd": 40612.18,
"activity_since_2025_10": "Transfers in from checking of $20,000.00 on 2025-12-02 and $20,000.00 on 2026-09-08; monthly interest; no withdrawals"
}
],
"monthly_summary": {
"note": "Checking x5182, by calendar month (Central time)",
"columns": [
"month",
"credits_usd",
"payroll_usd",
"cash_deposits_usd",
"cash_deposit_count",
"… 7 more in fraud.json"
],
"rows": [
[
"2025-10",
5270.29,
5210.29,
0,
0,
"… 7 more in fraud.json"
],
[
"2025-11",
30970.36,
3570.36,
27400,
4,
"… 7 more in fraud.json"
],
[
"2025-12",
3477.61,
3477.61,
0,
0,
"… 7 more in fraud.json"
],
[
"2026-01",
3614.83,
3554.83,
0,
0,
"… 7 more in fraud.json"
],
[
"2026-02",
6199.41,
3481.41,
400,
1,
"… 7 more in fraud.json"
],
"… 8 more in fraud.json"
]
},
"cash_deposits_by_location_since_2026_07_01": {
"columns": [
"location",
"deposits",
"total_usd",
"deposits_8000_to_9999"
],
"rows": [
[
"Poplar Ave branch, Memphis TN",
3,
28000,
3
],
[
"ATM #3378 WINCHESTER RD MEMPHIS TN",
3,
11000,
0
],
[
"Germantown branch, Germantown TN",
4,
38350,
4
],
[
"Cordova branch, Memphis TN",
3,
28100,
3
],
[
"ATM #3341 POPLAR AVE MEMPHIS TN",
3,
9700,
0
],
"… 4 more in fraud.json"
],
"total_usd": 185850
},
"currency_transaction_reports": [
{
"filed": "2026-08-06",
"transaction_date": "2026-07-28",
"amount_usd": 12400,
"detail": "Aggregated: teller deposit $9,400.00 at the Germantown branch and ATM deposit $3,000.00 at ATM #3341 the same business day. Customer's ID and occupation (warehouse supervisor) were taken by the teller on 2026-07-28. No other CTRs on this customer since 2018."
}
],
"counterparties": {
"note": "Everyone the account paid or was paid by through ACH, P2P, wire, official check or transfer since 2026-07-01; first_activity is the first item with them in our records",
"columns": [
"id",
"name",
"kind",
"bank_or_location",
"first_activity",
"… 5 more in fraud.json"
],
"rows": [
[
"C01",
"Wolfchase Park Apartments",
"Landlord",
"Regional bank, TN",
"2025-10-01",
"… 5 more in fraud.json"
],
[
"C02",
"Delta Gateway Logistics LLC",
"Employer (payroll)",
"Large national bank",
"2025-10-03",
"… 5 more in fraud.json"
],
[
"C03",
"Linda Lindell",
"Individual",
"Credit union, TN",
"2018-05-02",
"… 5 more in fraud.json"
],
[
"C04",
"Marcus Bell",
"Individual",
"Large national bank",
"2020-08-14",
"… 5 more in fraud.json"
],
[
"C05",
"Southland Truck Center",
"Vehicle dealer",
"Olive Branch, MS",
"2026-08-21",
"… 5 more in fraud.json"
],
[
"C06",
"Savings x5190",
"Own account with us",
"Our bank",
"2018-03-12",
"… 5 more in fraud.json"
],
[
"C07",
"Bluff City Title & Escrow LLC",
"Title and escrow company",
"Regional bank, TN",
"2026-09-30",
"… 5 more in fraud.json"
]
]
},
"transactions": {
"note": "Every posted item on checking x5182 from 2026-07-01 to the alert; amounts signed (debits negative); balance is the ledger balance after the item",
"columns": [
"ts",
"type",
"amount_usd",
"balance_usd",
"description",
"counterparty",
"detail"
],
"rows": [
[
"2026-07-01T11:00:00Z",
"ach_debit",
-1285,
6316.55,
"WOLFCHASE PARK APTS WEB PMT",
"C01",
"SEC WEB"
],
[
"2026-07-02T00:51:52Z",
"atm_withdrawal",
-200,
6116.55,
"ATM WITHDRAWAL #3341 POPLAR AVE MEMPHIS TN",
null,
"our ATM"
],
[
"2026-07-02T01:00:06Z",
"card_purchase",
-77.66,
6038.89,
"AMAZON MKTPL*TE2Z4A9UJ Amzn.com/bill WA",
null,
"mcc 5942, card not present"
],
[
"2026-07-03T10:40:49Z",
"card_purchase",
-11.99,
6026.9,
"SPOTIFY USA",
null,
"mcc 5815, card on file, recurring"
],
[
"2026-07-03T18:56:38Z",
"card_purchase",
-60.39,
5966.51,
"MAPCO #3361 MEMPHIS TN",
null,
"mcc 5542, chip"
],
"… 164 more in fraud.json"
]
},
"prior_alerts": [
{
"alert_id": "AML-CSH-2025-112104",
"created": "2025-11-21",
"scenario": "Cash deposits above expected activity",
"activity": "Four teller cash deposits from 2025-11-03 to 2025-11-18 totaling $27,400.00 ($5,900 to $7,500 each) at four branches",
"outcome": "Closed 2025-12-09, no SAR. Customer answered a request for information (below) with a bill of sale for a boat and trailer for $18,500. Analyst note: 'Bill of sale covers most of the cash; remainder plausibly cash on hand. Risk rating raised to Medium.'"
},
{
"alert_id": "AML-CSH-2026-081207",
"created": "2026-08-12",
"scenario": "Cash deposits above expected activity",
"activity": "9 cash deposits from 2026-07-14 to 2026-08-11 totaling $67,150.00, 6 of them at a teller",
"outcome": "Closed 2026-08-19, no SAR, no customer contact. Analyst note: 'Customer told the teller on 2026-07-28 that the cash is from selling vehicles. Consistent with private vehicle sales. Monitor.'"
}
],
"customer_contact": [
{
"ts": "2025-11-28T22:14:00Z",
"channel": "Secure message from customer (reply to request for information)",
"text": "The cash was from selling my bass boat and trailer to a guy from Tunica, bill of sale is attached. The rest was money I had at the house."
},
{
"ts": "2026-07-28T17:20:00Z",
"channel": "Teller note (Germantown branch), CTR interview",
"note": "Customer deposited $9,400.00 in cash. Asked about the source for the CTR (the same-day ATM deposit put him over $10,000): said 'selling some cars'. Gave his driver's license and occupation."
},
{
"ts": "2026-08-21T17:31:00Z",
"channel": "Teller note (Southaven branch)",
"note": "Cashier's check for $41,800.00 to Southland Truck Center. Customer said he is buying a 2024 pickup."
},
{
"ts": "2026-09-14T17:52:00Z",
"channel": "Teller note and unusual activity referral (Cordova branch)",
"note": "Customer brought $12,300 in cash, mostly $20s in bank straps, and asked how much he could deposit 'without the paperwork'. I explained that cash over $10,000 in a business day needs a currency transaction report. He took back $2,700, deposited $9,600.00 and said he would bring the rest another day. Asked where the cash is from, he said he flips cars on the side. Referred to BSA."
},
{
"ts": "2026-09-30T17:35:00Z",
"channel": "Wire desk note (Poplar Ave branch)",
"note": "Wire of $72,000.00 to Bluff City Title & Escrow for a house closing on 2026-10-02. Customer said he is buying the house with cash, no mortgage. Asked about the source of the funds: 'savings, and I sell cars on the side'. Wire sent after callback verification."
}
],
"case_notes": [
{
"ts": "2026-10-05T14:10:00Z",
"note": "Alert assigned. Checked the Tennessee and Mississippi business registries: no business, DBA or dealer license in the customer's name. No credits in 12 months from vehicle buyers, auctions or title services, and no debits for buying vehicles other than the 2026-08-21 cashier's check. Payroll unchanged. The 2026-09-14 referral says he returned with the remaining cash: the next teller deposit was $9,800.00 at Collierville on 2026-09-21."
}
],
"alert": {
"alert_id": "AML-CSH-2026-100502",
"created": "2026-10-05T11:40:00Z",
"scenario": "Possible structuring / cash above expected activity",
"status": "New",
"rules_fired": [
"CSH-03 three or more cash deposits between $8,000.00 and $9,999.99 in 30 days (5)",
"CSH-05 cash deposits at three or more locations in 30 days (8)",
"CSH-08 cash deposited in 30 days at least 10x expected monthly cash ($63,400.00 against $500)",
"UAR-01 unusual activity referral from branch staff (2026-09-14, Cordova branch)",
"WIR-01 first outgoing wire on the relationship ($72,000.00 on 2026-09-30)"
],
"triggering_transactions": [
[
"2026-09-09T22:58:57Z",
"atm_deposit",
4500,
"ATM CASH DEPOSIT #3402 SOUTHAVEN MS"
],
[
"2026-09-11T17:14:03Z",
"cash_deposit",
9700,
"Southaven branch, Southaven MS"
],
[
"2026-09-14T17:47:04Z",
"cash_deposit",
9600,
"Cordova branch, Memphis TN"
],
[
"2026-09-18T00:59:14Z",
"atm_deposit",
3600,
"ATM CASH DEPOSIT #3378 WINCHESTER RD MEMPHIS TN"
],
[
"2026-09-21T17:12:00Z",
"cash_deposit",
9800,
"Collierville branch, Collierville TN"
],
"… 4 more in fraud.json"
],
"monitoring_model_score": 0.96,
"last_30_days": {
"window": "2026-09-05T11:40:00Z to 2026-10-05T11:40:00Z",
"cash_deposits_usd": 63400,
"cash_deposit_count": 9,
"cash_deposits_8000_to_9999_count": 5,
"cash_deposit_locations": 8,
"largest_cash_deposit_day_usd": 9800,
"expected_monthly_cash_usd": 500,
"payroll_credits_usd": 3450.07,
"wires_and_official_checks_out_usd": 72000,
"balance_at_end_usd": 58518.51
}
}
},
"questions": {
"fits_profile": {
"type": "noul",
"instructions": "Is the alerted activity consistent with what the institution knows about the customer: the stated occupation or business, the expected activity on file, income, past account history and any explanation the customer has already given and supported?"
},
"typology": {
"type": "choice",
"instructions": "Which best describes the alerted activity, as the institution's AML analyst would classify it?",
"criteria": {
"structuring": "Cash deposits, withdrawals or purchases of money orders or cashier's checks split up or timed to stay under the $10,000 currency transaction report threshold or another reporting or recordkeeping threshold",
"funnel_account": "Cash or other deposits made into the account by other people, often in different cities or states, and taken out or sent on soon after somewhere else",
"layering": "Funds moved quickly in and out of the account, or around related accounts and companies, with no clear business purpose, so that their source is hard to trace",
"trade_based": "Payments described as trade in goods that don't match the goods, prices, counterparties or shipments, for example paying or being paid by a third party that is not the buyer or seller",
"fraud_proceeds": "Proceeds of fraud or scams moving through the account, for example as a money mule",
"other_suspicious": "Another suspicious pattern not listed here, such as tax evasion or sanctions evasion",
"explained": "Not suspicious: the customer's known business, income or circumstances explain the activity"
}
},
"suspicious_likelihood": {
"type": "score",
"instructions": "How likely is it that the alerted activity meets the standard for a suspicious activity report: it involves funds from illegal activity, is designed to evade reporting or recordkeeping requirements such as the currency transaction report, or has no business or apparent lawful purpose that the available facts explain?",
"criteria": [
"Very unlikely (under 10%)",
"Unlikely (10-40%)",
"Uncertain (40-60%)",
"Likely (60-90%)",
"Very likely (over 90%)"
]
},
"action": {
"type": "choice",
"instructions": "What should the alert analyst do with this alert now?",
"criteria": {
"close": "Close the alert as not suspicious and record the explanation",
"request_information": "Ask the customer for the missing explanation or documents, such as the source of the funds, invoices or shipping records, and decide when they reply",
"escalate": "Escalate to an investigator for a full review (related accounts, other institutions, a site visit) before deciding on a SAR",
"file_sar": "Recommend filing a SAR now, because the record already supports one, and review whether to keep the customer"
}
}
}
}The response. Probabilities and confidence are shortened to four decimals here, and the score to three; responses carry full precision.
{
"id": "dec_d0ad5507430245e9b052fe2f4bd72569",
"model": "grayson-1",
"answers": {
"fits_profile": {
"type": "noul",
"noul": 0.0019
},
"typology": {
"type": "choice",
"choice": "structuring",
"confidence": 0.9346,
"probabilities": {
"structuring": 0.944,
"funnel_account": 0.0093,
"layering": 0.0044,
"trade_based": 0.0023,
"fraud_proceeds": 0.0034,
"other_suspicious": 0.0044,
"explained": 0.0323
}
},
"suspicious_likelihood": {
"type": "score",
"score": 3.612,
"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.707,
"probabilities": {
"0": 0.0159,
"1": 0.0381,
"2": 0.0297,
"3": 0.1507,
"4": 0.7656
}
},
"action": {
"type": "choice",
"choice": "file_sar",
"confidence": 0.9316,
"probabilities": {
"close": 0.0093,
"request_information": 0.0197,
"escalate": 0.0223,
"file_sar": 0.9487
}
}
},
"usage": {
"input_tokens": 15787,
"output_tokens": 0
}
}Open in Playground
A general contractor pays its subcontractors within days of each construction draw. A contractor that has banked here since 2016 took in $1,850,637 in 30 days, mostly construction loan draws, a school district's progress payment and a building owner's wires, and paid most of it out within five days. The rules also caught a $148,600 wire to a new steel fabricator in Reno and a $60,000 transfer to an owner, but both are in the record: the annual review named the steel order, and the owners take the same transfer every quarter to pay their estimated taxes.
| Question | Grayson's answer |
|---|---|
fits_profile | Over 99% true |
typology | explained, confidence 99% |
suspicious_likelihood | 0.01 of 4, confidence 99% |
action | close, confidence 98% |
16,464 input tokens, $0.00058 per decision, answered in 268 ms.
The request, with long lists cut short. The full request is legitimate.json (56 KB).
{
"model": "grayson-1",
"state": {
"customer": {
"customer_id": "B-0091376",
"name": "Harwick & Sons Construction, Inc.",
"type": "California corporation (S corporation), incorporated 2004",
"customer_since": "2016-04-18",
"business": "General contractor: commercial tenant improvements, public school modernization, mid-rise mixed-use and residential remodels in the Sacramento area",
"naics": "236220 Commercial and Institutional Building Construction",
"contractor_license": "California CSLB Class B general building license, active, verified 2026-08-19",
"address": "Office and equipment yard, Sacramento, CA 95828 (leased since 2012)",
"annual_revenue_usd": 11400000,
"revenue_source": "2025 federal tax return, provided at the 2026-08-19 annual review",
"employees": "24 to 31 (seasonal), paid weekly through a payroll provider",
"beneficial_owners": [
{
"name": "Dale R. Harwick",
"role": "President",
"ownership_pct": 60,
"customer_of_ours_since": "2016-04-18"
},
{
"name": "Kristen L. Harwick",
"role": "Secretary and CFO",
"ownership_pct": 40,
"customer_of_ours_since": "2016-04-18"
}
],
"expected_activity": {
"monthly_credits_usd": "500,000 to 1,800,000, peaking in summer and fall with school work",
"credit_sources": "Construction loan draws by wire from title and escrow companies, progress payments by wire and ACH from building owners and public agencies, remodel payments by ACH and check",
"debits": "ACH and wires to subcontractors and suppliers, payroll provider, equipment loans, insurance, owner distributions",
"cash": "None",
"international": "None"
},
"risk_rating": "Medium (industry and wire volume); reviewed annually, last 2026-08-19",
"products": [
"Business checking x3307 (operating)",
"Money market x3323",
"Equipment line of credit",
"Commercial cards"
]
},
"screening": {
"sanctions": "No match on the company, owners or any counterparty (last run 2026-10-06)",
"pep": "No politically exposed persons among the owners",
"adverse_media": "One hit reviewed 2026-08-19: a 2023 local news report that state workplace safety regulators fined the company $18,400 over fall protection at a job site; no financial crime"
},
"accounts": [
{
"account": "Business checking x3307 (operating)",
"opened": "2016-04-18",
"signers": "Dale R. Harwick, Kristen L. Harwick; wires need both approvals online",
"status": "Open, no restrictions",
"balance_now_usd": 610474.51
},
{
"account": "Money market x3323",
"opened": "2019-02-07",
"balance_now_usd": 1250418.77,
"activity_since_2025_10": "Interest only"
}
],
"monthly_summary": {
"note": "Operating account x3307, by calendar month (Pacific time)",
"columns": [
"month",
"credits_usd",
"wires_in_usd",
"ach_in_usd",
"checks_deposited_usd",
"… 6 more in legitimate.json"
],
"rows": [
[
"2025-10",
444428.62,
0,
444428.62,
0,
"… 6 more in legitimate.json"
],
[
"2025-11",
291243.99,
212418.6,
20278.72,
58546.67,
"… 6 more in legitimate.json"
],
[
"2025-12",
547826.37,
286904.15,
206582.36,
54339.86,
"… 6 more in legitimate.json"
],
[
"2026-01",
381351.34,
244170,
18232.64,
118948.7,
"… 6 more in legitimate.json"
],
[
"2026-02",
294060.79,
231655.42,
62405.37,
0,
"… 6 more in legitimate.json"
],
"… 8 more in legitimate.json"
]
},
"counterparties": {
"note": "Everyone the account paid or was paid by through ACH, wire, check or transfer since 2026-07-01 (payroll, card and overhead billers excluded); first_activity is the first item with them in our records",
"columns": [
"id",
"name",
"kind",
"bank_or_location",
"first_activity",
"… 5 more in legitimate.json"
],
"rows": [
[
"C01",
"Granite Bay Concrete Inc",
"Subcontractor (concrete)",
"Regional bank, CA",
"2017-05-11",
"… 5 more in legitimate.json"
],
[
"C02",
"Valley Fire Sprinkler Inc",
"Subcontractor (fire sprinklers)",
"Large national bank",
"2019-03-04",
"… 5 more in legitimate.json"
],
[
"C03",
"Sac Valley Plumbing & Mechanical",
"Subcontractor (plumbing)",
"Regional bank, CA",
"2016-09-14",
"… 5 more in legitimate.json"
],
[
"C04",
"Foothill Framing Co",
"Subcontractor (framing)",
"Community bank, CA",
"2018-02-20",
"… 5 more in legitimate.json"
],
[
"C05",
"Lisa Powell",
"Client (residential remodel)",
"Credit union, CA",
"2026-07-02",
"… 5 more in legitimate.json"
],
"… 27 more in legitimate.json"
]
},
"transactions": {
"note": "Every posted item on x3307 from 2026-07-01 to the alert; amounts signed (debits negative); balance is the ledger balance after the item",
"columns": [
"ts",
"type",
"amount_usd",
"balance_usd",
"description",
"counterparty",
"detail"
],
"rows": [
[
"2026-07-01T13:00:00Z",
"ach_debit",
-14500,
375481.05,
"J&R YARD PROPERTIES RENT",
null,
"SEC CCD; yard and office lease"
],
[
"2026-07-01T17:22:20Z",
"ach_debit",
-46970.42,
328510.63,
"ACH PMT GRANITE BAY CONCRETE INC",
"C01",
"SEC CCD; OPC draw 8 pay app"
],
[
"2026-07-01T17:26:15Z",
"ach_debit",
-39427.02,
289083.61,
"ACH PMT VALLEY FIRE SPRINKLER INC",
"C02",
"SEC CCD; OPC draw 8 pay app"
],
[
"2026-07-01T17:42:07Z",
"ach_debit",
-58969.07,
230114.54,
"ACH PMT SAC VALLEY PLUMBING & MECHAN",
"C03",
"SEC CCD; OPC draw 8 pay app"
],
[
"2026-07-01T17:46:06Z",
"ach_debit",
-57126.45,
172988.09,
"ACH PMT FOOTHILL FRAMING CO",
"C04",
"SEC CCD; OPC draw 8 pay app"
],
"… 152 more in legitimate.json"
]
},
"related_account_activity": {
"account": "Dale R. Harwick, personal checking x8841 (with us)",
"note": "Debits within 7 days after each $60,000 transfer from the company in 2026",
"rows": [
[
"2026-01-15",
"IRS USATAXPYMT",
-31800
],
[
"2026-01-15",
"FRANCHISE TAX BD PYMT",
-9600
],
[
"2026-04-15",
"IRS USATAXPYMT",
-36400
],
[
"2026-04-15",
"FRANCHISE TAX BD PYMT",
-11800
],
[
"2026-06-15",
"IRS USATAXPYMT",
-36400
],
[
"2026-06-15",
"FRANCHISE TAX BD PYMT",
-11800
],
[
"2026-09-15",
"IRS USATAXPYMT",
-38400
],
[
"2026-09-15",
"FRANCHISE TAX BD PYMT",
-12200
]
]
},
"prior_alerts": [
{
"alert_id": "AML-RMF-2025-091802",
"created": "2025-09-18",
"scenario": "Rapid movement of funds",
"outcome": "Closed 2025-10-02, no SAR, after a request for information. The CFO sent the draw schedule for the Lincoln Middle School modernization, the subcontractor list and three pay applications; payments matched them."
},
{
"alert_id": "AML-RPT-2026-041401",
"created": "2026-04-14",
"scenario": "Round-dollar transfer to an owner or related party",
"outcome": "Closed 2026-04-15, no SAR: quarterly owner distribution for estimated taxes, the same pattern each quarter since 2019; the owner's account paid federal and state estimated taxes the next day."
}
],
"customer_contact": [
{
"ts": "2025-09-29T21:40:00Z",
"channel": "Secure message from customer (Kristen L. Harwick), reply to request for information",
"text": "Hi, attached are the Lincoln MS draw schedule, our subs list for that job and pay apps 2-4. The district pays us monthly and we pay the subs as soon as it lands, less retention. Summer is always our busiest stretch because school jobs have to finish before classes start. Let me know if you need anything else. Kristen"
},
{
"ts": "2026-08-19T22:30:00Z",
"channel": "Relationship manager call report (annual review, at the customer's office)",
"note": "Met Dale and Kristen. 2025 revenue $11.4M (tax return provided). Backlog about $19M: Oak Park Commons, 4-story mixed-use, $14.2M contract, construction loan with another lender, draws monthly through Capitol Valley Title, now going vertical; Elk Grove medical office tenant improvements, $2.1M, finishing in October; Hollis Elementary modernization for Riverbend USD, $3.4M, summer and fall 2026; six residential remodels. Structural steel for Oak Park was awarded to a fabricator in Reno, about $300K in two payments, a deposit in September and the balance on delivery. Expected monthly credits updated to $500K to $1.8M. Risk rating stays Medium."
}
],
"case_notes": [
{
"ts": "2026-10-06T16:05:00Z",
"note": "Alert assigned. Wires in are Oak Park draws from Capitol Valley Title (escrow reference on each) and Elk Grove progress payments from the building owner; the ACH credits include Riverbend USD's progress payment 3 for Hollis Elementary. Subcontractors paid in the window are all existing counterparties except Cornerstone Glazing (first paid 2026-06). Nevada business registry: Truckee Meadows Steel Fabricators Inc, active since 2009. No cash, no international activity."
}
],
"alert": {
"alert_id": "AML-RMF-2026-100611",
"created": "2026-10-06T13:15:00Z",
"scenario": "Rapid movement of funds / volume above profile",
"status": "New",
"rules_fired": [
"RMF-01 debits in 30 days at least 85% of credits, with credits of $1,000,000 or more (91% of $1,850,636.56)",
"VOL-02 credits in 30 days at least 1.5x the 12-month monthly average ($1,850,636.56 against $818,711.49)",
"WIR-05 wire of $100,000 or more to a new beneficiary in another state ($148,600.00 to Truckee Meadows Steel Fabricators Inc, Reno NV, on 2026-09-22)",
"RPT-02 round-dollar transfer of $50,000 or more to an owner or related party ($60,000.00 to x8841 on 2026-09-14)"
],
"monitoring_model_score": 0.71,
"last_30_days": {
"window": "2026-09-06T13:15:00Z to 2026-10-06T13:15:00Z",
"credits_usd": 1850636.56,
"credits_12_month_monthly_average_usd": 818711.49,
"wires_in_usd": 854122.1,
"wires_in_12_month_monthly_average_usd": 512888.18,
"debits_usd": 1689934.43,
"credits_moved_out_within_5_days_pct": 58,
"cash_deposits_usd": 0,
"international_wires_usd": 0,
"balance_at_end_usd": 610474.51
}
}
},
"questions": {
"fits_profile": {
"type": "noul",
"instructions": "Is the alerted activity consistent with what the institution knows about the customer: the stated occupation or business, the expected activity on file, income, past account history and any explanation the customer has already given and supported?"
},
"typology": {
"type": "choice",
"instructions": "Which best describes the alerted activity, as the institution's AML analyst would classify it?",
"criteria": {
"structuring": "Cash deposits, withdrawals or purchases of money orders or cashier's checks split up or timed to stay under the $10,000 currency transaction report threshold or another reporting or recordkeeping threshold",
"funnel_account": "Cash or other deposits made into the account by other people, often in different cities or states, and taken out or sent on soon after somewhere else",
"layering": "Funds moved quickly in and out of the account, or around related accounts and companies, with no clear business purpose, so that their source is hard to trace",
"trade_based": "Payments described as trade in goods that don't match the goods, prices, counterparties or shipments, for example paying or being paid by a third party that is not the buyer or seller",
"fraud_proceeds": "Proceeds of fraud or scams moving through the account, for example as a money mule",
"other_suspicious": "Another suspicious pattern not listed here, such as tax evasion or sanctions evasion",
"explained": "Not suspicious: the customer's known business, income or circumstances explain the activity"
}
},
"suspicious_likelihood": {
"type": "score",
"instructions": "How likely is it that the alerted activity meets the standard for a suspicious activity report: it involves funds from illegal activity, is designed to evade reporting or recordkeeping requirements such as the currency transaction report, or has no business or apparent lawful purpose that the available facts explain?",
"criteria": [
"Very unlikely (under 10%)",
"Unlikely (10-40%)",
"Uncertain (40-60%)",
"Likely (60-90%)",
"Very likely (over 90%)"
]
},
"action": {
"type": "choice",
"instructions": "What should the alert analyst do with this alert now?",
"criteria": {
"close": "Close the alert as not suspicious and record the explanation",
"request_information": "Ask the customer for the missing explanation or documents, such as the source of the funds, invoices or shipping records, and decide when they reply",
"escalate": "Escalate to an investigator for a full review (related accounts, other institutions, a site visit) before deciding on a SAR",
"file_sar": "Recommend filing a SAR now, because the record already supports one, and review whether to keep the customer"
}
}
}
}The response. Probabilities and confidence are shortened to four decimals here, and the score to three; responses carry full precision.
{
"id": "dec_67f9b13023ab4e3098b36cbe79b25bf0",
"model": "grayson-1",
"answers": {
"fits_profile": {
"type": "noul",
"noul": 0.9959
},
"typology": {
"type": "choice",
"choice": "explained",
"confidence": 0.9924,
"probabilities": {
"structuring": 0.0005,
"funnel_account": 0.0007,
"layering": 0.001,
"trade_based": 0.0013,
"fraud_proceeds": 0.0022,
"other_suspicious": 0.0008,
"explained": 0.9935
}
},
"suspicious_likelihood": {
"type": "score",
"score": 0.013,
"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.9902,
"probabilities": {
"0": 0.9922,
"1": 0.0059,
"2": 0.0002,
"3": 0.0004,
"4": 0.0013
}
},
"action": {
"type": "choice",
"choice": "close",
"confidence": 0.9848,
"probabilities": {
"close": 0.9886,
"request_information": 0.0059,
"escalate": 0.0015,
"file_sar": 0.004
}
}
},
"usage": {
"input_tokens": 16464,
"output_tokens": 0
}
}Open in Playground
A seafood importer passes $1.15M from a new Miami buyer to a new shrimp packer. A wholesaler that has banked here since 2019 has received five wires totaling $1,147,000 from a Miami company formed in April (one paid by a third company 'on behalf of' it) and wired 98% of each to a packer in Ecuador it never used before. The controller says Halyard prepays the orders for a 2% commission and sent an agreement, purchase orders, invoices and one bill of lading at a normal price, but four of the five shipments have no shipping records and nothing ties the third-party payer to the buyer.
| Question | Grayson's answer |
|---|---|
fits_profile | 47% true |
typology | explained, confidence 61% |
suspicious_likelihood | 0.85 of 4, confidence 37% (Very unlikely 49%, Unlikely 30%, Uncertain 10%, Likely 8%, Very likely 3%) |
action | request_information, confidence 35% |
19,774 input tokens, $0.00069 per decision, answered in 238 ms.
The request, with long lists cut short. The full request is ambiguous.json (68 KB).
{
"model": "grayson-1",
"state": {
"customer": {
"customer_id": "B-0418830",
"name": "Halyard Point Seafood LLC",
"type": "Florida limited liability company, formed 2014",
"customer_since": "2019-06-03",
"business": "Wholesale distributor of frozen shrimp and fish to restaurants, seafood markets and two regional grocery chains in west Florida; imports frozen shrimp from packers in Ecuador and India as importer of record",
"naics": "424460 Fish and Seafood Merchant Wholesalers",
"address": "Warehouse and office, Tampa, FL 33605 (leased)",
"annual_revenue_usd": 5600000,
"revenue_source": "2025 federal tax return and financial statements (line of credit annual review, 2026-04)",
"employees": 14,
"beneficial_owners": [
{
"name": "Thomas J. Albright",
"role": "Managing member",
"ownership_pct": 70
},
{
"name": "Nadia R. Albright",
"role": "Member",
"ownership_pct": 30
}
],
"other_contacts": "Lisa Mercado, controller (authorized signer since 2022)",
"expected_activity": {
"monthly_credits_usd": "380,000 to 620,000 (higher in Lent and December)",
"credit_sources": "ACH from grocery chains and restaurant groups, remote-deposited checks, daily card settlements",
"incoming_wires": "None expected",
"international_wires_out": "2 to 6 a month, $40,000 to $140,000 each, to shrimp packers in Ecuador and India",
"suppliers_named": "Empacadora Bahia Dorada S.A. (Guayaquil), Productos del Mar Puerto Bolivar S.A. (Machala), Seaview Marine Exports Pvt Ltd (Visakhapatnam)",
"cash": "None"
},
"risk_rating": "Medium (international wires, importer); last reviewed 2025-06-16",
"products": [
"Business checking x7742 (operating)",
"Revolving line of credit x7750 ($750,000; never past due)",
"Commercial cards"
]
},
"screening": {
"sanctions": "No match on the company, owners or regular counterparties. Wire screening on 2026-09-09: Lorvan Import Export Corp partially matched a listed entity with a similar name; dismissed the same day (different name, country and registration)",
"pep": "No politically exposed persons among the owners",
"adverse_media": "None on the company, its owners, Meridian Crest Trading LLC, Lorvan Import Export Corp or Agroexport Costa Azul S.A. (searched 2026-09-12)"
},
"accounts": [
{
"account": "Business checking x7742 (operating)",
"opened": "2019-06-03",
"signers": "Thomas J. Albright, Lisa Mercado",
"status": "Open, no restrictions",
"balance_now_usd": 332286.09
},
{
"account": "Line of credit x7750",
"limit_usd": 750000,
"outstanding_usd": 410000,
"note": "Drawn 2026-02 for Lent inventory; paid down monthly"
}
],
"monthly_summary": {
"note": "Operating account x7742, by calendar month (Eastern time)",
"columns": [
"month",
"credits_usd",
"ach_and_card_credits_usd",
"checks_deposited_usd",
"wires_in_usd",
"… 6 more in ambiguous.json"
],
"rows": [
[
"2025-10",
496587.79,
257760.43,
238827.36,
0,
"… 6 more in ambiguous.json"
],
[
"2025-11",
380449.87,
173981.08,
206468.79,
0,
"… 6 more in ambiguous.json"
],
[
"2025-12",
521181.76,
267359.09,
253822.67,
0,
"… 6 more in ambiguous.json"
],
[
"2026-01",
427685.78,
210162.08,
217523.7,
0,
"… 6 more in ambiguous.json"
],
[
"2026-02",
414638.7,
225708.92,
188929.78,
0,
"… 6 more in ambiguous.json"
],
"… 8 more in ambiguous.json"
]
},
"counterparties": {
"note": "Everyone the account paid or was paid by through ACH or wire since 2026-07-15 (checks, card settlements, payroll and overhead billers excluded); first_activity is the first item with them in our records",
"columns": [
"id",
"name",
"kind",
"bank_or_location",
"first_activity",
"… 5 more in ambiguous.json"
],
"rows": [
[
"C01",
"Productos del Mar Puerto Bolivar S.A.",
"Supplier (shrimp packer)",
"Machala, Ecuador",
"2022-04-11",
"… 5 more in ambiguous.json"
],
[
"C02",
"Bayshore Hospitality Group",
"Customer (restaurant group)",
"Regional bank, FL",
"2020-01-15",
"… 5 more in ambiguous.json"
],
[
"C03",
"Channelside Restaurant Group LLC",
"Customer (restaurant group)",
"Large national bank",
"2022-06-06",
"… 5 more in ambiguous.json"
],
[
"C04",
"Palmetto Dock Seafood House Inc",
"Customer (restaurant)",
"Community bank, FL",
"2019-07-22",
"… 5 more in ambiguous.json"
],
[
"C05",
"Gulf Breeze Grocers Inc",
"Customer (regional grocery chain)",
"Regional bank, FL",
"2019-09-10",
"… 5 more in ambiguous.json"
],
"… 10 more in ambiguous.json"
]
},
"transactions": {
"note": "Every posted item on x7742 from 2026-07-15 to now; amounts signed (debits negative); balance is the ledger balance after the item",
"columns": [
"ts",
"type",
"amount_usd",
"balance_usd",
"description",
"counterparty",
"detail"
],
"rows": [
[
"2026-07-15T13:00:00Z",
"ach_credit",
392.63,
222558.39,
"MERCHANT SVCS SETTLEMENT",
null,
"card sales, prior business day"
],
[
"2026-07-15T21:37:13Z",
"remote_deposit",
16948.26,
239506.65,
"REMOTE DEPOSIT CAPTURE 7 ITEMS",
null,
"restaurant and seafood market checks"
],
[
"2026-07-16T13:00:00Z",
"ach_credit",
2020.63,
241527.28,
"MERCHANT SVCS SETTLEMENT",
null,
"card sales, prior business day"
],
[
"2026-07-16T15:33:20Z",
"wire_out",
-79705.75,
161821.53,
"OUTGOING INTL WIRE USD",
"C01",
"online wire; beneficiary Productos del Mar Puerto Bolivar S.A., Machala, Ecuador; OBI \"INV 1078 FROZEN SHRIMP\""
],
[
"2026-07-16T18:00:00Z",
"ach_debit",
-15353.85,
146467.68,
"PAYCHEX PAYROLL",
null,
"SEC CCD; 14 employees"
],
"… 213 more in ambiguous.json"
]
},
"matched_wires": {
"note": "Each incoming wire and the outgoing wire to Agroexport Costa Azul S.A. that followed it",
"columns": [
"wire_in_date",
"payer",
"in_usd",
"wire_out_date",
"out_usd",
"kept_usd",
"reference_in",
"reference_out"
],
"rows": [
[
"2026-08-11",
"Meridian Crest Trading LLC",
186000,
"2026-08-12",
182280,
3720,
"PO MCT-0804",
"PI CA-2026-071"
],
[
"2026-08-27",
"Meridian Crest Trading LLC",
214500,
"2026-08-28",
210210,
4290,
"PO MCT-0819",
"PI CA-2026-084"
],
[
"2026-09-09",
"Lorvan Import Export Corp",
238000,
"2026-09-10",
233240,
4760,
"INV HPS-0907",
"PI CA-2026-097"
],
[
"2026-09-22",
"Meridian Crest Trading LLC",
246000,
"2026-09-23",
241080,
4920,
"PO MCT-0915",
"PI CA-2026-109"
],
[
"2026-10-02",
"Meridian Crest Trading LLC",
262500,
"2026-10-05",
257250,
5250,
"PO MCT-0929",
"PI CA-2026-118"
]
]
},
"prior_alerts": [
{
"alert_id": "AML-VOL-2025-031207",
"created": "2025-03-12",
"scenario": "International wire volume above profile",
"outcome": "Closed 2025-03-20, no SAR: Lent season purchases from the three named packers; invoices for four wires reviewed."
}
],
"customer_contact": [
{
"ts": "2026-09-14T14:30:00Z",
"channel": "Request for information sent through the business banking portal to Thomas J. Albright and Lisa Mercado",
"text": "We are reviewing recent wires on your account: three incoming wires from Meridian Crest Trading LLC and Lorvan Import Export Corp, and the outgoing wires that followed to Agroexport Costa Azul S.A. Please tell us the purpose of these payments and your relationship with each company, and send supporting documents such as contracts, invoices, bills of lading and customs entries."
},
{
"ts": "2026-09-24T19:05:00Z",
"channel": "Portal reply from Lisa Mercado (controller), with attachments",
"text": "Hi, Meridian Crest is a new importer in Miami started by Julian Marsh, who used to be a sales manager at Bahia Dorada and has known Tom for years. Costa Azul is a packer Julian works with. Costa Azul only ships on prepayment from buyers it has a history with, or against a letter of credit, and Meridian's bank hasn't approved their LC line yet. So for now we place and prepay the orders and Meridian pays us the invoice plus 2%. The containers ship to Meridian in Miami and Meridian's broker clears them, so we don't have the customs entries. Lorvan is Meridian's financing partner and paid one order for them. Attached: our commission agreement with Meridian (signed July 20), Meridian's purchase orders and Costa Azul's pro-forma invoices for the first four orders. I've asked Meridian for the bills of lading. Lisa"
},
{
"ts": "2026-09-29T20:15:00Z",
"channel": "Call notes (analyst and relationship manager with Thomas J. Albright)",
"note": "Albright repeated the controller's explanation and said the arrangement is meant to last 'a few months until Meridian has its own credit with the packers'. Asked why Costa Azul accepts Halyard's prepayment though Halyard has never bought from it: Costa Azul's sales manager came from Bahia Dorada and knows Halyard. Asked about Lorvan: 'an investor in Meridian, I don't know them myself'. He said he would get the shipping documents. He was open and didn't object to any question."
},
{
"ts": "2026-10-01T15:40:00Z",
"channel": "Portal message from Lisa Mercado, with attachment",
"text": "Attached is the bill of lading for the first container. Meridian says the others are on the way to them and they'll send the paperwork as they get it. The fifth order (PI 118) goes out Monday. Lisa"
},
{
"ts": "2026-10-06T13:20:00Z",
"channel": "Relationship manager note",
"note": "Long-standing client with a clean credit history; they see brokering for Meridian as a way to grow. Asked that the review not delay their regular supplier wires."
}
],
"case_notes": [
{
"ts": "2026-09-12T15:10:00Z",
"note": "Florida registry: Meridian Crest Trading LLC registered 2026-04-28, manager Julian Marsh, principal address a shared office suite in Doral, FL; website domain registered 2026-05-03. Lorvan Import Export Corp: active since 2015, general merchandise exporter, Miami. Ecuador company registry: Agroexport Costa Azul S.A., incorporated 2018, activity export of aquaculture products. No adverse media on any of them."
},
{
"ts": "2026-10-06T18:45:00Z",
"note": "Document review. Commission agreement dated 2026-07-20, signed by Albright and Marsh: Halyard prepays Costa Azul's invoices for Meridian and is paid the invoice plus 2%. Purchase orders and pro-forma invoices for orders 1 to 4 match the outgoing wires to the cent and describe 1 x 40-foot reefer container each of frozen head-on white shrimp (sizes 26/30 and 31/35). The bill of lading for order 1: shipper Agroexport Costa Azul S.A., consignee Meridian Crest Trading LLC, loaded in Guayaquil 2026-08-26 for Port Everglades, 1,200 cartons, 18,000 kg net. That is $4.59 a pound, in line with what Halyard paid its own packers for 26/30 shrimp in August and September ($4.45 to $4.80). Order 1 was loaded 15 days after Halyard paid for it; on that timing orders 2 and 3 would have been loaded by mid-September and landed by the end of the month. No bills of lading for orders 2 to 4 (order 2 paid 2026-08-28) and no documents for order 5, which was wired on 2026-10-05. No customs entries, since Meridian is said to be the importer of record. Nothing links Lorvan to Meridian beyond the customer's statement and the wire text. Halyard's own purchases from its three named packers continued as usual through the period. No 314(b) request sent yet."
}
],
"alert": {
"alert_id": "AML-WIR-2026-091104",
"created": "2026-09-11T10:20:00Z",
"scenario": "Wires in and out / third-party payments",
"status": "Customer replied to the request for information; decision due",
"rules_fired": [
"WIR-07 incoming wire followed within 3 business days by an international wire of 95% or more of its amount (3 pairs at alert; 5 now)",
"WIR-09 wire received from a third party on behalf of another party ($238,000.00 from Lorvan Import Export Corp on 2026-09-09)",
"WIR-05 new international beneficiary, $100,000 or more (Agroexport Costa Azul S.A., Guayaquil, Ecuador)",
"PRF-03 incoming wires on an account not expected to receive them ($452,500.00 in the 30 days before the alert)"
],
"linked_since_alert": "Two more pairs: $246,000.00 in on 2026-09-22 and $241,080.00 out on 2026-09-23; $262,500.00 in on 2026-10-02 and $257,250.00 out on 2026-10-05",
"monitoring_model_score": 0.83,
"last_30_days": {
"window": "2026-09-07T13:00:00Z to 2026-10-07T13:00:00Z",
"credits_usd": 1181178.76,
"wires_in_usd": 746500,
"wires_in_monthly_average_2025_10_to_2026_07_usd": 0,
"international_wires_out_usd": 886182.08,
"international_wires_out_monthly_average_2025_10_to_2026_07_usd": 260559.14,
"balance_at_end_usd": 332286.09
}
}
},
"questions": {
"fits_profile": {
"type": "noul",
"instructions": "Is the alerted activity consistent with what the institution knows about the customer: the stated occupation or business, the expected activity on file, income, past account history and any explanation the customer has already given and supported?"
},
"typology": {
"type": "choice",
"instructions": "Which best describes the alerted activity, as the institution's AML analyst would classify it?",
"criteria": {
"structuring": "Cash deposits, withdrawals or purchases of money orders or cashier's checks split up or timed to stay under the $10,000 currency transaction report threshold or another reporting or recordkeeping threshold",
"funnel_account": "Cash or other deposits made into the account by other people, often in different cities or states, and taken out or sent on soon after somewhere else",
"layering": "Funds moved quickly in and out of the account, or around related accounts and companies, with no clear business purpose, so that their source is hard to trace",
"trade_based": "Payments described as trade in goods that don't match the goods, prices, counterparties or shipments, for example paying or being paid by a third party that is not the buyer or seller",
"fraud_proceeds": "Proceeds of fraud or scams moving through the account, for example as a money mule",
"other_suspicious": "Another suspicious pattern not listed here, such as tax evasion or sanctions evasion",
"explained": "Not suspicious: the customer's known business, income or circumstances explain the activity"
}
},
"suspicious_likelihood": {
"type": "score",
"instructions": "How likely is it that the alerted activity meets the standard for a suspicious activity report: it involves funds from illegal activity, is designed to evade reporting or recordkeeping requirements such as the currency transaction report, or has no business or apparent lawful purpose that the available facts explain?",
"criteria": [
"Very unlikely (under 10%)",
"Unlikely (10-40%)",
"Uncertain (40-60%)",
"Likely (60-90%)",
"Very likely (over 90%)"
]
},
"action": {
"type": "choice",
"instructions": "What should the alert analyst do with this alert now?",
"criteria": {
"close": "Close the alert as not suspicious and record the explanation",
"request_information": "Ask the customer for the missing explanation or documents, such as the source of the funds, invoices or shipping records, and decide when they reply",
"escalate": "Escalate to an investigator for a full review (related accounts, other institutions, a site visit) before deciding on a SAR",
"file_sar": "Recommend filing a SAR now, because the record already supports one, and review whether to keep the customer"
}
}
}
}The response. Probabilities and confidence are shortened to four decimals here, and the score to three; responses carry full precision.
{
"id": "dec_c53c55067ce547888f5bca9c661165ef",
"model": "grayson-1",
"answers": {
"fits_profile": {
"type": "noul",
"noul": 0.4688
},
"typology": {
"type": "choice",
"choice": "explained",
"confidence": 0.6137,
"probabilities": {
"structuring": 0.0045,
"funnel_account": 0.0157,
"layering": 0.0622,
"trade_based": 0.2172,
"fraud_proceeds": 0.0157,
"other_suspicious": 0.0157,
"explained": 0.6689
}
},
"suspicious_likelihood": {
"type": "score",
"score": 0.849,
"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.3686,
"probabilities": {
"0": 0.4949,
"1": 0.3002,
"2": 0.0974,
"3": 0.0759,
"4": 0.0316
}
},
"action": {
"type": "choice",
"choice": "request_information",
"confidence": 0.3521,
"probabilities": {
"close": 0.1891,
"request_information": 0.514,
"escalate": 0.1669,
"file_sar": 0.13
}
}
},
"usage": {
"input_tokens": 19774,
"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.
action: close alerts automatically only above a strictclosethreshold you set on your own closed alerts, and sendfile_sarandescalateabove their thresholds straight to investigators. Everything else goes to an analyst with Grayson's answers attached.suspicious_likelihood: use the sum of "Likely" and "Very likely" to order the queue, so the alerts most likely to end in a SAR are worked first and well inside your filing deadline.typologyandfits_profile: route each alert to the analysts who know that pattern, and use the typology for the SAR's activity category and narrative. A close call betweenexplainedand a suspicious typology, as in the seafood importer, usually means one missing document.
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
Most transaction monitoring alerts are false positives, because rules can only compare amounts, counts and speeds with fixed thresholds. A contractor paying subcontractors the day a draw lands looks like rapid movement of funds, while a customer who keeps every cash deposit at $9,600 can pass for a small business. Analysts close the difference by reading the profile, the history and the customer's own explanations, which is slow, uneven from one analyst to the next and hard to staff.
What to send
Send the alert as your case-management system assembles it for an analyst. The examples send 12 months of monthly totals and three months of transactions in about 16,000 to 20,000 input tokens.
- The rules that fired and the transactions behind them, with each rule's threshold and the values that crossed it.
- The KYC profile: occupation or business, expected activity, income or revenue and its source, owners, risk rating and when it was last reviewed.
- Months of transactions with counterparties. How cash, wires and transfers compare with earlier months shows whether the activity is new, seasonal or tied to an event.
- Currency transaction reports and branch notes. Same-day aggregation, deposits spread across branches and a customer asking about "the paperwork" are what separate structuring from a cash business.
- Earlier alerts and how they were closed, including the analyst's reasoning, so an explanation that changes from one alert to the next shows.
- The customer's answers and documents, word for word: replies to requests for information, call notes, and what the invoices, contracts and shipping records show.
- Screening and registry checks: sanctions, PEP and adverse media results with their dispositions, and what business registries say about new counterparties.
Add your own policy
Many institutions don't let first-level analysts recommend a SAR, and treat structuring alerts differently because asking the customer about them can tip them off. Put your triage procedure in the state in your team's words. This one sends every alert that already supports a SAR to the Financial Intelligence Unit instead.
Your triage procedure adds this to the state of the obvious example:
{
"institution_policy": "Alert triage procedure, section 3 (revised 2026-07): Level 1 alert analysts close, request information or escalate; they never recommend a SAR themselves. When the facts already support a SAR, escalate to the Financial Intelligence Unit with a summary, and the FIU decides on filing within the 30-day deadline. Every alert with structuring indicators (a customer's question or statement about avoiding a currency transaction report, or three or more cash deposits between $8,000 and $10,000 in 30 days) goes to the FIU the same day. Never send a request for information on a structuring alert, so that the customer is not tipped off."
}| Question | Without | With your triage procedure |
|---|---|---|
fits_profile | Under 1% true | Under 1% true |
typology | structuring, confidence 93% | structuring, confidence 95% |
suspicious_likelihood | 3.61 of 4, confidence 71% | 3.77 of 4, confidence 82% |
action | file_sar, confidence 93% | escalate, confidence 81% |
Applied to the clearly suspicious example: the warehouse supervisor's alert meets the procedure's structuring test, so the action moves from recommending a SAR to escalating to the FIU, while the typology, the profile answer and the likelihood stay the same.
Where to call it
- When an alert is created, before it reaches the queue, so analysts start from a draft and the queue is ordered by likelihood.
- Again when new facts arrive, such as the customer's reply to a request for information, a teller referral or new transactions on an alerted account.
- On alerts your team is about to close, as a second check, sending disagreements to a senior analyst.
Cost and latency
| Example | Input tokens | Per decision | Per 1,000 decisions | Latency |
|---|---|---|---|---|
| Obvious | 15,787 | $0.00055 | $0.55 | 225 ms |
| Legitimate | 16,464 | $0.00058 | $0.58 | 268 ms |
| Ambiguous | 19,774 | $0.00069 | $0.69 | 238 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/aml-alert-triage/questions.json --label fits_profile=<column> --label typology=<column> --label suspicious_likelihood=<column> --label action=<column>Each --label names the column with that question's right answer:
fits_profile:trueorfalsetypology:structuring,funnel_account,layering,trade_based,fraud_proceeds,other_suspicious,explainedsuspicious_likelihood: a level, such as "Very likely (over 90%)"action:close,request_information,escalate,file_sar
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 close alerts without an analyst?
It can, if you choose to. Run it on alerts your team has already closed and filed on, pick a close threshold that keeps missed SARs at a level your BSA officer accepts, and keep a sample of automatic closes for quality review. Whatever you decide, document the threshold and the testing in your model risk and BSA/AML programs, since examiners will ask how alerts are closed.
Are amounts just under $10,000 enough to call it structuring?
No. FinCEN's SAR FAQs of October 2025 say that transactions near the $10,000 currency transaction report threshold do not, by themselves, require a SAR without information that they were designed to evade reporting. Grayson weighs the amounts with the rest of the record: deposits spread across branches and days, a customer asking how to avoid a report, explanations that change, and cash that the customer's income and business don't explain.
How is this different from the money mule recipe?
The money mule recipe answers one question in depth: whether an account is passing other people's money on, and whether the holder knows. This one triages any monitoring alert across typologies, including mule activity under fraud_proceeds. Send mule-shaped alerts to that recipe if you want the holder's role and the account action as well.
Related recipes
Detect money mule accounts
Whether an account is passing other people's money through, whether the holder knows, and what to do
Detect fraudulent incoming ACH credits and transfers
Release, hold or return an incoming credit that may be proceeds of BEC, account takeover or payroll diversion.
Recipes
Every use case, with its questions and cost per decision.
AML and sanctions
Transaction monitoring alerts, money mule accounts and sanctions and watchlist screening. Ready-to-run Grayson recipes with real responses, cost and latency.
Money mules
Decide whether an account is a money mule, whether the holder is complicit or was deceived by a job or romance scam, and whether to restrict or close it.