🛡️ Anti-Fraud & Device Fingerprint
Production-ready guidance for merchants integrating A55’s risk signals and device fingerprint to increase approval rates and reduce fraud.
🚀 Overview
A55’s Anti-Fraud layer enriches each payment with behavioral and contextual data, allowing precise risk evaluation before authorization or 3DS.
By sending both device_info and antifraud_info, merchants enable smarter scoring — fewer false declines, lower chargebacks, and a frictionless checkout.
⚙️ 1. How Our Risk Engine Works
Our system evaluates each charge using five core dimensions:
| Category | Description |
|---|---|
| Device signals | Browser, IP, session, fingerprint, screen data |
| Behavioral rules | Retries, rapid value changes, multi-card patterns |
| Payment attributes | BIN, amount, currency, installment count, MCC |
| Customer metadata | Email, phone, address consistency |
| Historical reputation | Prior disputes, allow/deny lists |
Possible outcomes:
risk_approved→ proceeds to authorization (and 3DS if configured)risk_challenge→ triggers extra verification (e.g., 3DS challenge)risk_declined→ blocked before authorization
Goal: Reduce issuer declines and chargebacks while preserving a smooth checkout experience.
🧠 2. Why antifraud_info Matters
antifraud_info MattersThe antifraud_info block provides behavioral and historical context about the buyer and their relationship with the merchant.
This data empowers our models to differentiate trusted customers from high-risk profiles, resulting in:
- ⚡ Higher approval rates for legitimate users
- 🚫 Fewer chargebacks and fraud attempts
- 🤝 Smarter 3DS routing (only when needed)
Recommended Fields
| Field | Description | Example |
|---|---|---|
sales_channel | Purchase origin (web, app, etc.) | "web" |
cardholder_logged_in | Whether the user was logged in | true |
cardholder_since_days | Days since account creation | 365 |
days_since_first_purchase_cardholder | Days since first purchase | 120 |
days_since_last_purchase_cardholder | Days since last purchase | 30 |
card_replacement_count | Number of card changes | 1 |
profile_update_days_count | Days since profile update | 45 |
profile_data_changed | Whether critical data changed | 0 |
profile_field_changed | Flag for field change (email, password, tax_id , other .) | "email" |
purchase_history | Total number of past purchases | 8 |
merchant_customer_since_days | Relationship with merchant (days) | 720 |
days_since_first_purchase_merchant | Days since first merchant purchase | 700 |
days_since_last_purchase_merchant | Days since last merchant purchase | 5 |
Tip: Even partial antifraud_info greatly improves accuracy — send what you have!
🧩 3. Example Payload
{
"merchant_id": "fc2226b9-cd39-4dbe-8314-c03279404049",
"wallet_uuid": "d02995ef-3c17-4816-a81c-af234f840f57",
"type_charge": "credit_card",
"currency": "BRL",
"description": "Order #A55-83921",
"items": [
{
"sku": "CABXIN-HDMI-2M",
"code": "HDMI-2025-001",
"name": "HDMI Cable 2m 4K",
"quantity": 1,
"unit_amount": 129.9,
"total_amount": 129.9
}
],
"payer_name": "John Souza",
"payer_email": "[email protected]",
"payer_tax_id": "38899334821",
"payer_cell_phone": "559999999999",
"payer_address": {
"street": "Av. Paulista",
"address_number": "1578",
"neighborhood": "Bela Vista",
"city": "São Paulo",
"state": "SP",
"postal_code": "01311-000",
"country": "BR"
},
"device_info": {
"device_id": "55d76ee6-faca-4e51-9f0d-5eba8b5f3da2",
"ip_address": "177.92.34.56",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
"http_browser_language": "pt-BR",
"http_browser_screen_width": "1920",
"http_browser_screen_height": "1080",
"http_browser_javascript_enabled": true
},
"antifraud_info": {
"sales_channel": "web",
"cardholder_logged_in": true,
"cardholder_since_days": 365,
"days_since_first_purchase_cardholder": 120,
"days_since_last_purchase_cardholder": 30,
"card_replacement_count": 1,
"profile_update_days_count": 45,
"profile_data_changed": 0,
"profile_field_changed": "email",
"purchase_history": 8,
"merchant_customer_since_days": 720,
"days_since_first_purchase_merchant": 700,
"days_since_last_purchase_merchant": 5
}
}🧭 4. Best Practices
- ✅ Always send
device_info.device_id - ✅ Normalize numeric fields (
daysas integers) - ✅ Send boolean values as
trueorfalse(never strings) - ✅ Use consistent channel naming (
web,app,pos) - ✅ Do not log sensitive fields (email, tax ID) in plain text
- ✅ Test different risk profiles in sandbox
🧰 5. Operational Recommendations
- Include
cardholder_logged_inandcardholder_since_days— they are top predictors of trust. - For marketplaces, use
merchant_customer_since_daysto evaluate buyer–seller relationship. - Update
profile_update_days_countwhenever key customer data changes. - If you maintain your own risk/trust score, include it as a custom key (e.g.
"internal_trust_score": 87).
🔒 6. Security & Compliance
- Transmit all risk data over HTTPS/TLS only.
- Treat antifraud fields as personal data (PII) under LGPD/GDPR.
- Retain data only for fraud prevention purposes.
- Hash or tokenize identifiers in logs.
✅ 7. Checklist Before Go-Live
| Step | Description | Status |
|---|---|---|
Send device_info.device_id in every charge | Improves fingerprint reliability | ☐ |
Populate antifraud_info with normalized data | Reduces false positives | ☐ |
Handle risk outcomes (risk_approved, risk_challenge, risk_declined) | Required for orchestration | ☐ |
| Verify webhook and redirect URLs | Ensures sync of risk + payment | ☐ |
| Test sandbox scenarios | New user / returning user / velocity | ☐ |
🧾 Summary
Integrating device_info and antifraud_info transforms your checkout into a data-driven risk-aware flow.
The result:
- More approvals ⚡
- Fewer chargebacks 🚫
- A seamless customer experience 🤝
📘 Learn more:
For extended documentation and SDK guides, visit: docs.a55.tech
Updated 2 days ago
