Detect fleet and fuel card misuse at the pump
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.
Grayson checks a fleet card's fuel authorization against where the assigned truck is, how much room its tanks have, the card's recent fills and what you know about the station. It returns how likely the fill is misuse, whether it looks like a routine fill, the driver's personal use, fuel theft for resale, or a cloned or stolen card, whether the assigned unit is at the pump, and whether to approve, approve and alert the fleet manager, decline, or block the card. It costs about $0.35 to $0.43 per 1,000 decisions.
- Decides: Tell routine fills from cloned cards, fuel theft and personal use, and choose approve, alert the fleet, decline or block.
- Call it: When a fleet card authorizes fuel at a truck stop or fuel station
- Questions: 1 score, 2 choice, 1 yes/no
- Cost: $0.00035 to $0.00043 per decision ($0.35 to $0.43 per 1,000) for these examples' 10,003 to 12,151 input tokens
- Latency: 191 to 198 ms for these examples, the median of 5 calls each through api.finic.ai from US-West
Examples
Three diesel authorizations on driver and vehicle cards, each sent with 90 days of the card's fills (with the engine fuel level before and after each one), the truck's daily telematics, its pings around the swipe, the card's controls and what the provider knows about the station. They are a skimmed card fueling in Texas while its truck sits in Ohio, a reefer truck's tractor fill on a new lane with a new driver, and a second fill on a driver's card minutes after his own truck was filled, with a nearly empty fleet truck parked next to him.
Open in Playground
A skimmed driver card fuels in Texas while its truck sits parked in Ohio. This card was used at a pump where a skimmer and keypad overlay were found last week. Tonight it bought 148.6 gallons at an independent fuel stop in Texas with the right driver ID (after one wrong try) and an odometer of 100000, while the truck's telematics shows it parked with the ignition off at its Ohio terminal, 1,218 miles away. Now a second diesel fill is starting on another pump.
| Question | Grayson's answer |
|---|---|
misuse_likelihood | 3.95 of 4, confidence 98% |
pattern | cloned_or_skimmed_card, confidence 96% |
assigned_unit_at_station | Under 1% true |
action | block_card, confidence 93% |
11,667 input tokens, $0.00041 per decision, answered in 195 ms.
The request, with long lists cut short. The full request is fraud.json (45 KB).
{
"model": "grayson-1",
"state": {
"fleet_account": {
"fleet": "Tolland Creek Freight LLC, Grove City, OH (dry van truckload)",
"customer_since": "2019-05-14",
"fleet_size": "38 tractors, 41 cards (driver cards with unit prompts)",
"credit_line_usd": 180000,
"balance_usd": 61244.18,
"payment": "Weekly ACH draft, never returned",
"fleet_manager": "Renee Castellano, fuel and safety manager, (614) 555-0127; alerts by email and text",
"telematics_integration": "Since 2023-02: positions every 5 minutes while moving and every 60 minutes parked, odometer, engine fuel level and ELD duty status for all 38 tractors",
"fraud_history": "One stolen-card case in 2024 (card left in a truck at a repair shop); no driver misuse findings in 7 years"
},
"card": {
"card": "x6623, magnetic stripe, issued 2024-11-02, expires 2027-11",
"type": "Driver card: prompts for driver ID, unit number and odometer at every fuel purchase",
"assigned_driver": "Dwayne R. Hollis, driver ID 118704",
"assigned_unit": "2214 (driver is assigned to this unit by the fleet's dispatch since 2025-03-10)",
"controls": {
"products": "ULSD, DEF and engine oil only; no gasoline, reefer fuel, merchandise or cash",
"per_transaction": "200 gallons, $900",
"per_day": "3 fuel transactions, 300 gallons",
"merchants": "Truck stops and fuel stops on our network in the US",
"hours": "Any time"
},
"status": "Active. On our compromised-card list since 2026-10-03 (see compromise_reports); replacement card mailed to the fleet's terminal 2026-10-05, not yet activated. The fleet asked us to keep the old cards working until drivers have the new ones."
},
"driver": {
"driver_id": "118704",
"name": "Dwayne R. Hollis",
"hired": "2021-08-30",
"home_terminal": "Grove City, OH; lives in Grove City and takes home time at the terminal",
"cards_held": "x6623 only",
"exceptions_in_12_months": "None"
},
"unit": {
"unit": "2214",
"vehicle": "2022 Freightliner Cascadia 126, day-and-sleeper tractor, Detroit DD15",
"fuel_tanks": "Two 125-gallon tanks (250 gallons); one fuel-level sender with a crossover line",
"def_tank_gal": 23,
"typical_fill": "110 to 180 gallons when the tanks are a third to half full",
"ecu_mpg_90_days": 7.1
},
"history_summary": {
"window": "2026-07-09 to 2026-10-07T08:19Z",
"transactions": 35,
"diesel_fills": 31,
"diesel_gallons": 4149.2,
"median_fill_gal": 139.6,
"p90_fill_gal": 159.9,
"largest_fill_gal": 167.6,
"pumped_minus_ecu_added_gal": {
"median": 0.3,
"min": -5.4,
"max": 148.6
},
"telematics_miles": 26808,
"ecu_fuel_used_gal": 3976.6,
"spend_usd": 16094.78,
"transactions_by_merchant_brand": {
"TA": 15,
"FLYING J": 8,
"PILOT": 3,
"HALDEN PIKE FUEL PLAZA JEFFERSONVILLE OH": 3,
"MESQUITE FLATS TRAVEL PLAZA PEARSALL TX": 3,
"LOVES": 2,
"PETRO": 1
}
},
"legend": {
"products": "Gallons per product at the pump or fuel desk: ULSD = ultra-low-sulfur diesel for the tractor; REEFER = dyed off-road diesel for the trailer's refrigeration unit; DEF = diesel exhaust fluid; OIL = engine oil (quarts); SCALE = certified scale weigh; MERCH = store merchandise",
"card_read": "Magnetic stripe at the pump or the fuel desk; these cards have no chip",
"driver_id": "Driver ID entered at the prompt, checked against the fleet's driver list",
"odometer_telematics": "Engine odometer from the fleet's telematics at the time of the swipe",
"unit_distance_mi": "Distance from the assigned unit's last telematics position to the merchant at the swipe",
"ecu_fuel_pct": "Engine fuel level before the swipe and 20 minutes after the fill completed, from telematics",
"ecu_added_gal": "Gallons the fuel-level change implies (tank capacity times the change); usually within about 6 gallons of the pumped gallons because of sender accuracy and tank slope"
},
"card_transactions": {
"columns": [
"ts",
"merchant",
"pump",
"products",
"diesel_gal",
"… 11 more in fraud.json"
],
"rows": [
[
"2026-07-11T14:17:37Z",
"LOVES #0721 CARTERSVILLE GA",
"6",
"ULSD 138.7",
138.7,
"… 11 more in fraud.json"
],
[
"2026-07-12T12:19:00Z",
"TA #0170 JEFFERSONVILLE OH",
"2",
"ULSD 75.6",
75.6,
"… 11 more in fraud.json"
],
[
"2026-07-12T12:42:00Z",
"TA #0170 JEFFERSONVILLE OH",
"Fuel desk",
"SCALE",
0,
"… 11 more in fraud.json"
],
[
"2026-07-15T14:50:30Z",
"TA #0237 RIPLEY WV",
"8",
"ULSD 142.7; DEF 10.1",
142.7,
"… 11 more in fraud.json"
],
[
"2026-07-18T15:31:10Z",
"TA #0212 WALTON KY",
"10",
"ULSD 149.5; OIL 2 qt",
149.5,
"… 11 more in fraud.json"
],
"… 30 more in fraud.json"
]
},
"unit_daily_telematics": {
"columns": [
"date",
"duty",
"miles",
"from",
"to",
"… 4 more in fraud.json"
],
"rows": [
[
"2026-07-09",
"Driving",
467,
"Grove City OH",
"Dalton GA",
"… 4 more in fraud.json"
],
[
"2026-07-10",
"Driving",
122,
"Dalton GA",
"McDonough GA",
"… 4 more in fraud.json"
],
[
"2026-07-11",
"Driving",
473,
"McDonough GA",
"Walton KY",
"… 4 more in fraud.json"
],
[
"2026-07-12",
"Driving",
140,
"Walton KY",
"Grove City OH",
"… 4 more in fraud.json"
],
[
"2026-07-13",
"Driving",
402,
"Grove City OH",
"Joliet IL",
"… 4 more in fraud.json"
],
"… 85 more in fraud.json"
]
},
"unit_now": {
"position": "Tolland Creek Freight terminal yard, Grove City, OH, 1,218 miles from the merchant",
"ignition": "Off since 2026-10-02T22:52:50Z",
"last_ping": "2026-10-07T08:02:15Z, parked, same position",
"odometer": 424220,
"fuel_level_pct": 92,
"eld_status": "Driver 118704 off duty since 2026-10-02T22:57:50Z; no other driver logged into the unit"
},
"unit_pings_last_24_hours": {
"columns": [
"ts",
"position",
"speed_mph",
"ignition",
"engine_fuel_level_pct"
],
"rows": [
[
"2026-10-06T08:02:15Z",
"Tolland Creek Freight terminal yard, Grove City OH",
0,
"Off",
92
],
[
"2026-10-06T09:02:15Z",
"Tolland Creek Freight terminal yard, Grove City OH",
0,
"Off",
92
],
[
"2026-10-06T10:02:15Z",
"Tolland Creek Freight terminal yard, Grove City OH",
0,
"Off",
92
],
[
"2026-10-06T11:02:15Z",
"Tolland Creek Freight terminal yard, Grove City OH",
0,
"Off",
92
],
[
"2026-10-06T12:02:15Z",
"Tolland Creek Freight terminal yard, Grove City OH",
0,
"Off",
92
],
"… 20 more in fraud.json"
]
},
"compromise_reports": [
{
"received": "2026-10-03T14:20:00Z",
"merchant": "HALDEN PIKE FUEL PLAZA JEFFERSONVILLE OH (independent fuel stop on our network)",
"report": "Station manager found a card skimmer inside diesel pump 6 and a keypad overlay on its PIN pad during a dispenser inspection on 2026-10-02; the sheriff's office took the devices",
"cards_exposed": "212 of our cards used at pump 6 from 2026-09-14 to 2026-10-02, including x6623 on 2026-09-28",
"fraud_since": "11 of the 212 have had confirmed counterfeit use since 2026-10-04, all at fuel stops in Texas and Oklahoma, all magnetic stripe, diesel only, 120 to 190 gallons",
"our_action": "Cards on the compromised list; replacements mailed; fleets told by email on 2026-10-03",
"this_fleet": "5 of Tolland Creek's 41 cards were used at pump 6 (x6623, x6610, x6648, x6702, x6731); the other four have had no activity since 2026-10-02"
}
],
"merchant_profile": {
"merchant": "MESQUITE FLATS TRAVEL PLAZA PEARSALL TX",
"what_it_is": "Independent fuel stop on I-35, three diesel lanes and a fuel desk; on our network since 2025-06-12",
"usual_volume_on_our_cards": "About 35 transactions a day, 70 to 160 gallons, mostly carriers running I-35",
"tonight_on_our_cards": "Since 2026-10-07T05:00Z: 27 authorizations on 11 cards from 9 fleets, all magnetic stripe diesel at 118 to 196 gallons; 8 of the 11 cards were used at Halden Pike pump 6 in September; telematics puts 7 of the 9 fleets' units more than 500 miles away",
"confirmed_fraud_90_days": "6.8% of approved dollars (our network average is 0.2%)"
},
"authorization_under_review": {
"ts": "2026-10-07T08:19:42Z",
"merchant": "MESQUITE FLATS TRAVEL PLAZA PEARSALL TX",
"pump": "5, diesel lane",
"card_read": "Magnetic stripe",
"products_requested": "ULSD",
"pre_authorization": "200 gallons or $900, whichever first",
"prompts": {
"driver_id": "118704: valid for this card",
"unit": "2214: matches the card's assigned unit",
"odometer": "100000 (telematics odometer is 424,220)"
},
"card_today": "Third fuel authorization in 30 minutes: one declined for driver ID, one approved for 148.6 gallons at pump 3; a merchandise purchase declined for product",
"limits_after_this": "1 more fuel transaction and 151.4 gallons left today",
"unit_at_swipe": "Parked at the Grove City terminal, 1,218 miles away; ignition off; ELD off duty",
"rules_fired": [
{
"rule": "R-40 Unit more than 50 miles from the merchant",
"action": "Email the fleet manager"
},
{
"rule": "R-22 Odometer entry differs from telematics by more than 500 miles",
"action": "Flag"
},
{
"rule": "R-51 Card on compromised list, second fuel purchase in an hour",
"action": "Flag for review"
}
],
"our_fraud_score": "912 (0 to 999; we decline over 950 without review)"
}
},
"questions": {
"misuse_likelihood": {
"type": "score",
"instructions": "From the fleet card provider's point of view, how likely is it that the fuel authorization under review is misuse, meaning the fuel will not go into a vehicle or reefer unit of this fleet, whether the driver is misusing the card or someone else is using a copied or stolen card?",
"criteria": [
"Very unlikely (under 10%)",
"Unlikely (10-40%)",
"Uncertain (40-60%)",
"Likely (60-90%)",
"Very likely (over 90%)"
]
},
"pattern": {
"type": "choice",
"instructions": "Which best describes who is using the card in the authorization under review, and for what?",
"criteria": {
"legitimate": "Business fuel for this fleet: the card's driver fueling the assigned unit, its trailer's reefer unit or another unit of the same fleet, even if that breaks one of the fleet's own rules",
"driver_personal_use": "The card's driver buying fuel or goods for their own use, such as filling a personal car or pickup",
"fuel_theft_or_resale": "The card's driver, or someone working with them, putting fuel into vehicles or containers outside the fleet, usually to sell it",
"cloned_or_skimmed_card": "Someone other than the driver using a copy of the card made from data stolen at a pump or terminal, while the real card stays with the driver",
"stolen_card": "Someone other than the driver using the physical card after it was lost or taken from the driver or the truck"
}
},
"assigned_unit_at_station": {
"type": "noul",
"instructions": "Is the unit this card is assigned to at the fuel station at the time of the authorization under review, according to its telematics position and ignition and duty status?"
},
"action": {
"type": "choice",
"instructions": "What should the fleet card provider do with the authorization under review?",
"criteria": {
"approve": "Approve it with no follow-up",
"approve_and_alert_manager": "Approve it, and send it to the fleet manager to confirm or dispute within the day",
"decline": "Decline this authorization but leave the card active; the driver can call the fleet's dispatch or our help desk",
"block_card": "Decline it and block the card until the fleet confirms who has it and a replacement is issued"
}
}
}
}The response. Probabilities and confidence are shortened to four decimals here, and the score to three; responses carry full precision.
{
"id": "dec_5c418837f9ce4e6d8bbc9d3b6de60d4e",
"model": "grayson-1",
"answers": {
"misuse_likelihood": {
"type": "score",
"score": 3.947,
"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.9772,
"probabilities": {
"0": 0.0096,
"1": 0.0021,
"2": 0.0013,
"3": 0.0052,
"4": 0.9818
}
},
"pattern": {
"type": "choice",
"choice": "cloned_or_skimmed_card",
"confidence": 0.9635,
"probabilities": {
"legitimate": 0.0045,
"driver_personal_use": 0.0058,
"fuel_theft_or_resale": 0.0051,
"cloned_or_skimmed_card": 0.9708,
"stolen_card": 0.0138
}
},
"assigned_unit_at_station": {
"type": "noul",
"noul": 0.0001
},
"action": {
"type": "choice",
"choice": "block_card",
"confidence": 0.9267,
"probabilities": {
"approve": 0.0105,
"approve_and_alert_manager": 0.0222,
"decline": 0.0222,
"block_card": 0.9451
}
}
},
"usage": {
"input_tokens": 11667,
"output_tokens": 0
}
}Open in Playground
A reefer truck's second fill in Amarillo, on a new lane with a new driver. A refrigerated carrier's truck on its first run to Dallas pulls into a truck stop in Amarillo, fuels the trailer's reefer tank, then starts a large tractor fill. Four rules fired: a second fuel purchase within the hour, a first purchase in Texas, a driver ID added to the card last week and an odometer entry with two digits swapped. The truck is at the pump with its tanks under half full, a reefer fill before the tractor fill is this card's routine, and the fleet itself moved the new driver to the unit.
| Question | Grayson's answer |
|---|---|
misuse_likelihood | 0.24 of 4, confidence 86% |
pattern | legitimate, confidence 92% |
assigned_unit_at_station | 99% true |
action | approve, confidence 31% |
12,151 input tokens, $0.00043 per decision, answered in 198 ms.
The request, with long lists cut short. The full request is legitimate.json (46 KB).
{
"model": "grayson-1",
"state": {
"fleet_account": {
"fleet": "Brightwater Reefer Lines Inc, Nampa, ID (refrigerated truckload)",
"customer_since": "2016-03-02",
"fleet_size": "64 tractors, 70 reefer trailers, 66 cards (vehicle cards with driver ID prompts)",
"credit_line_usd": 400000,
"balance_usd": 172930.55,
"payment": "Twice-weekly ACH draft, never returned",
"fleet_manager": "Dana Whitcomb, fuel manager, (208) 555-0164; alerts by email",
"telematics_integration": "Since 2022-07: tractor positions, odometer, engine fuel level and ELD duty status; trailer reefer units report tank level, setpoint and mode",
"fraud_history": "Two counterfeit-card cases in 2025 (both from a skimmer in Nevada); one driver dismissed in 2023 for fueling a personal pickup"
},
"card": {
"card": "x7731, magnetic stripe, issued 2025-06-19, expires 2028-06",
"type": "Vehicle card for unit 7731: prompts for driver ID and odometer; any driver on the fleet's list may use it",
"assigned_unit": "7731",
"controls": {
"products": "ULSD, reefer fuel, DEF, oil, scale tickets; no gasoline, merchandise or cash",
"per_transaction": "220 gallons, $1,000",
"per_day": "4 fuel transactions, 400 gallons",
"merchants": "Truck stops on our network in the US and Canada"
},
"status": "Active; no lost, stolen or compromise reports"
},
"driver_assignment": [
{
"driver_id": "40217",
"name": "Gary Lindqvist",
"unit_7731": "2024-08-12 to 2026-09-27",
"note": "Left the fleet; removed from the driver list 2026-09-28"
},
{
"driver_id": "40388",
"name": "Luis M. Ortega",
"unit_7731": "Since 2026-09-28",
"note": "Hired 2022-04-11; drove unit 7718 until 2026-09-27; no exceptions in 12 months"
}
],
"unit": {
"unit": "7731",
"vehicle": "2023 Freightliner Cascadia 126, sleeper tractor, Detroit DD15",
"fuel_tanks": "Two 150-gallon tanks (300 gallons)",
"def_tank_gal": 23,
"trailer": "Reefer trailer R-6631, 50-gallon reefer tank",
"typical_fill": "130 to 210 gallons when the tanks are a quarter to a half full",
"ecu_mpg_90_days": 6.6
},
"current_load": {
"load": "Frozen potato products, Nampa, ID to Dallas, TX (new customer lane; first run, picked up 2026-10-01)",
"delivery_appointment": "2026-10-04T19:00:00Z, Dallas, TX",
"route": "I-84, I-80, US-287 through Colorado, Oklahoma and Texas"
},
"history_summary": {
"window": "2026-07-06 to 2026-10-03T16:58:11Z",
"transactions": 49,
"diesel_fills": 25,
"diesel_gallons": 4266.9,
"median_fill_gal": 166.9,
"p90_fill_gal": 202.4,
"largest_fill_gal": 218,
"pumped_minus_ecu_added_gal": {
"median": 1.4,
"min": -7.1,
"max": 6
},
"telematics_miles": 27602,
"ecu_fuel_used_gal": 4342.1,
"spend_usd": 19896.79,
"transactions_by_merchant_brand": {
"FLYING J": 24,
"LOVES": 14,
"TA": 7,
"PILOT": 4
}
},
"legend": {
"products": "Gallons per product at the pump or fuel desk: ULSD = ultra-low-sulfur diesel for the tractor; REEFER = dyed off-road diesel for the trailer's refrigeration unit; DEF = diesel exhaust fluid; OIL = engine oil (quarts); SCALE = certified scale weigh; MERCH = store merchandise",
"card_read": "Magnetic stripe at the pump or the fuel desk; these cards have no chip",
"driver_id": "Driver ID entered at the prompt, checked against the fleet's driver list",
"odometer_telematics": "Engine odometer from the fleet's telematics at the time of the swipe",
"unit_distance_mi": "Distance from the assigned unit's last telematics position to the merchant at the swipe",
"ecu_fuel_pct": "Engine fuel level before the swipe and 20 minutes after the fill completed, from telematics",
"ecu_added_gal": "Gallons the fuel-level change implies (tank capacity times the change); usually within about 6 gallons of the pumped gallons because of sender accuracy and tank slope"
},
"card_transactions": {
"columns": [
"ts",
"merchant",
"pump",
"products",
"diesel_gal",
"… 11 more in legitimate.json"
],
"rows": [
[
"2026-07-07T16:20:18Z",
"FLYING J #0692 TREMONTON UT",
"5",
"ULSD 153.0; DEF 9.7",
153,
"… 11 more in legitimate.json"
],
[
"2026-07-09T16:09:51Z",
"FLYING J #0738 ELLENSBURG WA",
"5 (reefer)",
"REEFER 25.5",
0,
"… 11 more in legitimate.json"
],
[
"2026-07-09T16:19:51Z",
"FLYING J #0738 ELLENSBURG WA",
"9",
"ULSD 143.1",
143.1,
"… 11 more in legitimate.json"
],
[
"2026-07-12T17:16:26Z",
"LOVES #0587 CEDAR CITY UT",
"2 (reefer)",
"REEFER 19.0",
0,
"… 11 more in legitimate.json"
],
[
"2026-07-12T17:26:26Z",
"LOVES #0587 CEDAR CITY UT",
"10",
"ULSD 154.5",
154.5,
"… 11 more in legitimate.json"
],
"… 44 more in legitimate.json"
]
},
"unit_daily_telematics": {
"columns": [
"date",
"duty",
"miles",
"from",
"to",
"… 4 more in legitimate.json"
],
"rows": [
[
"2026-07-06",
"Driving",
342,
"Nampa ID",
"Salt Lake City UT",
"… 4 more in legitimate.json"
],
[
"2026-07-07",
"Driving",
352,
"Salt Lake City UT",
"Nampa ID",
"… 4 more in legitimate.json"
],
[
"2026-07-08",
"Driving",
506,
"Nampa ID",
"Kent WA",
"… 4 more in legitimate.json"
],
[
"2026-07-09",
"Driving",
504,
"Kent WA",
"Nampa ID",
"… 4 more in legitimate.json"
],
[
"2026-07-10",
"Home time, parked at terminal",
0,
"Nampa ID",
"Nampa ID",
"… 4 more in legitimate.json"
],
"… 85 more in legitimate.json"
]
},
"unit_pings_today": {
"columns": [
"ts",
"position",
"speed_mph",
"ignition",
"engine_fuel_level_pct"
],
"rows": [
[
"2026-10-03T13:24:55Z",
"US-287 S toward Boise City OK, 32 mi past Lamar CO",
65,
"On",
55
],
[
"2026-10-03T13:55:08Z",
"US-287 S toward Boise City OK, 63 mi past Lamar CO",
61,
"On",
54
],
[
"2026-10-03T14:25:17Z",
"US-287 S toward Boise City OK, 91 mi past Lamar CO",
56,
"On",
52
],
[
"2026-10-03T14:55:00Z",
"US-287 S toward Amarillo TX, 8 mi past Boise City OK",
59,
"On",
51
],
[
"2026-10-03T15:24:47Z",
"US-287 S toward Amarillo TX, 38 mi past Boise City OK",
58,
"On",
49
],
[
"2026-10-03T15:54:57Z",
"US-287 S toward Amarillo TX, 68 mi past Boise City OK",
61,
"On",
48
],
[
"2026-10-03T16:25:01Z",
"US-287 S toward Amarillo TX, 98 mi past Boise City OK",
59,
"On",
46
]
]
},
"alerts_sent_to_fleet_90_days": {
"columns": [
"ts",
"rule",
"detail",
"fleet_response"
],
"rows": [
[
"2026-07-21T19:02:11Z",
"R-12 Second fuel authorization within 60 minutes",
"Reefer fill then tractor fill at the same truck stop",
"Closed by the fleet: reefer fuel"
],
[
"2026-08-30T16:44:50Z",
"R-22 Odometer entry differs from telematics by more than 500 miles",
"Driver entered the trailer's hubometer",
"Closed by the fleet: driver error"
],
[
"2026-09-28T15:10:02Z",
"Driver list change",
"Driver 40217 removed, 40388 added to unit 7731",
"Made by the fleet"
]
]
},
"merchant_profile": {
"merchant": "LOVES #0519 AMARILLO TX",
"what_it_is": "Truck stop on I-40 at Amarillo, part of a national chain; on our network since 2011",
"last_30_days_on_our_cards": "3,870 transactions; 0.03% confirmed fraud; no skimmer or compromise reports",
"first_use_on_this_card": true
},
"authorization_under_review": {
"ts": "2026-10-03T16:58:11Z",
"merchant": "LOVES #0519 AMARILLO TX",
"pump": "8, diesel lane (satellite on)",
"card_read": "Magnetic stripe",
"products_requested": "ULSD",
"pre_authorization": "220 gallons or $1,000, whichever first",
"prompts": {
"driver_id": "40388: valid, on the fleet's list for this card",
"odometer": "594982 (telematics odometer is 599,482)"
},
"card_today": "Reefer fill of 36.5 gallons at this truck stop 9 minutes ago; store merchandise declined",
"unit_at_swipe": {
"position": "At this truck stop's diesel lanes, 0.0 miles",
"ignition": "Off since 2026-10-03T16:44:59Z",
"eld_status": "Driver 40388 on duty, not driving",
"engine_fuel_level_pct": 45,
"room_in_tanks_gal": 165,
"reefer_unit": "Running, setpoint -10 F, tank 97% after the reefer fill"
},
"rules_fired": [
{
"rule": "R-12 Second fuel authorization within 60 minutes",
"action": "Email the fleet manager"
},
{
"rule": "R-22 Odometer entry differs from telematics by more than 500 miles",
"action": "Flag"
},
{
"rule": "R-30 First use of this card in this state",
"action": "Flag"
},
{
"rule": "R-31 New driver ID on this card in the last 14 days",
"action": "Flag"
}
],
"our_fraud_score": "604 (0 to 999; we decline over 950 without review)"
}
},
"questions": {
"misuse_likelihood": {
"type": "score",
"instructions": "From the fleet card provider's point of view, how likely is it that the fuel authorization under review is misuse, meaning the fuel will not go into a vehicle or reefer unit of this fleet, whether the driver is misusing the card or someone else is using a copied or stolen card?",
"criteria": [
"Very unlikely (under 10%)",
"Unlikely (10-40%)",
"Uncertain (40-60%)",
"Likely (60-90%)",
"Very likely (over 90%)"
]
},
"pattern": {
"type": "choice",
"instructions": "Which best describes who is using the card in the authorization under review, and for what?",
"criteria": {
"legitimate": "Business fuel for this fleet: the card's driver fueling the assigned unit, its trailer's reefer unit or another unit of the same fleet, even if that breaks one of the fleet's own rules",
"driver_personal_use": "The card's driver buying fuel or goods for their own use, such as filling a personal car or pickup",
"fuel_theft_or_resale": "The card's driver, or someone working with them, putting fuel into vehicles or containers outside the fleet, usually to sell it",
"cloned_or_skimmed_card": "Someone other than the driver using a copy of the card made from data stolen at a pump or terminal, while the real card stays with the driver",
"stolen_card": "Someone other than the driver using the physical card after it was lost or taken from the driver or the truck"
}
},
"assigned_unit_at_station": {
"type": "noul",
"instructions": "Is the unit this card is assigned to at the fuel station at the time of the authorization under review, according to its telematics position and ignition and duty status?"
},
"action": {
"type": "choice",
"instructions": "What should the fleet card provider do with the authorization under review?",
"criteria": {
"approve": "Approve it with no follow-up",
"approve_and_alert_manager": "Approve it, and send it to the fleet manager to confirm or dispute within the day",
"decline": "Decline this authorization but leave the card active; the driver can call the fleet's dispatch or our help desk",
"block_card": "Decline it and block the card until the fleet confirms who has it and a replacement is issued"
}
}
}
}The response. Probabilities and confidence are shortened to four decimals here, and the score to three; responses carry full precision.
{
"id": "dec_d0e888dc3f9e4d29a38506cc152da67c",
"model": "grayson-1",
"answers": {
"misuse_likelihood": {
"type": "score",
"score": 0.237,
"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.8607,
"probabilities": {
"0": 0.8886,
"1": 0.0568,
"2": 0.0144,
"3": 0.0099,
"4": 0.0304
}
},
"pattern": {
"type": "choice",
"choice": "legitimate",
"confidence": 0.9216,
"probabilities": {
"legitimate": 0.9373,
"driver_personal_use": 0.0283,
"fuel_theft_or_resale": 0.0056,
"cloned_or_skimmed_card": 0.025,
"stolen_card": 0.0038
}
},
"assigned_unit_at_station": {
"type": "noul",
"noul": 0.9948
},
"action": {
"type": "choice",
"choice": "approve",
"confidence": 0.3118,
"probabilities": {
"approve": 0.4838,
"approve_and_alert_manager": 0.2935,
"decline": 0.0841,
"block_card": 0.1386
}
}
},
"usage": {
"input_tokens": 12151,
"output_tokens": 0
}
}Open in Playground
A second diesel fill on a driver's card, minutes after his own truck was filled. Before 4 a.m. a driver fills his truck to 99% at a Lake City truck stop, then starts a second diesel fill on the next lane. Another truck from his fleet is parked beside him nearly empty, and its card was closed two days ago, so he may be fueling a coworker. But the fleet asked us for no one-time code, and a second fill last month with no fleet truck nearby is still unexplained.
| Question | Grayson's answer |
|---|---|
misuse_likelihood | 2.14 of 4, confidence 29% (Very unlikely 34%, Unlikely 12%, Uncertain 3%, Likely 8%, Very likely 43%) |
pattern | legitimate, confidence 48% |
assigned_unit_at_station | 99% true |
action | block_card, confidence 21% |
10,003 input tokens, $0.00035 per decision, answered in 191 ms.
The request, with long lists cut short. The full request is ambiguous.json (40 KB).
{
"model": "grayson-1",
"state": {
"fleet_account": {
"fleet": "Redbank Ridge Transport LLC, Perry, GA (regional dry van)",
"customer_since": "2020-01-27",
"fleet_size": "22 tractors, 24 cards (driver cards with unit prompts)",
"credit_line_usd": 90000,
"balance_usd": 31877.4,
"payment": "Weekly ACH draft; one returned draft in 2024, made good the next day",
"fleet_manager": "Kendra Pope, operations manager, (478) 555-0158; alerts by email and text",
"after_hours_dispatch": "(478) 555-0190; can request a one-time fuel code from our help desk for a unit without a working card",
"telematics_integration": "Since 2024-05: positions, odometer, engine fuel level and ELD duty status for all 22 tractors",
"fraud_history": "None confirmed"
},
"card": {
"card": "x2291, magnetic stripe, issued 2025-04-08, expires 2028-04",
"type": "Driver card: prompts for driver ID, unit number and odometer at every fuel purchase",
"assigned_driver": "Curtis W. Pruitt, driver ID 2291",
"assigned_unit": "518 (since 2025-04-08)",
"controls": {
"products": "ULSD, DEF and engine oil; no gasoline, reefer fuel, merchandise or cash",
"per_transaction": "180 gallons, $750",
"per_day": "3 fuel transactions, 300 gallons",
"merchants": "Truck stops on our network in the US"
},
"status": "Active; no lost, stolen or compromise reports"
},
"driver": {
"driver_id": "2291",
"name": "Curtis W. Pruitt",
"hired": "2019-06-03",
"home": "Warner Robins, GA; takes home time with the truck at the Perry yard",
"exceptions_in_12_months": "The two R-12 alerts in alerts_sent_to_fleet_90_days"
},
"unit": {
"unit": "518",
"vehicle": "2021 Kenworth T680, sleeper tractor, PACCAR MX-13",
"fuel_tanks": "Two 120-gallon tanks (240 gallons)",
"def_tank_gal": 21,
"typical_fill": "100 to 160 gallons",
"ecu_mpg_90_days": 6.9
},
"current_load": {
"load": "Paper goods, Orlando, FL to Perry, GA (backhaul)",
"route_plan": "Fleet's fuel plan for this load: fill at the Lake City, FL truck stop"
},
"history_summary": {
"window": "2026-07-10 to 2026-10-08T07:53:36Z",
"transactions": 28,
"diesel_fills": 26,
"diesel_gallons": 3586.9,
"median_fill_gal": 140.9,
"p90_fill_gal": 164.9,
"largest_fill_gal": 176.5,
"pumped_minus_ecu_added_gal": {
"median": 0.9,
"min": -9.7,
"max": 74.3
},
"telematics_miles": 21630,
"ecu_fuel_used_gal": 3362.5,
"spend_usd": 13235.01,
"transactions_by_merchant_brand": {
"LOVES": 11,
"PILOT": 10,
"FLYING J": 5,
"TA": 2
}
},
"legend": {
"products": "Gallons per product at the pump or fuel desk: ULSD = ultra-low-sulfur diesel for the tractor; REEFER = dyed off-road diesel for the trailer's refrigeration unit; DEF = diesel exhaust fluid; OIL = engine oil (quarts); SCALE = certified scale weigh; MERCH = store merchandise",
"card_read": "Magnetic stripe at the pump or the fuel desk; these cards have no chip",
"driver_id": "Driver ID entered at the prompt, checked against the fleet's driver list",
"odometer_telematics": "Engine odometer from the fleet's telematics at the time of the swipe",
"unit_distance_mi": "Distance from the assigned unit's last telematics position to the merchant at the swipe",
"ecu_fuel_pct": "Engine fuel level before the swipe and 20 minutes after the fill completed, from telematics",
"ecu_added_gal": "Gallons the fuel-level change implies (tank capacity times the change); usually within about 6 gallons of the pumped gallons because of sender accuracy and tank slope"
},
"card_transactions": {
"columns": [
"ts",
"merchant",
"pump",
"products",
"diesel_gal",
"… 11 more in ambiguous.json"
],
"rows": [
[
"2026-07-10T18:33:18Z",
"TA #0199 WILDWOOD FL",
"3",
"ULSD 137.8",
137.8,
"… 11 more in ambiguous.json"
],
[
"2026-07-13T13:52:43Z",
"PILOT #0098 DALTON GA",
"9",
"ULSD 138.8; DEF 7.7; OIL 2 qt",
138.8,
"… 11 more in ambiguous.json"
],
[
"2026-07-18T14:31:47Z",
"PILOT #0145 CORDELE GA",
"9 (satellite on)",
"ULSD 156.6",
156.6,
"… 11 more in ambiguous.json"
],
[
"2026-07-18T14:48:47Z",
"PILOT #0145 CORDELE GA",
"Fuel desk",
"SCALE",
0,
"… 11 more in ambiguous.json"
],
[
"2026-07-21T14:11:44Z",
"FLYING J #0705 LAKE PARK GA",
"13",
"ULSD 154.8",
154.8,
"… 11 more in ambiguous.json"
],
"… 23 more in ambiguous.json"
]
},
"unit_daily_telematics": {
"columns": [
"date",
"duty",
"miles",
"from",
"to",
"… 4 more in ambiguous.json"
],
"rows": [
[
"2026-07-10",
"Driving",
379,
"Perry GA",
"Orlando FL",
"… 4 more in ambiguous.json"
],
[
"2026-07-11",
"Driving",
384,
"Orlando FL",
"Perry GA",
"… 4 more in ambiguous.json"
],
[
"2026-07-12",
"Driving",
320,
"Perry GA",
"Knoxville TN",
"… 4 more in ambiguous.json"
],
[
"2026-07-13",
"Driving",
323,
"Knoxville TN",
"Perry GA",
"… 4 more in ambiguous.json"
],
[
"2026-07-14",
"Driving",
266,
"Perry GA",
"Jacksonville FL",
"… 4 more in ambiguous.json"
],
"… 86 more in ambiguous.json"
]
},
"alerts_sent_to_fleet_90_days": {
"columns": [
"ts",
"rule",
"detail",
"fleet_response"
],
"rows": [
[
"2026-08-29T14:26:56Z",
"R-12 Second fuel authorization within 60 minutes",
"61.4 gallons at LOVES #0496 DALTON GA, 19 minutes after a 138.0-gallon fill that took unit 518 to 98%; unit 5112 of the same fleet was at the truck stop with 9% fuel",
"Closed by the fleet the next morning: 'Unit 5112 broke a fuel gauge sender and its driver left his card at the yard; dispatch told Curtis to fuel it.'"
],
[
"2026-09-20T16:29:00Z",
"R-12 Second fuel authorization within 60 minutes",
"74.3 gallons at LOVES #0496 DALTON GA, 16 minutes after a 173.7-gallon fill that took unit 518 to 98%; no other unit of the fleet within 5 miles",
"No response; reminder sent three days later, still open"
]
]
},
"unit_pings_tonight": {
"columns": [
"ts",
"position",
"speed_mph",
"ignition",
"engine_fuel_level_pct"
],
"rows": [
[
"2026-10-08T05:08:23Z",
"Florida's Turnpike N toward Wildwood FL, 30 mi past Orlando FL",
61,
"On",
59
],
[
"2026-10-08T05:38:19Z",
"I-75 N toward Ocala FL, 3 mi past Wildwood FL",
61,
"On",
57
],
[
"2026-10-08T06:08:15Z",
"I-75 N toward Lake City FL, 4 mi past Ocala FL",
65,
"On",
55
],
[
"2026-10-08T06:38:26Z",
"I-75 N toward Lake City FL, 36 mi past Ocala FL",
64,
"On",
53
],
[
"2026-10-08T07:08:42Z",
"I-75 N toward Lake City FL, 65 mi past Ocala FL",
59,
"On",
52
]
]
},
"other_fleet_units_at_merchant": [
{
"unit": "5207",
"position": "This truck stop's diesel lanes, 0.03 miles from unit 518, since 2026-10-08T07:21:10Z",
"ignition": "Off",
"engine_fuel_level_pct": 11,
"tanks": "Two 100-gallon tanks (200 gallons)",
"eld_status": "Driver 2318 on duty, not driving",
"card": "x3390 closed 2026-10-06 at the fleet's request (previous driver left); card for the new driver 2318 mailed 2026-10-06, not yet activated; no one-time fuel code requested for 5207",
"last_fill": "2026-10-05, 158.2 gallons at PILOT #0109 WILDWOOD FL on x3390",
"pings_tonight": {
"columns": [
"ts",
"position",
"speed_mph",
"ignition",
"engine_fuel_level_pct"
],
"rows": [
[
"2026-10-08T05:53:04Z",
"I-75 N toward Ocala FL, -30 mi past Wildwood FL",
57,
"On",
18
],
[
"2026-10-08T06:23:21Z",
"I-75 N toward Ocala FL, 1 mi past Wildwood FL",
61,
"On",
15
],
[
"2026-10-08T06:53:17Z",
"I-75 N toward Ocala FL, 29 mi past Wildwood FL",
56,
"On",
13
],
[
"2026-10-08T07:23:15Z",
"I-75 N toward Lake City FL, 28 mi past Ocala FL",
61,
"On",
11
],
[
"2026-10-08T07:53:10Z",
"I-75 N toward Lake City FL, 56 mi past Ocala FL",
56,
"On",
9
]
]
}
}
],
"merchant_profile": {
"merchant": "LOVES #0545 LAKE CITY FL",
"what_it_is": "Truck stop on I-75 at Lake City, part of a national chain; on our network since 2012",
"last_30_days_on_our_cards": "2,410 transactions; 0.04% confirmed fraud; no skimmer or compromise reports",
"pumps": "Diesel lanes 9 to 14 for trucks; pumps 1 to 8 are car lanes with gasoline and auto diesel"
},
"authorization_under_review": {
"ts": "2026-10-08T07:53:36Z",
"merchant": "LOVES #0545 LAKE CITY FL",
"pump": "12, diesel lane (next lane to the one unit 518 used)",
"card_read": "Magnetic stripe",
"products_requested": "ULSD",
"pre_authorization": "180 gallons or $750, whichever first",
"prompts": {
"driver_id": "2291: valid for this card",
"unit": "518: matches the card's assigned unit",
"odometer": "476835 (same as the fill 13 minutes ago; telematics odometer is 476,836)"
},
"card_today": "Filled unit 518 with 117.5 gallons at pump 11, 13 minutes ago",
"unit_at_swipe": {
"position": "At this truck stop's diesel lanes, 0.0 miles",
"ignition": "Off",
"eld_status": "Driver 2291 on duty, not driving",
"engine_fuel_level_pct": "99 (was 46 before the fill)"
},
"limits_after_this": "1 more fuel transaction and 182.5 gallons left today",
"rules_fired": [
{
"rule": "R-12 Second fuel authorization within 60 minutes",
"action": "Email and text the fleet manager"
},
{
"rule": "R-14 Assigned unit's tanks above 90% at the swipe",
"action": "Flag for review"
}
],
"our_fraud_score": "688 (0 to 999; we decline over 950 without review)"
}
},
"questions": {
"misuse_likelihood": {
"type": "score",
"instructions": "From the fleet card provider's point of view, how likely is it that the fuel authorization under review is misuse, meaning the fuel will not go into a vehicle or reefer unit of this fleet, whether the driver is misusing the card or someone else is using a copied or stolen card?",
"criteria": [
"Very unlikely (under 10%)",
"Unlikely (10-40%)",
"Uncertain (40-60%)",
"Likely (60-90%)",
"Very likely (over 90%)"
]
},
"pattern": {
"type": "choice",
"instructions": "Which best describes who is using the card in the authorization under review, and for what?",
"criteria": {
"legitimate": "Business fuel for this fleet: the card's driver fueling the assigned unit, its trailer's reefer unit or another unit of the same fleet, even if that breaks one of the fleet's own rules",
"driver_personal_use": "The card's driver buying fuel or goods for their own use, such as filling a personal car or pickup",
"fuel_theft_or_resale": "The card's driver, or someone working with them, putting fuel into vehicles or containers outside the fleet, usually to sell it",
"cloned_or_skimmed_card": "Someone other than the driver using a copy of the card made from data stolen at a pump or terminal, while the real card stays with the driver",
"stolen_card": "Someone other than the driver using the physical card after it was lost or taken from the driver or the truck"
}
},
"assigned_unit_at_station": {
"type": "noul",
"instructions": "Is the unit this card is assigned to at the fuel station at the time of the authorization under review, according to its telematics position and ignition and duty status?"
},
"action": {
"type": "choice",
"instructions": "What should the fleet card provider do with the authorization under review?",
"criteria": {
"approve": "Approve it with no follow-up",
"approve_and_alert_manager": "Approve it, and send it to the fleet manager to confirm or dispute within the day",
"decline": "Decline this authorization but leave the card active; the driver can call the fleet's dispatch or our help desk",
"block_card": "Decline it and block the card until the fleet confirms who has it and a replacement is issued"
}
}
}
}The response. Probabilities and confidence are shortened to four decimals here, and the score to three; responses carry full precision.
{
"id": "dec_679169b6b73244f1b51af68185fceb67",
"model": "grayson-1",
"answers": {
"misuse_likelihood": {
"type": "score",
"score": 2.143,
"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.2908,
"probabilities": {
"0": 0.3369,
"1": 0.1239,
"2": 0.0313,
"3": 0.0752,
"4": 0.4326
}
},
"pattern": {
"type": "choice",
"choice": "legitimate",
"confidence": 0.4849,
"probabilities": {
"legitimate": 0.5879,
"driver_personal_use": 0.1684,
"fuel_theft_or_resale": 0.1684,
"cloned_or_skimmed_card": 0.0376,
"stolen_card": 0.0376
}
},
"assigned_unit_at_station": {
"type": "noul",
"noul": 0.9903
},
"action": {
"type": "choice",
"choice": "block_card",
"confidence": 0.2053,
"probabilities": {
"approve": 0.1021,
"approve_and_alert_manager": 0.2162,
"decline": 0.2776,
"block_card": 0.404
}
}
},
"usage": {
"input_tokens": 10003,
"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.
actionis the recommendation. Block the card whenblock_cardleads, and sendapprove_and_alert_managerto the fleet's exception queue so the manager confirms or disputes it the same day.patternroutes follow-up: a cloned card goes to your compromise team to find the skimmed station and the other cards used there, and driver personal use or fuel theft goes to the fleet, which handles its own drivers.assigned_unit_at_stationanswers the first question an analyst asks. When it's no and the truck's telematics is reporting, few fills are legitimate.
Call it from your code
Save an example as request.json, such as ambiguous.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
Fleet card controls check the card: a valid driver ID, an allowed product, a gallon limit. A skimmer at the pump captures the driver ID along with the card, and a driver filling a second vehicle stays inside every limit. What gives misuse away is the truck: where it is at the swipe, how full its tanks are, and whether the gallons pumped match the change in its fuel level. Rules on those signals fire on reefer fills, new lanes and odometer typos, so fleet managers learn to ignore them.
What to send
Send the authorization with the card's history and the truck's telematics. The examples send 28 to 49 transactions and 90 days of daily telematics each, in about 10,000 to 12,000 input tokens.
- The unit's position, ignition and duty status at the swipe. A truck parked 1,200 miles away with its engine off rules out the assigned unit.
- Engine fuel level before and after each fill. Gallons pumped that don't show up in the tank went somewhere else.
- The card's fills, with prompts and products. Odometer entries, pumps, reefer and DEF fills and declined merchandise show the driver's routine.
- Who the card belongs to. The driver and unit assignment, recent driver changes and the fleet's other units nearby.
- The card's controls and alerts. Product and gallon limits, rules that fired and how the fleet answered earlier alerts.
- The station. Skimmer reports, compromised-card lists and tonight's activity across your cards.
Add your own policy
Fleets differ on whether a driver may fuel another of their trucks, so put the fleet's policy in the request and Grayson applies it. This one is a fleet's rule that drivers never fuel another unit on their card, and that a second diesel fill into a truck that's already full is declined without blocking the card.
The fleet's cross-fueling rule adds this to the state of the ambiguous example:
{
"fleet_fuel_policy": "Redbank Ridge Transport fuel policy, filed with us 2026-09-30 and applying to all its cards: A driver's card is only for the unit it is assigned to. Drivers may not fuel another unit, even one of ours; when a unit has no working card, dispatch calls your help desk for a one-time fuel code. Decline, but do not block, any second diesel authorization on a card within 2 hours when that card's unit has already filled to over 90% and is still at the station, and text our fleet manager. The driver can call dispatch, and we will request a code if the fill is for one of our units."
}| Question | Without | With the fleet's cross-fueling rule |
|---|---|---|
misuse_likelihood | 2.14 of 4, confidence 29% (Very unlikely 34%, Unlikely 12%, Uncertain 3%, Likely 8%, Very likely 43%) | 3.10 of 4, confidence 54% (Very unlikely 11%, Unlikely 9%, Uncertain 3%, Likely 14%, Very likely 63%) |
pattern | legitimate, confidence 48% | legitimate, confidence 42% |
assigned_unit_at_station | 99% true | Over 99% true |
action | block_card, confidence 21% | decline, confidence 82% |
In the ambiguous example, the driver's truck is already at 99% and a fleet truck without a working card is parked next to him. Without the rule, Grayson's action is split between blocking the card, declining and approving with an alert. Under the fleet's rule the second fill is declined and dispatch requests a one-time fuel code, so the action moves to declining with the card left active, while the other answers barely change.
Where to call it
- At authorization, before the pump is released, when your telematics integration can return the unit's position and fuel level in time.
- After the fill completes, when the pumped gallons and the new fuel level are known, to alert the fleet or block the card before the next swipe.
- On compromise reports, for every card used at a skimmed station, to find the ones already being used somewhere else.
Cost and latency
| Example | Input tokens | Per decision | Per 1,000 decisions | Latency |
|---|---|---|---|---|
| Obvious | 11,667 | $0.00041 | $0.41 | 195 ms |
| Legitimate | 12,151 | $0.00043 | $0.43 | 198 ms |
| Ambiguous | 10,003 | $0.00035 | $0.35 | 191 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/fleet-fuel-card-misuse/questions.json --label misuse_likelihood=<column> --label pattern=<column> --label assigned_unit_at_station=<column> --label action=<column>Each --label names the column with that question's right answer:
misuse_likelihood: a level, such as "Very likely (over 90%)"pattern:legitimate,driver_personal_use,fuel_theft_or_resale,cloned_or_skimmed_card,stolen_cardassigned_unit_at_station:trueorfalseaction:approve,approve_and_alert_manager,decline,block_card
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
What if a fleet doesn't share telematics with us?
Send what you have. The card's own history still shows fills too large for the truck's tanks, fills too close together, odometer entries that don't add up and stations far from the fleet's usual lanes, and the station's compromise reports still apply. Without the unit's position and fuel level, expect more of the probability to sit between legitimate and the misuse patterns, and route more cases to approve_and_alert_manager.
Can it catch a driver who pumps a little extra on every fill?
Yes, if the state shows it. Send the pumped gallons and the engine fuel level change for each fill, as the examples do: a driver who skims 20 gallons a fill shows a steady gap that sensor error doesn't explain, while one large unexplained fill stands out on its own. Fuel-level senders read in whole percent and tanks equalize slowly, so expect a few gallons of difference on honest fills.
Who decides what happens to the driver?
The fleet. Grayson recommends what to do with the authorization and the card; driver personal use and fuel theft go to the fleet manager with the evidence, and the fleet decides about its own driver.
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.
Classify card disputes and detect friendly fraud
Classify unauthorized-transaction claims and choose provisional credit, approval or denial.
Recipes
Every use case, with its questions and cost per decision.
Card disputes
Grayson classifies card disputes as friendly fraud, account takeover or stolen card from authentication, logins and past disputes, and recommends a resolution.
Account security
Who is really in control of an account: takeovers, exposed credentials and employee access to customer accounts. Ready-to-run Grayson recipes with real responses, cost and latency.