Fraud & Fraud AI
Payment Fraud Prevention

Payment Fraud Prevention

For a card payment, the fraud decision is taken before you capture the money. You send the transaction on the decision call with subjectType: "card_payment", and get one of four decisions back:

DecisionWhat you should do
allowProceed with the payment
force_3dStep the transaction up to 3DS — do not let it through without it
reviewSend to human review; do not capture, or hold
blockDecline

force_3d lets you apply friction selectively. Low-risk transactions pass without 3DS, protecting conversion; only risky ones get stepped up. You trigger 3DS with your own provider — we make the decision, your payment integration runs the flow.

The fields you send

The payment object's fields and the risk each one feeds:

FieldFeeds
amountamount thresholds, velocity value, flat-amount clustering
currencymulti-currency thresholds
is3Dauthentication posture — you can write separate rules for non-3DS transactions
country · cardCountrygeography and card-country mismatch
installmentCountinstalment anomalies
methodpayment method
idcard reference — send a PCI-compliant token or fingerprint, never the PAN

All amounts are minor-unit integers (250000 = ₺2,500.00). Full field contract: Decision API.

Card testing

Low-value bursts used to find which cards on a stolen list are still live. Two templates target this pattern directly:

TemplateWhat it measures
tcmb_3_1_2_6_card_txn_velocity_2hTransaction count on the same card within 2 hours
tcmb_3_1_2_14_card_inter_arrivalGap between consecutive transactions on the same card

Add tcmb_3_1_2_10_otp_fail_merchant_1h (OTP failures per merchant in one hour) and brute-force behaviour is caught without touching an amount threshold at all.

Merchant risk indicators

If you are a PSP scoring your own sub-merchants, the TCMB Risk Management Guide section 3.1.2 templates ship ready to use:

TemplateIndicator
tcmb_3_1_2_1_own_turnover_4xVolume exceeding 4× the merchant's own turnover
tcmb_3_1_2_1_sector_turnoverDeviation from the sector average
tcmb_3_1_2_9a/9b/9c_new_merchant_volume_m1/m2/m3Volume spike in a new merchant's first three months
tcmb_3_1_2_3_weekend_ratio_monthlyWeekend transaction ratio
tcmb_3_1_2_4_night_ratio_monthlyNight-time transaction ratio
tcmb_3_1_2_5_flat_ratio_monthlyFlat (round) amount ratio
tcmb_3_1_2_domain_age_lt_90Domain younger than 90 days
tcmb_3_1_2_iban_change_3_in_90dThree IBAN changes in 90 days
tcmb_3_1_2_21_backurl_host_mismatchReturn-URL host mismatch
tcmb_3_1_2_shell_company_ubo_firstpassShell company / UBO first-pass screen

Each returns with the TCMB reason-code prefix, so a rule that fires traces from reasonCodes back to the regulatory clause.

Behavioural signals

Whether the card number was pasted or typed, time spent in the form, tab switching — all are signals you can write rules against. You do the collecting: measure it in your own interface and send it in the decision call's telemetry field. Field names and the silent-drop rule: Behavioural Risk Signals.

What we do not do

⚠️

There is no chargeback prediction field. The response does not return chargebackRisk or chargebackFactors. If you want to use dispute history, bring it in from your own data with the database-lookup node.

  • The response shape is the standard one — decision, score, reasonCodes, flowPath, explainability. There is no { action, recommendation, fraud: { status } } envelope.
  • There is no packaged account-takeover model; you compose new-device, unusual-geography and OTP-failure signals into rules yourself.

Related