Fraud API

SEON's proprietary API combines our email, phone number, IP, BIN, and AML APIs with device fingerprinting so that you can request and receive our enriched data, rules, and scoring in a single API call.

Good to know

  • The API is fully modular, meaning you can choose to enable or disable each sub-APIs (Email, Phone, IP, or AML) or the device fingerprinting tool. Use the config object to enable or disable modules.
  • You can use the custom_fields object to send almost any custom data point to SEON. Your team can also use custom fields in rules to create a completely custom ruleset.
  • All SEON API requests are case-sensitive. Please follow the formatting below to avoid errors.
  • It's recommended to populate all user name related fields as much as possible (user_fullname, user_firstname, user_middlename, user_lastname

For more context on how to begin your API integration check the Introduction section or our Integration Guide.

 

Request

 

Request Attributes

 TypeRequired
config
 objectno
action_type
 stringno
ip
 stringno
transaction_id
 stringno
affiliate_id
 stringno
affiliate_name
 stringno
order_memo
 stringno
email
 stringno
email_domain
 stringno
payment_id
 stringno
password_hash
 stringno
user_fullname
 stringno
user_name
 stringno
user_firstname
 stringno
user_middlename
 stringno
user_lastname
 stringno
user_pob
 stringno
id_value
  
user_photoid_number
 stringno
user_id
 stringno
user_created
 integerno
user_category
 stringno
user_account_status
 stringno
user_bank_account
 stringno
user_bank_name
 stringno
user_bank_swift
 stringno
user_bank_country
 stringno
user_balance
 floatno
user_verification_level
 stringno
user_dob
 dateno
user_country
 stringno
user_city
 stringno
user_region
 stringno
user_zip
 stringno
user_street
 stringno
user_street2
 stringno
session_id
 stringno
session
 stringno
device_id
 stringno
payment_mode
 stringno
payment_provider
 stringno
card_fullname
 stringno
card_bin
 stringno
card_hash
 stringno
card_expire
 dateno
card_last
 stringno
avs_result
 stringno
cvv_result
 booleanno
status_3d
 stringno
sca_method
 stringno
phone_number
 stringno
transaction_type
 stringno
transaction_amount
 floatno
transaction_currency
 stringno
transaction_long_text 
 stringno
items
 array of objectsno
shipping_country
 stringno
shipping_city
 stringno
shipping_region
 stringno
shipping_zip
 stringno
shipping_street
 stringno
shipping_street2
 stringno
shipping_phone
 stringno
shipping_fullname
 stringno
shipping_method
 stringno
billing_country
 stringno
billing_city
 stringno
billing_region
 stringno
billing_zip
 stringno
billing_street
 stringno
billing_street2
 stringno
billing_phone
 stringno
pos_lat
 floatno
pos_long
 floatno
custom_lat
 floatno
custom_long
 floatno
discount_code
 stringno
gift
 booleanno
gift_message
 booleanno
merchant_category
 stringno
merchant_id
 stringno
merchant_name
 stringno
merchant_created_at
 integerno
merchant_country
 stringno
receiver_fullname
 stringno
receiver_firstname
 stringno
receiver_middlename
 stringno
receiver_lastname
 stringno
receiver_dob
 stringno
receiver_pob
 stringno
receiver_id
 stringno
receiver_country
 stringno
receiver_photoid_number
 stringno
receiver_bank_account
 stringno
receiver_bank_swift
 stringno
receiver_bank_name
 stringno
receiver_bank_country
 stringno
details_url
 stringno
regulation
 stringno
bonus_campaign_id
 stringno
brand_id
 stringno
custom_fields
 objectno

HTTP Endpoint

POST

https://api.seon.io/SeonRestService/fraud-api/v2/
PHP
Ecommerce
Withdrawal

Response

The endpoint returns JSON structured response.

JSON Attributes

 Type
id
 string
state
 string
fraud_score
 number
blackbox_score
 number
ip_details
 object
email_details
 object
bin_details 
 object
phone_details
 object
aml_details
 object
version
 string
applied_rules
 array of objects
device_details
 object
geolocation_details
 object
calculation_time
 integer
seon_id
 integer
rule_category_details
 array of objects
string_analyses
 array of objects
ekyc_result
 string
ekyc_data
 Object
Response
{
    "success": true,
    "error": {},
    "data": {
        "id": "67c2810c2de1",
        "state": "DECLINE",
        "fraud_score": 95.75,
        "blackbox_score": 93.25,
        "bin_details": {
            "card_bin": "414141",
            "bin_bank": "VERMONT NATIONAL BANK",
            "bin_card": "VISA",
            "bin_type": "CREDIT",
            "bin_level": "CLASSIC",
            "bin_country": "UNITED STATES",
            "bin_country_code": "US",
            "bin_website": "www.vermontnationalbank.com",
            "bin_phone": "+1 802 476 0030",
            "bin_valid": true,
            "card_issuer": "VISA"
        },
        "version": "v2",
        "applied_rules": [
            {
                "id": "1000702",
                "name": "Phone possible is equal to true",
                "operation": "+",
                "score": 1.11
            },
            {
                "id": "1000682",
                "name": "has_pep_match is not listed on watchlist2",
                "operation": "+",
                "score": 0.0
            },
            {
                "id": "P106",
                "name": "Customer is using a datacenter ISP",
                "operation": "+",
                "score": 10.0
            },
            {
                "id": "1000715",
                "name": "Temp ARC 2 category specific rule",
                "operation": null,
                "score": 0.0
            },
            {
                "id": "P110",
                "name": "IP address was found on 4 spam blacklists",
                "operation": "+",
                "score": 4.0
            },
            {
                "id": "1000671",
                "name": "has_sanction_match is equal to true",
                "operation": "+",
                "score": 0.0
            },
            {
                "id": "1000687",
                "name": "has_sanction_match is not listed on watchlist2",
                "operation": "+",
                "score": 0.0
            },
            {
                "id": "1000707",
                "name": "Rule C (User category is equal to VIP)",
                "operation": "+",
                "score": 0.0
            },
            {
                "id": "1000718",
                "name": "Domain creation date is greater than 1 month ago",
                "operation": "+",
                "score": 0.0
            },
            {
                "id": "1000670",
                "name": "has_watchlist_match is equal to false",
                "operation": "+",
                "score": 0.0
            },
            {
                "id": "1000696",
                "name": "Phone number valid is equal to true",
                "operation": "+",
                "score": 1.11
            },
            {
                "id": "P112",
                "name": "Customer is using public proxy",
                "operation": "+",
                "score": 10.0
            },
            {
                "id": "1000716",
                "name": "Temp ARC 2",
                "operation": "+",
                "score": 30.0
            },
            {
                "id": "1000713",
                "name": "Temp ARC category specific rule",
                "operation": null,
                "score": 0.0
            },
            {
                "id": "1000699",
                "name": "Phone country is equal to HU",
                "operation": "+",
                "score": 1.11
            },
            {
                "id": "E123",
                "name": "Email is not similar to user full name",
                "operation": "+",
                "score": 1.0
            },
            {
                "id": "1000674",
                "name": "Free email is equal to true",
                "operation": "+",
                "score": 1.11
            },
            {
                "id": "1000680",
                "name": "has_crimelist_match is not listed on watchlist2",
                "operation": "+",
                "score": 0.0
            },
            {
                "id": "PH100",
                "name": "At least 2 online profiles were found",
                "operation": "+",
                "score": 5.2
            },
            {
                "id": "1000666",
                "name": "has_crimelist_match is equal to false",
                "operation": "+",
                "score": 0.0
            },
            {
                "id": "1000706",
                "name": "Rule B (Affiliate full name is equal to Affiliate Two)",
                "operation": "+",
                "score": 0.0
            },
            {
                "id": "1000692",
                "name": "Sanction list match is equal to true",
                "operation": "+",
                "score": 0.0
            },
            {
                "id": "1000705",
                "name": "Rule A (Affiliate ID is equal to a002)",
                "operation": "+",
                "score": 0.0
            },
            {
                "id": "1000685",
                "name": "has_watchlist_match is not listed on watchlist2",
                "operation": "+",
                "score": 0.0
            },
            {
                "id": "1000698",
                "name": "Phone type is equal to Mobile",
                "operation": "+",
                "score": 1.11
            },
            {
                "id": "1000668",
                "name": "has_pep_match is equal to false",
                "operation": "+",
                "score": 0.0
            },
            {
                "id": "1000708",
                "name": "Rule D (User account status is equal to verified)",
                "operation": "+",
                "score": 0.0
            },
            {
                "id": "1000714",
                "name": "ARC User full name is equal to User full name",
                "operation": "+",
                "score": 30.0
            },
            {
                "id": "1000647",
                "name": "Count if Previous Email address similarity is equal to SIMILAR Email for the same Email domain is greater than 0",
                "operation": "+",
                "score": 0.0
            }
        ],
        "device_details": {
            "os": "MacOS",
            "type": "web",
            "dns_ip": null,
            "source": "js-5.8.0",
            "adblock": true,
            "browser": "FIREFOX10",
            "private": true,
            "platform": "MacIntel",
            "font_hash": "09894f345df34ce7ca5b86118ca1bec4",
            "font_list": [],
            "audio_hash": "35.73833039775491",
            "dns_ip_isp": null,
            "font_count": 13,
            "session_id": "90a87abb-91bc-5dc2-96f2-996acb894dd9",
            "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0",
            "webgl_hash": null,
            "webrtc_ips": [ '70.111.37.513', '0.0.0.0'
            ],
            "canvas_hash": "b1f0e02120278dbf75e77cb92980648d",
            "cookie_hash": "b29b21a6ba46b2770bb1737fd6c06c7d",
            "device_hash": "73604e79a0321f57249e82e27273a7a0",
            "device_type": "desktop",
            "plugin_hash": "29b51cf1619fb6943f256c2c6da59432",
            "plugin_list": [
                "PDF Viewer",
                "Chrome PDF Viewer",
                "Chromium PDF Viewer",
                "Microsoft Edge PDF Viewer",
                "WebKit built-in PDF"
            ],
            "window_size": "1600x800",
            "browser_hash": "4c58b2c53ea7489232cddeb897efaf7a",
            "do_not_track": null,
            "java_enabled": false,
            "plugin_count": 5,
            "webgl_vendor": null,
            "webrtc_count": 2,
            "battery_level": 44,
            "device_ip_isp": null,
            "device_memory": null,
            "flash_enabled": false,
            "social_logins": [],
            "touch_support": false,
            "cookie_enabled": true,
            "dns_ip_country": "HU",
            "accept_language": [],
            "browser_version": "102.0",
            "device_location": {
                "zip": "1051",
                "city": "Budapest",
                "region": "HU-BU",
                "status": "SUCCESS",
                "accuracy": 5,
                "latitude": 47.4810949,
                "longitude": 18.9651553,
                "country_code": "HU"
            },
            "region_language": "en-US",
            "region_timezone": "+00:00",
            "battery_charging": null,
            "webrtc_activated": true,
            "device_ip_address": "15.130.507.00",
            "device_ip_country": "HU",
            "screen_resolution": "1600x800",
            "screen_color_depth": 24,
            "screen_pixel_ratio": 1,
            "hardware_concurrency": 2,
            "screen_available_resolution": "1600x800"
        },
        "calculation_time": 2327,
        "seon_id": 12602,
        "ip_details": {
            "ip": "1.1.1.1",
            "country": "AU",
            "state_prov": "Queensland",
            "city": "Brisbane",
            "timezone_offset": "+10:00",
            "isp_name": "APNIC and CloudFlare DNS Resolver Project",
            "latitude": -27.48159,
            "longitude": 153.0175,
            "type": "CDN",
            "open_ports": [
                8080,
                80
            ],
            "tor": false,
            "harmful": true,
            "vpn": false,
            "provider_name": null,
            "data_center_proxy": true,
            "residential_proxy": false,
            "consumer_privacy_network": false,
            "enterprise_private_network": false,
            "search_engine_spider": false,
            "web_proxy": false,
            "public_proxy": false,
            "spam_urls": [
                "zen.spamhaus.org"
            ],
            "score": 3.0,
            "applied_rules": [
                {
                    "id": "P107",
                    "name": "IP address was found on 1 spam blacklist",
                    "operation": "+",
                    "score": 0.0
                },
                {
                    "id": "P102",
                    "name": "Port 80 is open on the IP address",
                    "operation": "+",
                    "score": 1.0
                },
                {
                    "id": "P114",
                    "name": "Customer is using a harmful IP address",
                    "operation": "+",
                    "score": 2.0
                }
            ],
            "spam_number": 1
        },
        "email_details": {
            "id": "67b0f0e5-42df-40d3-b744-5fb510d83cf2",
            "email": "johndoe@seon.io",
            "risk_scores": {
                "global_network_score": 11.26
            },
            "email_details": {
                "deliverable": true,
                "full_inbox": false,
                "valid_format": true,
                "minimum_age_months": 200,
                "earliest_profile_date": "2008-07-01 00:00:00",
                "email_randomness_score": 2.48
            },
            "email_domain_details": {
                "accept_all": false,
                "created": "2015-03-20 12:42:37",
                "custom": true,
                "disposable": false,
                "dmarc_enforced": true,
                "domain": "seon.io",
                "expires": "2025-03-20 12:42:37",
                "free": false,
                "registered": true,
                "registered_to": "Seon Ltd.",
                "registrar_name": "NameCheap, Inc.",
                "spf_strict": true,
                "suspicious_tld": false,
                "tld": "io",
                "updated": "2024-02-24 08:11:02",
                "valid_mx": true,
                "website_exists": true
            },
            "account_aggregates": {
                "total_registration": 39,
                "business": {
                    "total_registration": 14,
                    "technology": {
                        "registered": 11,
                        "checked": 34
                    },
                    "science_and_education": {
                        "registered": 2,
                        "checked": 7
                    },
                    "jobs_and_employment": {
                        "registered": 1,
                        "checked": 4
                    },
                    "money_transfer_remittance": {
                        "registered": 0,
                        "checked": 2
                    }
                },
                "personal": {
                    "total_registration": 25,
                    "email_service": {
                        "registered": 2,
                        "checked": 6
                    },
                    "betting_and_gaming": {
                        "registered": 2,
                        "checked": 6
                    },
                    "dating": {
                        "registered": 2,
                        "checked": 6
                    },
                    "real_estate": {
                        "registered": 2,
                        "checked": 6
                    },
                    "technology": {
                        "registered": 2,
                        "checked": 7
                    },
                    "adult_sites": {
                        "registered": 0,
                        "checked": 2
                    },
                    "delivery": {
                        "registered": 0,
                        "checked": 2
                    },
                    "ecommerce": {
                        "registered": 3,
                        "checked": 16
                    },
                    "entertainment": {
                        "registered": 7,
                        "checked": 28
                    },
                    "ai_platforms": {
                        "registered": 7,
                        "checked": 9
                     },
                     "messenger": {
                        "registered": 1,
                        "checked": 1
                    },
                    "health_and_fitness": {
                        "registered": 2,
                        "checked": 4
                    },
                    "social_media": {
                        "registered": 8,
                        "checked": 21
                    },
                    "travel": {
                        "registered": 1,
                        "checked": 7
                    }
                }
            },
            "seon_fraud_history": {
                "fraudulent_decline_first_seen": 1625384237,
                "fraudulent_decline_last_seen": 1713949826,
                "fraudulent_decline_customer_hits": 2,
                "fraudulent_decline_hits": 2,
                "first_seen": 1584887689,
                "last_seen": 1713949826,
                "customer_hits": 4,
                "hits": 9,
                "flags": []
            },
            "breach_details": {
                "breaches": [
                    {
                        "date": "2018-07-23",
                        "domain": "apollo.io",
                        "name": "Apollo"
                    },
                    {
                        "date": "2019-05-24",
                        "domain": "canva.com",
                        "name": "Canva"
                    },
                    {
                        "date": "2020-09-28",
                        "domain": "gonitro.com",
                        "name": "Nitro"
                    },
                    {
                        "date": "2021-08-01",
                        "domain": "opensubtitles.org",
                        "name": "Open Subtitles"
                    },
                    {
                        "date": "2018-12-13",
                        "domain": "wanelo.com",
                        "name": "Wanelo"
                    }
                ],
                "first_breach": "2018-07-23",
                "last_breach": "2021-08-01", 
                "haveibeenpwned_listed": true,
                "number_of_breaches": 5
            },
            "associated_domain_registrations": {
                "exists": true,
                "number_of_domains": 1,
                "domains": [
                    {
                        "domain_name": "thisisasampledomain.com",
                        "create_date": "2015-08-07 00:00:00",
                        "update_date": "2015-08-07 00:00:00",
                        "expiry_date": "2016-08-07 00:00:00",
                        "registrar_name": "GoDaddy.com, LLC",
                        "full_name": "John Doe",
                        "company_name": "JD Enterprises Ltd",
                        "mailing_address": "472, Doejohn Street",
                        "city_name": "JD City",
                        "state_name": "N/A",
                        "zip_code": "JD1234",
                        "country_code": "JD",
                        "phone_number": "1234556789"
                    }
                ],
                "first_registration_date": "2015-08-07 00:00:00"
            }
        },
        "phone_details": {
            "id": "9c02924f-9fa0-432c-9f0b-9a12873870b7",
            "phone": 36301234567,
            "risk_scores": {
                "global_network_score": 67.62
            },
            "account_aggregates": {
                "total_registration": 12,
                "business": {
                    "total_registration": 5,
                    "technology": {
                        "registered": 2,
                        "checked": 1
                    },
                    "science_and_education": {
                        "registered": 0,
                        "checked": 1
                    },
                    "jobs_and_employment": {
                        "registered": 1,
                        "checked": 0
                    },
                    "money_transfer_remittance": {
                        "registered": 2,
                        "checked": 4
                    }
                },
                "personal": {
                    "total_registration": 7,
                    "email_service": {
                        "registered": 1,
                        "checked": 1
                    },
                    "betting_and_gaming": {
                        "registered": 2,
                        "checked": 6
                    },
                    "dating": {
                        "registered": 2,
                        "checked": 6
                    },
                    "real_estate": {
                        "registered": 2,
                        "checked": 6
                    },
                    "messenger": {
                        "registered": 1,
                        "checked": 3
                    },
                    "technology": {
                        "registered": 0,
                        "checked": 3
                    },
                    "delivery": {
                        "registered": 1,
                        "checked": 1
                    },
                    "ecommerce": {
                        "registered": 2,
                        "checked": 6
                    },
                    "entertainment": {
                        "registered": 0,
                        "checked": 3
                    },
                    "social_media": {
                        "registered": 1,
                        "checked": 9
                    },
                    "travel": {
                        "registered": 1,
                        "checked": 1
                    }
                }
            },
            "seon_fraud_history": {
                "fraudulent_decline_first_seen": 1625384237,
                "fraudulent_decline_last_seen": 1713949826,
                "fraudulent_decline_customer_hits": 2,
                "fraudulent_decline_hits": 2,
                "first_seen": 1584887689,
                "last_seen": 1713949826,
                "customer_hits": 4,
                "hits": 9,
                "flags": []
            },
            "provider_carrier_details": {
                "carrier": "Verizon Ltd",
                "country": "US",
                "disposable": false,
                "phone_is_valid": true,
                "type": "MOBILE"
            },
            "hlr_details": {
                "imsi": "316000000000000",
                "original_carrier": {
                    "carrier": "Verizon Wireless",
                    "carrier_prefix": "212333"
                },
                "ported_carrier": {
                    "carrier": "USA - Landline and Other Carriers",
                    "carrier_prefix": "252271"
                },
                "roaming_carrier": {
                    "carrier": null,
                    "carrier_prefix": null,
                    "carrier_country": null
                },
                "serving_msc": null,
                "status": "delivered"
            },
            "cnam_details": {
                "name": "John Doe"
            }
        },
        "geolocation_details": {
            "user_billing_distance": 15265.747,
            "user_shipping_distance": 15162.088,
            "billing_shipping_distance": 7677.429,
            "ip_user_distance": 10210.516,
            "ip_billing_distance": 12056.986,
            "ip_shipping_distance": 5019.496
        },
        "aml_details": null
    }
}

JavaScript Agent v6

You can integrate our  device fingerprinting module directly into a web app, by using our JavaScript agent. Please, use our CDN hosted script to ensure you always load the latest available version.

Visit the SEON Web SDK GitHub page to see the latest version and its changelog.

  1. Include the JavaScript Agent for example inside the <head> tags of your website or web app. You can also lazy-load it or execute it upon specific actions (e.g. clicking on Login, Payment, and Registration buttons, before calling the API). In this case, you must ensure that the module has been loaded successfully before invoking its methods.
  2. Call the seon.init() function on page load to get more data points for bot detection, behavioral analysis and more accurate intelligence signals.
  3. Call the seon.getSession(config) function to generate the encrypted device  intelligence session.
  4. Send the returned session payload string to your backend and add to the session property in your Fraud API request. The Fraud API call should be still executed if the session is missing, due to a non-executed JS snippet. Tip: Add timeout to JS and utilize Fraud API call after.

All the device fingerprinting data will be available in the response of the Fraud API, and accessible on the Admin Panel of the Transactions Details page.

 

Configuration parameters

To configure the JavaScript module, you need to create a config object and call the seon.getSession(config) function

JSON Attributes

Required
geolocation
no
behavioralDataCollection
no
networkTimeoutMs
no
dnsResolverDomain
no
silentMode
no
referrer
no
windowLocation
no
region
no
fieldTimeoutMs
no
throwOn
no

 

 

Integration

Device Intelligence signals can be triggered by the seon.Session() function. After collecting all the available information, the function returns an encrypted base64 encoded payload. If you would like to use your custom configuration, please include the config object in the function.

Without using the seon.init() on page load you will still receive valid device intelligence signals with most of the functions but it will not contain the behavioral signals. Additionally, the bot detection and browser hash may be less precise.

If your website uses Content Security Policy (CSP) headers, ensure that the following sources are allowed for full functionality, depending on your host configuration:

 

Behavioral features

Calling the seon.init() method will enable behavioral analysis. The user behavior collection is started on the seon.init() call and ends when seon.getSession() is called (behavioral data will be automatically included in the generated session string). Thus the recommended integration pattern is calling init on the form load, and calling getSession on form submit to analyze user behavior during a form fillout. Suspicious behavior is flagged in the suspicious_flags response field, which can contain the following values:

  • suspicious_keypress_characteristics
  • suspicious_mouse_movement
  • suspicious_form_fillout
  • paste_used
  • autofill_used
  • potential_remote_interaction
  • potential_remote_control

By default, user interaction is analyzed on the whole page. If you want to target specific input fields or forms for behavior analysis, you can customize it using the behavioralDataCollection init configuration option:

The targeted elements MUST exist at the time of the init call. Elements that match the selector, but added to the DOM after the init call will NOT be part of the evaluation.

To disable behavioral data collection by the SDK altogether, you must specify an empty string for the targets option:

 

Payload

SEON JavaScript library collects device information and prepares an encrypted payload to use in Fraud API. The information on client side is not readable, we’ll reveal in the Fraud API response and on the Admin Panel. Some fields can be null, if the actual browser does not support or return data for that specific data point. In every other case, data types are preserved. Find a sample payload on the right side.

 

Common issues

  • The session is provided in the Fraud API request, but the device_details is null in the response and there is no device information on the Transaction details page. This means the encrypted payload is corrupted. Please look into your integration and check again.
  • If you use CSP (Content Security Policy) headers on your site, you must allow the following domains in connect-src directive for full functionality based on your host configuration.

    Default: *.seondnsresolve.com
    deviceinf.com: *.deviceinfresolver.com
    seonintelligence.com: *.seonintelligenceresolver.com

    Alternatively you integrate the SDK through NPM. With this method you will have to keep the package updated yourself to include our latest features and bugfixes.

NPM integration

npm install @seontechnologies/seon-javascript-sdk
# or
yarn add @seontechnologies/seon-javascript-sdk

 

Response

JSON Attributes

Type
os
string
vpn
boolean
type
string
proxy
boolean
webgl
object
dns_ip
string
locale
string
source
string
adblock
boolean
battery
object
browser
string
plugins
object
private
boolean
platform
string
referrer
string
timezone
string
device_ip
string
font_hash
string
font_list
array
has_focus
boolean
languages
array
math_hash
string
audio_hash
string
dns_ip_isp
string
extensions
array
font_count
integer
font_noise
boolean
session_id
string
user_agent
string
webrtc_ips
array
canvas_hash
string
cookie_hash
string
device_hash
string
device_type
string
mouse_moved
boolean
permissions
object
price_range
string
screen_data
object
browser_hash
string
do_not_track
boolean
java_enabled
boolean
webrtc_count
integer
device_ip_isp
string
device_memory
integer
dns_ip_region
string
flash_enabled
boolean
media_devices
object
spoofing_hash
string
touch_support
boolean
cookie_enabled
boolean
dns_ip_country
string
mobile_details
array
browser_version
string
device_location
object
drm_key_systems
array
mime_types_hash
string
timezone_offset
string
user_agent_data
object
window_location
string
device_ip_region
string
max_touch_points
integer
suspicious_flags
array
timezone_country
string
webrtc_activated
boolean
device_ip_country
string
system_colors_hash
string
browser_version_age
integer
hardware_concurrency
integer
keyboard_layout_hash
string
keyboard_layout_name
string
unpopular_user_agent
boolean
unpopular_device_resolution
boolean
true_device_id
string

 

<html>
  <head>
    ...
    <script src="[source_url]"></script>
  </head>
  <body>
    ...
  </body>
</html>

 

You can use the following script source URLs ([source_url]):

 

 

 

 

 

 

 

 

 

 

 

 

 

// On page load:
seon.init();

const config = {
  geolocation: {
   canPrompt: false,
  },
  networkTimeoutMs: 2000,
  fieldTimeoutMs: 2000,
  region: 'eu',
  silentMode: true,
};

 

 

 

 

 

 

 

 

 

const session = await seon.getSession(config);
// 'session' variable holds the encrypted device fingerprint that should be sent to SEON

Check out our integration examples:

  • https://stackblitz.com/@dfseon/collections/seon-web-sdk-v6-demos

 

 

// On load
seon.init({
  behavioralDataCollection: {
    targets: 'input[type="text"], .behavior', // querySelector string
    formFilloutDurationTargetId: "myForm", // select form with id 'myForm'
  }
});
// On form submit
await seon.getSession();

 

// Disabling behavioral analysis
seon.init({
  behavioralDataCollection: {
    targets: '', // pass an emtpy string for targets
  }
});

 

Response
"device_details": {
  "device_location": {
      "accuracy": 20,
      "latitude": 47.4379457,
      "longitude": 19.1125038,
      "status": "SUCCESS",
      "zip": "1204",
      "city": "Budapest",
      "region": "HU-BU",
      "country_code": "HU"
  },
  "adblock": false,
  "audio_hash": "124.04346607114712",
  "battery": {
      "battery_charging": true,
      "battery_level": 100
  },
  "browser_hash": "9fc8c3bdc369cdb1bd5c29542eedc092",
  "browser_version_age": 0,
  "browser_version": "134.0.0.0",
  "browser": "CHROME",
  "canvas_hash": "cf06210f828cb8744cb449a843b83305",
  "cookie_enabled": true,
  "cookie_hash": "9831c012f5d3056e2399968b55296f91",
  "device_hash": "c92d19d5c29dbd2834e2281d28b35fd5",
  "device_ip": "188.0.0.0",
  "device_ip_country": "HU",
  "device_ip_isp": "Magyar Telekom",
  "device_ip_region": null,
  "device_memory": 8,
  "device_type": "desktop",
  "do_not_track": null,
  "dns_ip": "141.101.104.187",
  "dns_ip_country": "AT",
  "dns_ip_isp": "CloudFlare Inc",
  "dns_ip_region": null,
  "drm_key_systems": [
      "org.w3.clearkey"
  ],
  "extensions": [],
  "flash_enabled": false,
  "font_count": 17,
  "font_hash": "4160d90df34f64c3683c5b1e54bd7d57",
  "font_list": [
      "monospace",
      "sans-serif",
      "serif",
      "Apple Chancery",
      "Apple Color Emoji",
      "Arial Hebrew",
      "Arial Rounded MT Bold",
      "Arial Unicode MS",
      "Baskerville",
      "Geneva",
      "Gill Sans",
      "Helvetica Neue",
      "Menlo",
      "Monaco",
      "Noto Sans Yi",
      "Palatino",
      "Tahoma"
  ],
  "font_noise": false,
  "hardware_concurrency": 8,
  "has_focus": true,
  "java_enabled": false,
  "keyboard_layout_hash": "eac72b515383ac8b4bbbb232ff6841f1",
  "keyboard_layout_name": "Hungarian",
  "languages": [
      "en-GB",
      "en-US",
      "en"
  ],
  "locale": "en-GB",
  "math_hash": "a931b6543effb809b4abb1ecb36431db",
  "max_touch_points": 0,
  "media_devices": {
      "audio_input_count": 1,
      "audio_output_count": 1,
      "video_input_count": 1
  },
  "mime_types_hash": "12ce62938a9f2e8b926a65dfc687824d",
  "mobile_details": {
      "announced": null,
      "models": [],
      "resolution": null,
      "avg_price_in_eur": null,
      "battery_size_in_mah": null,
      "device_name": null
  },
  "mouse_moved": false,
  "os": "macOS 10.15 Catalina",
  "permissions": {
      "denied": [],
      "granted": [
        "accelerometer",
        "background-fetch",
        "background-sync",
        "geolocation",
        "gyroscope",
        "magnetometer",
        "screen-wake-lock"
      ],
      "prompt": [
        "camera",
        "display-capture",
        "microphone",
        "midi",
        "notifications",
        "persistent-storage"
      ]
  },
  "platform": "MacIntel",
  "plugins": {
      "plugin_count": 5,
      "plugin_hash": "a61464d4341e30d7773ad797e19ea630",
      "plugin_list": [
        "PDF Viewer",
        "Chrome PDF Viewer",
        "Chromium PDF Viewer",
        "Microsoft Edge PDF Viewer",
        "WebKit built-in PDF"
      ]
  },
  "price_range": "medium",
  "proxy": false,
  "referrer": "",
  "screen_data": {
      "device_pixel_ratio": 2.0,
      "document_height": 78,
      "document_width": 1496,
      "is_extended": false,
      "orientation_angle": 0,
      "orientation_type": "landscape-primary",
      "screen_available_height": 869,
      "screen_available_width": 1512,
      "screen_color_depth": 30,
      "screen_height": 982,
      "screen_pixel_depth": 30,
      "screen_width": 1512,
      "window_inner_height": 782,
      "window_inner_width": 1512,
      "window_outer_height": 869,
      "window_outer_width": 1512,
      "window_screen_x": 0,
      "window_screen_y": 38,
      "window_scroll_x": 0,
      "window_scroll_y": 0
  },
  "session_id": "14e671a5f503b0d0d8d978a67de0866b",
  "source": "js-6.5.1",
  "spoofing_hash": "fbdcfe51a27dadafac9ccf8a2e34b9bd",
  "suspicious_flags": [],
  "system_colors_hash": "2a20eb8a0076d38e67fafce18f2c5377",
  "timezone_country": "HU",
  "timezone_offset": "+01:00",
  "timezone": "Europe/Budapest",
  "touch_support": false,
  "type": "web",
  "unpopular_device_resolution": false,
  "unpopular_user_agent": false,
  "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36",
  "user_agent_data": {
      "architecture": "arm",
      "bitness": "64",
      "mobile": false,
      "model": "",
      "platform_version": "15.3.1",
      "platform": "macOS",
      "ua_full_version": "134.0.6998.89"
  },
  "vpn": false,
  "webgl": {
      "webgl2_image_hash": "9e0924fc01f9d18c4f8ea400b2de8bec",
      "webgl2_parameters_hash": "fab638debfcefc10764ac68cd00e18e4",
      "webgl2_parameters_noise": false,
      "webgl_hash": "41f3cabaf3febc32cc1bb223db03867d",
      "webgl_image_hash": "9e0924fc01f9d18c4f8ea400b2de8bec",
      "webgl_parameters_hash": "97ec8905c1226b744a9edbffbc5f4a34",
      "webgl_parameters_noise": false,
      "webgl_renderer": "ANGLE (Apple, ANGLE Metal Renderer: Apple M1 Pro, Unspecified Version)",
      "webgl_vendor": "Google Inc. (Apple)"
  },
  "webrtc_activated": true,
  "webrtc_count": 1,
  "webrtc_ips": [
      "188.0.0.0"
  ],
  "window_location": "https://randomsite.random",
  "true_device_id": "0195943f-b231-7c7c-9586-b3b0cccb039a",
  "private": false
}

iOS SDK

You can integrate our device fingerprinting module directly into iOS mobile apps, by using our SDK found on GitHub. It will collect information based on the user’s software and hardware configuration.

  • The SDK returns an encrypted, base64 encoded string to add in the session property in the Fraud API request. It isn’t permitted to access or modify the payload on the clients.
  • JSON structured device details will be returned in the Fraud API response.
  • Check out the latest version and changelog on the SEON iOS SDK GitHub page.

 

Behaviour Monitoring (Optional)

behaviour Monitoring allows the SEON SDK to be able to detect potentially suspicious user behaviour on the device. The SDK collects data during the session, which is then analyzed to identify potentially fraudulent environments and actions. This feature enhances the SDK’s ability to prevent fraud by detecting various forms of automated or suspicious activity, such as bot usage or device farms.

The monitoring should be started with calling startBehaviourMonitoring wherever you would like to detect suspicious activity in your application and should be stopped with stopBehaviourMonitoring whenever it's reasonable. The returned session string should be then used in a Fraud API request as usual.

Possible suspicious_flags values:

  • "possible_automation": Suggests that automation tools or scripts may be controlling the device.
  • "possible_device_farm": Suggests that the device might be part of a device farm used for fraudulent activities.
  • "possible_vishing": Flags possible vishing (voice phishing) activity, where the user might be coerced into providing sensitive information.

To be continuously improved and extended with new signals

 

Response

JSON Attributes

Type
type
string
source
string
session_id
string
accessories_count
integer
audio_mute_status
boolean
audio_volume_current
integer
battery_charging
boolean
battery_level
integer
can_send_mail
boolean
can_send_text
boolean
cpu_count
integer
cpu_type
string
device_adid
string
device_hash
string
device_name
string
device_orientation
string
device_udid
string
icloud_ubiquity_token
string
ios_device_name
string
ios_version
string
is_biometrics_enabled
boolean
is_emulator
boolean
is_ios_app_on_mac
boolean
is_jailbroken
boolean
is_on_call
boolean
is_passcode_enabled
boolean
is_screen_captured
boolean
kernel_arch
string
kernel_name
string
kernel_version
string
network_config
string
pasteboard_hash
string
physical_memory
unsigned long
region_country
string
region_language
string
region_timezone
string
screen_brightness
integer
screen_height
integer
screen_width
integer
system_uptime
integer
timezone_identifier
string
wifi_mac_address
string
wifi_ssid
string
proxy_address
string
proxy_state
string
vpn_state
string
system_integrity
string
dns_ip
string
dns_ip_country
string
dns_ip_isp
string
device_ip_address
string
device_ip_country
string
device_ip_isp
string
device_location
object
suspicious_flags
array
true_device_id
string

 

Response
"device_details": {
  "accessories_count": 0,
  "audio_mute_status": false,
  "audio_volume_current": 100,
  "battery_charging": false,
  "battery_level": 100,
  "can_send_mail": false,
  "can_send_text": true,
  "cpu_count": 6,
  "cpu_type": "ARM_64E",
  "device_adid": "00000000-0000-0000-0000-000000000000",
  "device_hash": "093c1d6097b2cecef5f97dbb8cdbb1d4a51be619acec724762db475ca0e329bf",
  "device_ip_address": "204.14.77.139",
  "device_ip_country": "DE",
  "device_ip_isp": "Areti Internet LLC",
  "device_ip_region": null,
  "device_name": "iPhone 13",
  "device_orientation": "Portrait",
  "device_udid": "EA832CEA-EFEF-46C9-83DD-30A7A92BCF20",
  "dns_ip": null,
  "dns_ip_country": null,
  "dns_ip_isp": null,
  "icloud_ubiquity_token": null,
  "ios_device_name": "iPhone",
  "ios_version": "16.3",
  "is_biometrics_enabled": false,
  "is_emulator": false,
  "is_ios_app_on_mac": false,
  "is_jailbroken": false,
  "is_on_call": false,
  "is_passcode_enabled": false,
  "is_screen_captured": true,
  "kernel_arch": "arm64",
  "kernel_name": "Darwin",
  "kernel_version": "20D47",
  "network_config": "WIFI",
  "pasteboard_hash": "f46df9a8f5e1c4c1f0e17649a4214e19503569f77991533f1db1747b28523fe5",
  "physical_memory": 3824435200,
  "region_country": "DE",
  "region_language": "en",
  "region_timezone": "",
  "screen_brightness": 5,
  "screen_height": 2532,
  "screen_width": 1170,
  "session_id": "basic_session_id",
  "source": "ios-5.5.2",
  "system_uptime": 23305,
  "timezone_identifier": "GMT",
  "type": "ios",
  "wifi_mac_address": null,
  "wifi_ssid": null,
  "proxy_address": "204.14.77.139:45691",
  "proxy_state": "CONNECTED",
  "vpn_state": "UNKNOWN",
  "suspicious_flags": [],
  "true_device_id": "0194cc25-d791-760e-8ad3-7b3bf9162fde"
}

Android SDK

You can integrate our device fingerprinting module directly into Android mobile apps, by using our SDK found on GitHub. In the repo you will also find more details about the integration like requirements and samples. It will collect information based on the user’s software and hardware configuration.

  • The SDK returns an encrypted, base64 encoded string to add in the session property in the Fraud API request. It isn’t permitted to access or modify the payload on the clients.
  • JSON structured device details will be revealed in the Fraud API response.
  • Check out the latest version and changelog on the SEON Android SDK GitHub page.

Behaviour Monitoring (Optional)

Behaviour Monitoring allows the SEON SDK to be able to detect potentially suspicious user behaviour on the device. The SDK collects data during the session, which is then analyzed to identify potentially fraudulent environments and actions. This feature enhances the SDK’s ability to prevent fraud by detecting various forms of automated or suspicious activity, such as bot usage or device farms.

The monitoring must be started with calling startBehaviourMonitoring wherever you would like to detect suspicious activity in your application and should be stopped with stopBehaviourMonitoring whenever it's reasonable. The returned session string should be then used in a Fraud API request as usual. Note: If you call stopBehaviourMonitoring without startBehaviourMonitoring called previously, the method will exit with BehaviouralMonitoringException thrown.

Possible suspicious_flags values:

  • "possible_automation": Suggests that automation tools or scripts may be controlling the device.
  • "possible_device_farm": Suggests that the device might be part of a device farm used for fraudulent activities.
  • "possible_vishing": Flags possible vishing (voice phishing) activity, where the user might be coerced into providing sensitive information.
  • "possible_ongoing_call": Flags possible ongoing phone call, which could be useful information in case the READ_PHONE_STATE permission wasn't granted for is_on_call field to work. This behaviour based flag does not need any permissions to work, but it's only a best-effort metric.
  • To be continously improved and extended with new signals

 

Response

JSON Attributes

Type
type
string
source
string
session_id
string
android_id
string
android_version
string
app_guid
string
audio_mute_status
boolean
audio_volume_current
integer
battery_charging
boolean
battery_health
string
battery_level
integer
battery_temperature
float
battery_voltage
integer
biometric_status
string
bootloader_state
string
build_device
string
build_id
string
build_manufacturer
string
build_model
string
build_number
string
build_time
integer
carrier_country
string
carrier_name
string
cpu_count
integer
cpu_hash
string
cpu_speed
double
cpu_type
string
developer_options_state
string
device_hash
string
device_cellular_id
string
device_name
string
device_orientation
string
esim_capabilities
object
free_storage
integer
gsf_id
string
has_proximity_sensor
boolean
interfering_apps
array of string
is_click_automator_installed
boolean
is_emulator
boolean
is_keyguard_secure
boolean
is_nfc_available
boolean
is_nfc_enabled
boolean
is_on_call
boolean
is_remote_control_connected
boolean
is_rooted
boolean
is_screen_being_mirrored
boolean
kernel_arch
string
kernel_name
string
kernel_version
string
last_boot_time
integer
network_config
string
pasteboard_hash
string
physical_memory
integer
region_country
string
region_language
string
region_timezone
string
remote_control_provider
string
screen_brightness
integer
screen_height
integer
screen_scale
integer
screen_width
integer
sensor_hash
string
system_uptime
integer
timezone_identifier
string
total_storage
integer
usb_cable_state
string
usb_debugging_state
string
wifi_mac_address
string
wifi_ssid
string
dns_ip
string
dns_ip_country
string
dns_ip_isp
string
device_ip_address
string
device_ip_country
string
device_ip_isp
string
device_location
object
vpn_state
string
proxy_state
string
proxy_address
string
first_api_level
int
power_source
string
suspicious_flags
array
is_app_cloned
boolean
system_integrity
string
true_device_id
string
Response
"device_details": {
  "android_id": "474de2ab2b98b43d",
  "android_version": "33 (13)",
  "app_guid": "07e9f6d2-962d-428e-87c4-38598f885428",
  "audio_mute_status": false,
  "audio_volume_current": 33,
  "battery_charging": true,
  "battery_health": "UNKNOWN",
  "battery_level": 100,
  "battery_temperature": 0.0,
  "battery_voltage": 0,
  "biometric_status": "NOT_ENROLLED",
  "bootloader_state": "BOOTLOADER_STATE_LOCKED",
  "build_device": "motion_phone_arm64",
  "build_id": "TQ2B.230505.005.A1",
  "build_manufacturer": "Genymobile",
  "build_model": "Nexus 10",
  "build_number": "TQ2B.230505.005.A1",
  "build_time": 1728636993,
  "carrier_country": "US",
  "carrier_name": "Android",
  "cpu_count": 4,
  "cpu_hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
  "cpu_speed": -1.0,
  "cpu_type": "arm64-v8a",
  "developer_options_state": "DEV_OPTIONS_DISABLED",
  "device_cellular_id": null,
  "device_hash": "177ac0fb53587176bf19f91c6afbc8671410abf98380a3bf8e4f98060b28e36c",
  "device_ip_address": "80.99.168.164",
  "device_ip_country": "HU",
  "device_ip_isp": "One Hungary Ltd.",
  "device_ip_region": null,
  "device_name": "Genymobile motion_phone_arm64",
  "device_orientation": "Landscape Left",
  "dns_ip_country": null,
  "dns_ip_isp": null,
  "dns_ip": null,
  "free_storage": 13033058304,
  "gsf_id": null,
  "has_proximity_sensor": true,
  "interfering_apps": [],
  "is_click_automator_installed": false,
  "is_emulator": true,
  "is_keyguard_secure": false,
  "is_nfc_available": false,
  "is_nfc_enabled": false,
  "is_on_call": false,
  "is_remote_control_connected": false,
  "is_rooted": false,
  "is_screen_being_mirrored": false,
  "kernel_arch": "aarch64",
  "kernel_name": "Linux",
  "kernel_version": "5.15.94-genymotion-android13-8-00028-gac4940659881-ab110",
  "last_boot_time": 1741610026,
  "network_config": "WIFI",
  "pasteboard_hash": "b98e85f214057e5c1414f4adaf4f8d188c7dfdccc74f7c9fc26852133d7ba14b",
  "physical_memory": 2020548000,
  "region_country": "US",
  "region_language": "en",
  "region_timezone": "+00:00",
  "remote_control_provider": null,
  "screen_brightness": 82,
  "screen_height": 1600,
  "screen_scale": 2,
  "screen_width": 2560,
  "sensor_hash": "22edcbcd35528b5c6706149d37fcd345c207de1383a21781fc1ae13593f78766",
  "session_id": "1ffdce39-8189-4d56-801f-2dfe99aecf24",
  "source": "android-6.6.1",
  "system_uptime": 63,
  "timezone_identifier": "GMT",
  "total_storage": 13228740608,
  "type": "android",
  "usb_cable_state": "UNKNOWN",
  "usb_debugging_state": "USB_DEBUGGING_ENABLED",
  "wifi_mac_address": null,
  "wifi_ssid": "AndroidWifi",
  "first_api_level": 16,
  "power_source": "AC",
  "proxy_address": null,
  "proxy_state": "NOT_CONNECTED",
  "vpn_state": "NOT_CONNECTED",
  "suspicious_flags": [],
  "true_device_id": "019594aa-e9b3-7960-9ef3-cce3cde72589",
  "system_integrity": "COMPROMISED",
  "is_app_cloned": false,
  "device_location": {
      "accuracy": 0,
      "is_simulated": false,
      "latitude": 65.8411099471,
      "longitude": -18.6871085937,
      "status": "SUCCESS",
      "zip": null,
      "city": null,
      "region": "IS-6",
      "country_code": "IS"
  }
}

ekyc endpoints payload examples

eKYC checks return one of the following standardized status values.

Status ValueDefinition
SUCCESSThe source returned a result (for ID-only endpoints), or all provided parameters were matched.
PARTIAL_SUCCESSThe source returned a result, but not all provided parameters matched.
REVIEWThe source returned an inconclusive verdict, indicating that the data falls into a gray area, requires manual intervention, or triggered non-critical warnings.
NO_MATCHThe source successfully executed the search, but no record was found for the core identity data (e.g., only general fields like date of birth or gender matched).
FAILEDThe source explicitly returned a negative verdict, indicating that the identity data actively contradicted their records, or severe negative signals (e.g., fraud) were detected.
FAILED_PROCESSINGThe source could not complete the verification due to a technical error, outage, or invalid input data that prevented the check from running.

 

JSON Attributes

Type
success
boolean
error
object
data
object
data.person
object
data.matches
object
data.additionalData
object
data.additionalMatches
object

BR flag Brazil (BR) 2 checks

Brazil CPF Fetch BR_ID_CPF ID Value

Fetches identity details using a Brazilian CPF.

Required inputs

ID Value

Input guidance

ID Value
AcceptedCPF
Format11 digits, no punctuation
Submit the Cadastro de Pessoas Físicas (CPF) as id_value.

Request


{
  "config": {
    "ekyc": {
      "timeout": 3000,
      "type": "BR_ID_CPF"
    },
    "ekyc_api": true,
    "response_fields": "ekyc_data,ekyc_result"
  },
  "user_id": "usr_1234567890",
  "id_value": "43335747810",
  "user_country": "BR"
}

Response


{
  "ekyc_result": "SUCCESS",
  "ekyc_data": {
    "person": {
      "firstName": null,
      "middleName": null,
      "lastName": null,
      "fullName": "Kleyson Pinheiro",
      "dateOfBirth": "1985-12-31",
      "gender": null,
      "nationalIds": [
        {
          "type": "CPF",
          "value": "43335747810",
          "country": "BR"
        }
      ],
      "phones": [],
      "emails": [],
      "addresses": []
    },
    "matches": {
      "firstName": null,
      "lastName": null,
      "middleName": null,
      "fullName": null,
      "dateOfBirth": null,
      "gender": null,
      "nationalId": null,
      "address": null,
      "street": null,
      "street2": null,
      "city": null,
      "zip": null,
      "region": null,
      "phone": null,
      "email": null
    },
    "additionalData": {
      "registrationStatus": "Regular",
      "isDeceased": false
    },
    "additionalMatches": {}
  }
}
Brazil CPF Fetch - Advance BR_ID_CPF_EXT ID Value

Fetches extended identity details, including relatives, using a Brazilian CPF.

Required inputs

ID Value

Input guidance

ID Value
AcceptedCPF
Format11 digits, no punctuation
Submit the Cadastro de Pessoas Físicas (CPF) as id_value.

Request


{
  "config": {
    "ekyc": {
      "timeout": 3000,
      "type": "BR_ID_CPF_EXT"
    },
    "ekyc_api": true,
    "response_fields": "ekyc_data,ekyc_result"
  },
  "user_id": "usr_1234567890",
  "id_value": "123456789",
  "user_country": "BR"
}

Response


{
  "ekyc_result": "SUCCESS",
  "ekyc_data": {
    "person": {
      "firstName": null,
      "middleName": null,
      "lastName": null,
      "fullName": "Kleyson Pinheiro",
      "dateOfBirth": "1985-12-31",
      "gender": "MALE",
      "nationalIds": [
        {
          "type": "CPF",
          "value": "123456789",
          "country": "BR"
        }
      ],
      "phones": [
        {
          "value": "+15555550123",
          "type": "mobile"
        }
      ],
      "emails": [
        {
          "value": "jane.doe@example.com",
          "type": "personal"
        }
      ],
      "addresses": [
        {
          "line1": "123 Main St",
          "city": "Springfield",
          "state": "ST",
          "postalCode": "00000",
          "country": "XX"
        }
      ]
    },
    "matches": {
      "firstName": null,
      "lastName": null,
      "middleName": null,
      "fullName": null,
      "dateOfBirth": null,
      "gender": null,
      "nationalId": null,
      "address": null,
      "street": null,
      "street2": null,
      "city": null,
      "zip": null,
      "region": null,
      "phone": null,
      "email": null
    },
    "additionalData": {
      "socialName": null,
      "age": "40",
      "motherName": "Maria Aparecida Pinheiro",
      "motherCpf": "123456789",
      "fatherName": "José Carlos Pinheiro",
      "fatherCpf": "123456789",
      "deceased": "false",
      "deathYear": null,
      "deathDate": null,
      "nis": "12345678901",
      "rgNumber": "12.345.678-9",
      "rgState": "RJ",
      "voterIdNumber": "123456789",
      "birthCity": "Volta Redonda",
      "estimatedMonthlyIncome": "5000.00",
      "registrationStatusInRevenueService": "Successful",
      "registrationDateInRevenueService": "2026-01-16",
      "lastRevenueCheckDate": "2025-11-15",
      "pepRole": null,
      "pepTermEnd": null,
      "homonyms": "3",
      "relatives": [
        {
          "name": "Ana Pinheiro",
          "cpf": "111.222.333-44",
          "relationshipType": "SIBLING"
        }
      ],
      "peopleAtSameAddress": [
        {
          "name": "José Carlos Pinheiro",
          "cpf": "098.765.432-10"
        }
      ],
      "companiesAtSameAddress": [],
      "partnerships": [],
      "employers": [
        {
          "cnpj": "12.345.678/0001-90",
          "companyName": "Empresa Exemplo Ltda"
        }
      ],
      "partners": []
    },
    "additionalMatches": {
      "estimatedIncomeConfidenceIndex": true
    }
  }
}

CA flag Canada (CA) 3 checks

Credit Bureau CA_CB_FT 2 response variants First Name · Last Name · Date of Birth · Street · City +2

Verifies identity against Canadian credit-header data to support FINTRAC compliance.

Required inputs

First NameLast NameDate of BirthStreetCityRegionZip Code

Optional inputs

Middle Name

Notes

  • Credit File method (single source): Satisfied when the credit file has been in existence for at least three years, contains information from more than one tradeline, and the name, address, and date of birth all match.
  • Dual-Process method (two sources): Satisfied when two independent tradelines from the credit bureau each confirm a different combination of the person's name, address, date of birth, or account existence. For full FINTRAC guidance, refer to FINTRAC Guide 11 on identity verification (fintrac-canafe.canada.ca).

Request


{
  "config": {
    "ekyc": {
      "timeout": 3000,
      "type": "CA_CB_FT"
    },
    "ekyc_api": true,
    "response_fields": "ekyc_data,ekyc_result"
  },
  "user_id": "usr_1234567890",
  "user_country": "CA",
  "user_firstname": "Diane",
  "user_lastname": "Tremblay",
  "user_dob": "1985-09-22",
  "user_street": "419 rue Saint-Denis",
  "user_city": "Montreal",
  "user_region": "Quebec",
  "user_zip": "H2X 3K7",
  "user_middlename": "Louise"
}

Response variants

? Credit File — Single Source (2+2, FINTRAC Safe Harbour)

Response


{
  "ekyc_result": "SUCCESS",
  "ekyc_data": {
    "person": {
      "firstName": null,
      "middleName": null,
      "lastName": null,
      "fullName": null,
      "dateOfBirth": null,
      "gender": null,
      "nationalIds": [],
      "phones": [],
      "emails": [],
      "addresses": []
    },
    "matches": {
      "firstName": true,
      "lastName": true,
      "middleName": true,
      "fullName": null,
      "dateOfBirth": true,
      "gender": null,
      "nationalId": null,
      "address": null,
      "street": true,
      "street2": null,
      "city": true,
      "zip": true,
      "region": true,
      "phone": null,
      "email": null
    },
    "additionalData": {
      "category": "credit – single source",
      "nameAsReported": "TESTPOTKIDIS,DOMEMIC,,",
      "creditFile3Years": true,
      "addressAsReported": "97,STANLEY,OTTAWA,ON,K1M1N8",
      "dateOfBirthAsReported": "1970-12-12",
      "moreThanOneDistinctSource": true
    },
    "additionalMatches": {}
  }
}
? Tradelines — Dual Source (1+1, FINTRAC Fallback)

Response


{
  "ekyc_result": "SUCCESS",
  "ekyc_data": {
    "person": {
      "firstName": null,
      "middleName": null,
      "lastName": null,
      "fullName": null,
      "dateOfBirth": null,
      "gender": null,
      "nationalIds": [],
      "phones": [],
      "emails": [],
      "addresses": []
    },
    "matches": {
      "firstName": true,
      "lastName": true,
      "middleName": true,
      "fullName": null,
      "dateOfBirth": true,
      "gender": null,
      "nationalId": null,
      "address": null,
      "street": true,
      "street2": null,
      "city": true,
      "zip": true,
      "region": true,
      "phone": null,
      "email": null
    },
    "additionalData": {
      "category": "credit – dual source",
      "trades": {
        "tradeNumber1": {
          "dateOpened": "2023-09-01",
          "accountNumber": "789022239",
          "nameAsReported": "JACKSON,FELIX,,",
          "institutionName": "CIBC",
          "addressAsReported": "18894 ADVENT RD,PITT MEADOWS,BC,V3Y1S1",
          "dateOfBirthAsReported": "1985-03-05"
        },
        "tradeNumber2": {
          "dateOpened": "2022-08-30",
          "accountNumber": "789011139",
          "nameAsReported": "JACKSON,FELIX,,",
          "institutionName": "TDCT TR0522",
          "addressAsReported": "18894 ADVENT RD,PITT MEADOWS,BC,V3Y1S1",
          "dateOfBirthAsReported": "1985-03-05"
        }
      },
      "ageOfTwoTrades_6Months": true,
      "ageOfCreditFile_6Months": true
    },
    "additionalMatches": {}
  }
}
Credit Bureau 2 CA_CB_2 First Name · Last Name · Date of Birth · Street · City +2

Verifies identity against Canadian credit-header data (non-FINTRAC).

Required inputs

First NameLast NameDate of BirthStreetCityRegionZip Code

Optional inputs

Middle NameStreet Line 2

Request


{
  "config": {
    "ekyc": {
      "timeout": 3000,
      "type": "CA_CB_2"
    },
    "ekyc_api": true,
    "response_fields": "ekyc_data,ekyc_result"
  },
  "user_id": "usr_1234567890",
  "user_country": "CA",
  "user_firstname": "ARIEL",
  "user_lastname": "TESTADD",
  "user_dob": "1977-09-09",
  "user_street": "561 MAIN ST",
  "user_city": "SUSSEX",
  "user_region": "NB",
  "user_zip": "E4E7H4",
  "user_middlename": "A",
  "user_street2": ""
}

Response


{
  "ekyc_result": "SUCCESS",
  "ekyc_data": {
    "person": {
      "firstName": null,
      "middleName": null,
      "lastName": null,
      "fullName": null,
      "dateOfBirth": null,
      "gender": null,
      "nationalIds": [],
      "phones": [],
      "emails": [],
      "addresses": []
    },
    "matches": {
      "firstName": true,
      "lastName": true,
      "middleName": true,
      "fullName": null,
      "dateOfBirth": true,
      "gender": null,
      "nationalId": null,
      "address": null,
      "street": true,
      "street2": true,
      "city": true,
      "zip": true,
      "region": true,
      "phone": null,
      "email": null
    },
    "additionalData": {
      "deceasedRecord": false,
      "fraudVictimAlert": false,
      "fraudulentActivityAddress": false,
      "newCreditFile": false,
      "overallFraudRisk": "Low",
      "thinFile": false
    },
    "additionalMatches": {}
  }
}
Residential CA_RC First Name · Last Name · Street · City · Region +2

Verifies identity against Canadian telco and residential sources.

Required inputs

First NameLast NameStreetCityRegionZip CodePhone Number

Optional inputs

Middle NameDate of Birth

Request


{
  "config": {
    "ekyc": {
      "timeout": 3000,
      "type": "CA_RC"
    },
    "ekyc_api": true,
    "response_fields": "ekyc_data,ekyc_result"
  },
  "user_id": "usr_1234567890",
  "user_country": "ca",
  "user_firstname": "latanya",
  "user_lastname": "mamudoski",
  "user_street": "2799 fort campbell blvd",
  "user_city": "portage la prairie",
  "user_region": "mb",
  "user_zip": "r1n3t4",
  "phone_number": "+12040000252",
  "user_middlename": "A",
  "user_dob": "1971 09 09"
}

Response


{
  "ekyc_result": "SUCCESS",
  "ekyc_data": {
    "person": {
      "firstName": null,
      "middleName": null,
      "lastName": null,
      "fullName": null,
      "dateOfBirth": null,
      "gender": null,
      "nationalIds": [],
      "phones": [],
      "emails": [],
      "addresses": []
    },
    "matches": {
      "firstName": true,
      "lastName": true,
      "middleName": true,
      "fullName": null,
      "dateOfBirth": true,
      "gender": null,
      "nationalId": null,
      "address": null,
      "street": true,
      "street2": null,
      "city": true,
      "zip": true,
      "region": true,
      "phone": true,
      "email": null
    },
    "additionalData": {
      "PhoneAccountClass": "PERSONAL",
      "PhoneAccountType": "POSTPAID",
      "PhoneActivationDate": "2019-03-14",
      "PhoneBrandName": "Fido",
      "PhoneCarrierName": "Rogers",
      "PhoneStatus": "ACTIVE",
      "PhoneSubscriberId": "d0ec3b250f47ed5d6fea9e347de56b3a35ced563"
    },
    "additionalMatches": {}
  }
}

CO flag Colombia (CO) 2 checks

Colombian Citizen CO_ID_PPT CO_ID_CC ID Value

Fetches identity details for Colombian citizens from national registries.

Related check types: CO_ID_PPT — use the matching config.ekyc.type for each variant.

Required inputs

ID Value

Input guidance

ID Value
AcceptedCCPPT
FormatDigits only for CC (6-10 chars), alphanumeric for PPT
Submit the Cédula de Ciudadanía (CC) or Permiso por Protección Temporal (PPT) as id_value. NIT is not supported.

Request


{
  "config": {
    "ekyc": {
      "timeout": 3000,
      "type": "CO_ID_CC"
    },
    "ekyc_api": true,
    "response_fields": "ekyc_data,ekyc_result"
  },
  "user_id": "usr_1234567890",
  "id_value": "123456789",
  "user_country": "CO"
}

Response


{
  "ekyc_result": "SUCCESS",
  "ekyc_data": {
    "person": {
      "firstName": "Kleyson",
      "middleName": null,
      "lastName": "Pinheiro",
      "fullName": "Kleyson Pinheiro",
      "dateOfBirth": null,
      "gender": null,
      "nationalIds": {
        "type": "PASSPORT"
      },
      "phones": [],
      "emails": [],
      "addresses": []
    },
    "matches": {
      "firstName": null,
      "lastName": null,
      "middleName": null,
      "fullName": null,
      "dateOfBirth": null,
      "gender": null,
      "nationalId": null,
      "address": null,
      "street": null,
      "street2": null,
      "city": null,
      "zip": null,
      "region": null,
      "phone": null,
      "email": null
    },
    "additionalData": {},
    "additionalMatches": {}
  }
}
Colombian Citizen CO_ID_PPT CO_ID_CC ID Value

Fetches identity details for Colombian citizens from national registries.

Related check types: CO_ID_CC — use the matching config.ekyc.type for each variant.

Required inputs

ID Value

Input guidance

ID Value
AcceptedCCPPT
FormatDigits only for CC (6-10 chars), alphanumeric for PPT
Submit the Cédula de Ciudadanía (CC) or Permiso por Protección Temporal (PPT) as id_value. NIT is not supported.

Request


{
  "config": {
    "ekyc": {
      "timeout": 3000,
      "type": "CO_ID_PPT"
    },
    "ekyc_api": true,
    "response_fields": "ekyc_data,ekyc_result"
  },
  "user_id": "usr_1234567890",
  "id_value": "123456789",
  "user_country": "CO"
}

Response


{
  "ekyc_result": "SUCCESS",
  "ekyc_data": {
    "person": {
      "firstName": "Kleyson",
      "middleName": null,
      "lastName": "Pinheiro",
      "fullName": "Kleyson Pinheiro",
      "dateOfBirth": null,
      "gender": null,
      "nationalIds": {
        "type": "PASSPORT"
      },
      "phones": [],
      "emails": [],
      "addresses": []
    },
    "matches": {
      "firstName": null,
      "lastName": null,
      "middleName": null,
      "fullName": null,
      "dateOfBirth": null,
      "gender": null,
      "nationalId": null,
      "address": null,
      "street": null,
      "street2": null,
      "city": null,
      "zip": null,
      "region": null,
      "phone": null,
      "email": null
    },
    "additionalData": {},
    "additionalMatches": {}
  }
}

MX flag Mexico (MX) 1 check

Mexico CURP Fetch MX_ID_CURP ID Value

Fetches identity details using a Mexican CURP.

Required inputs

ID Value

Input guidance

ID Value
AcceptedCURP
Format18-character alphanumeric
Submit the Clave Única de Registro de Población (CURP) as id_value.

Request


{
  "config": {
    "ekyc": {
      "timeout": 30000,
      "type": "MX_ID_CURP"
    },
    "ekyc_api": true,
    "response_fields": "ekyc_data,ekyc_result"
  },
  "user_id": "usr_test_mx_id_curp",
  "id_value": "GAFA630717HDFRNL07"
}

Response


{
  "ekyc_result": "SUCCESS",
  "ekyc_data": {
    "person": {
      "first_name": "JOSE ALEJANDRO",
      "middle_name": null,
      "last_name": "GARIBAY",
      "full_name": null,
      "date_of_birth": "1963-07-17",
      "gender": null,
      "national_ids": [
        {
          "type": "CURP",
          "value": "GAFA630717HDFRNL07",
          "country": "MX"
        }
      ],
      "phones": [],
      "emails": [],
      "addresses": []
    },
    "matches": {
      "first_name": null,
      "last_name": null,
      "middle_name": null,
      "full_name": null,
      "date_of_birth": null,
      "gender": null,
      "national_id": null,
      "address": null,
      "phone": null,
      "email": null,
      "street": null,
      "street2": null,
      "city": null,
      "zip": null,
      "region": null
    },
    "additional_matches": null,
    "additional_data": {
      "father_last_name": "GARIBAY",
      "mother_last_name": "FUENTES",
      "country_of_birth": "MEXICO",
      "state_of_birth": "DISTRITO FEDERAL",
      "curp_status": "AN",
      "registration_year": "1963",
      "registration_state": "DISTRITO FEDERAL",
      "act_number": ""
    }
  }
}

NG flag Nigeria (NG) 2 checks

Nigeria BVN Verification NG_ID_BVN First Name · Last Name · Middle Name · Date of Birth · Gender +2

Verifies Nigerian Bank Verification Number (BVN) and returns per-field match results.

Required inputs

First NameLast NameMiddle NameDate of BirthGenderPhone NumberID Value

Input guidance

ID Value
AcceptedBVN
Submit the 11-digit Bank Verification Number (BVN) as id_value.

Request


{
  "config": {
    "ekyc": {
      "timeout": 3000,
      "type": "NG_ID_BVN"
    },
    "ekyc_api": true,
    "response_fields": "ekyc_data,ekyc_result"
  },
  "user_id": "usr_1234567890",
  "user_firstname": "abu",
  "user_lastname": "salim",
  "user_middlename": "damu",
  "user_dob": "1968-10-18",
  "user_gender": "male",
  "phone_number": "8079374852",
  "id_value": "123456789",
  "user_country": "NG"
}

Response


{
  "ekyc_result": "SUCCESS",
  "ekyc_data": {
    "person": {
      "firstName": null,
      "middleName": null,
      "lastName": null,
      "fullName": null,
      "dateOfBirth": null,
      "gender": null,
      "nationalIds": [],
      "phones": [],
      "emails": [],
      "addresses": []
    },
    "matches": {
      "firstName": true,
      "lastName": true,
      "middleName": true,
      "fullName": null,
      "dateOfBirth": true,
      "gender": true,
      "nationalId": true,
      "address": null,
      "street": null,
      "street2": null,
      "city": null,
      "zip": null,
      "region": null,
      "phone": true,
      "email": null
    },
    "additionalData": {},
    "additionalMatches": {}
  }
}
Nigeria NIN Verification NG_ID_NIN First Name · Last Name · Date of Birth · Gender · Phone Number +1

Verifies Nigerian National Identification Number (NIN) and returns per-field match results.

Required inputs

First NameLast NameDate of BirthGenderPhone NumberID Value

Optional inputs

Middle Name

Input guidance

ID Value
AcceptedNIN
Submit the 11-digit National Identification Number (NIN) as id_value.

Request


{
  "config": {
    "ekyc": {
      "timeout": 3000,
      "type": "NG_ID_NIN"
    },
    "ekyc_api": true,
    "response_fields": "ekyc_data,ekyc_result"
  },
  "user_id": "usr_1234567890",
  "user_firstname": "Abu",
  "user_lastname": "Salim",
  "user_dob": "1968-10-18",
  "user_gender": "Male",
  "phone_number": "8079374852",
  "id_value": "123456789",
  "user_middlename": "Damu",
  "user_country": "NG"
}

Response


{
  "ekyc_result": "SUCCESS",
  "ekyc_data": {
    "person": {
      "firstName": null,
      "middleName": null,
      "lastName": null,
      "fullName": null,
      "dateOfBirth": null,
      "gender": null,
      "nationalIds": [],
      "phones": [],
      "emails": [],
      "addresses": []
    },
    "matches": {
      "firstName": true,
      "lastName": true,
      "middleName": true,
      "fullName": null,
      "dateOfBirth": true,
      "gender": true,
      "nationalId": true,
      "address": null,
      "street": null,
      "street2": null,
      "city": null,
      "zip": null,
      "region": null,
      "phone": true,
      "email": null
    },
    "additionalData": {},
    "additionalMatches": {}
  }
}

PE flag Peru (PE) 1 check

Identity Verification in Peru PE_ID_DNI ID Value

Fetches identity details for Peruvian citizens from national registries.

Required inputs

ID Value

Input guidance

ID Value
AcceptedDNI
Submit the Documento Nacional de Identidad (DNI) as id_value.

Request


{
  "config": {
    "ekyc": {
      "timeout": 30000,
      "type": "PE_ID_DNI"
    },
    "ekyc_api": true,
    "response_fields": "ekyc_data,ekyc_result"
  },
  "user_id": "usr_test_pe_id_dni",
  "id_value": "1234567"
}

Response


{
  "ekyc_result": "SUCCESS",
  "ekyc_data": {
    "person": {
      "first_name": "JUSTINA",
      "middle_name": null,
      "last_name": "QUISPE DE SOTO",
      "full_name": "JUSTINA QUISPE DE SOTO",
      "date_of_birth": "1947-12-09",
      "gender": "FEMALE",
      "national_ids": [
        {
          "type": "DNI",
          "value": "01234567",
          "country": "PE"
        }
      ],
      "phones": [],
      "emails": [],
      "addresses": [
        {
          "full_address": "PUNO-HUANCANE-COJATA",
          "line1": null,
          "city": null,
          "state": null,
          "postal_code": null,
          "country": "PE"
        }
      ]
    },
    "matches": {
      "first_name": null,
      "last_name": null,
      "middle_name": null,
      "full_name": null,
      "date_of_birth": null,
      "gender": null,
      "national_id": null,
      "address": null,
      "phone": null,
      "email": null,
      "street": null,
      "street2": null,
      "city": null,
      "zip": null,
      "region": null
    },
    "additional_matches": null,
    "additional_data": {
      "marital_status": "Married",
      "data_document_type": "DNI",
      "ubigeo_reniec": "not_available",
      "check_digit": "not_available"
    }
  }
}

GB flag United Kingdom (GB) 3 checks

Citizens UK_SVC First Name · Last Name · Date of Birth · Zip Code

Verifies identity against UK commercial and public sources.

Required inputs

First NameLast NameDate of BirthZip Code

Optional inputs

StreetCityEmail

Request


{
  "config": {
    "ekyc": {
      "timeout": 3000,
      "type": "UK_SVC"
    },
    "ekyc_api": true,
    "response_fields": "ekyc_data,ekyc_result"
  },
  "user_id": "usr_1234567890",
  "user_country": "GB",
  "user_firstname": "Jane",
  "user_lastname": "COMPLETELYFOUND",
  "user_dob": "1967-06-15",
  "user_zip": "AA1 XX0",
  "user_street": "7 Cromhall Close",
  "user_city": "Fareham",
  "email": "DZ3@Email.com"
}

Response


{
  "ekyc_result": "SUCCESS",
  "ekyc_data": {
    "person": {
      "firstName": null,
      "middleName": null,
      "lastName": null,
      "fullName": null,
      "dateOfBirth": null,
      "gender": null,
      "nationalIds": [],
      "phones": [],
      "emails": [],
      "addresses": []
    },
    "matches": {
      "firstName": true,
      "lastName": true,
      "middleName": null,
      "fullName": null,
      "dateOfBirth": true,
      "gender": null,
      "nationalId": null,
      "address": null,
      "street": null,
      "street2": null,
      "city": null,
      "zip": null,
      "region": null,
      "phone": null,
      "email": null
    },
    "additionalData": {},
    "additionalMatches": {}
  }
}
Credit Bureau UK_CB First Name · Last Name · Date of Birth · Street · Zip Code

Verifies identity against UK credit-header data.

Required inputs

First NameLast NameDate of BirthStreetZip Code

Optional inputs

Middle NameCityRegion

Request


{
  "config": {
    "ekyc": {
      "timeout": 3000,
      "type": "UK_CB"
    },
    "ekyc_api": true,
    "response_fields": "ekyc_data,ekyc_result"
  },
  "user_id": "usr_1234567890",
  "user_country": "GB",
  "user_firstname": "Winston",
  "user_lastname": "Churchill",
  "user_dob": "1977-01-01",
  "user_street": "4 Barrow Rise",
  "user_zip": "DT4 9HJ",
  "user_middlename": "A",
  "user_city": "Weymouth",
  "user_region": "Dorset"
}

Response


{
  "ekyc_result": "SUCCESS",
  "ekyc_data": {
    "person": {
      "firstName": null,
      "middleName": null,
      "lastName": null,
      "fullName": null,
      "dateOfBirth": null,
      "gender": null,
      "nationalIds": [],
      "phones": [],
      "emails": [],
      "addresses": []
    },
    "matches": {
      "firstName": true,
      "lastName": true,
      "middleName": true,
      "fullName": null,
      "dateOfBirth": true,
      "gender": null,
      "nationalId": null,
      "address": null,
      "street": true,
      "street2": null,
      "city": true,
      "zip": true,
      "region": true,
      "phone": null,
      "email": null
    },
    "additionalData": {},
    "additionalMatches": {}
  }
}
Residential UK_RC First Name · Last Name · Date of Birth · Street · Street Line 2 +5

Verifies identity against UK residential sources.

Required inputs

First NameLast NameDate of BirthStreetStreet Line 2CityRegionZip CodePhone NumberEmail

Request


{
  "config": {
    "ekyc": {
      "timeout": 30000,
      "type": "UK_RC"
    },
    "ekyc_api": true,
    "response_fields": "ekyc_data,ekyc_result"
  },
  "user_id": "usr_test_uk_rc",
  "user_firstname": "Martin",
  "user_lastname": "Skidmore",
  "user_dob": "1962-04-24",
  "phone_number": "07753640917",
  "email": "martin.skidmore@btconnect.com",
  "user_country": "GB",
  "user_city": "Dingwall",
  "user_region": "Ross-shire",
  "user_zip": "IV7 8HL",
  "user_street": "29 Riverford Crescent",
  "user_street2": "Conon Bridge"
}

Response


{
  "ekyc_result": "SUCCESS",
  "ekyc_data": {
    "person": {
      "first_name": null,
      "middle_name": null,
      "last_name": null,
      "full_name": null,
      "date_of_birth": null,
      "gender": null,
      "national_ids": [],
      "phones": [],
      "emails": [],
      "addresses": []
    },
    "matches": {
      "first_name": true,
      "last_name": true,
      "middle_name": null,
      "full_name": true,
      "date_of_birth": true,
      "gender": null,
      "national_id": null,
      "address": true,
      "phone": true,
      "email": false,
      "street": true,
      "street2": true,
      "city": true,
      "zip": true,
      "region": true
    },
    "additional_matches": null,
    "additional_data": null
  }
}

US flag United States (US) 1 check

Credit Bureau US_CB First Name · Last Name

Verifies identity against US credit-header data.

Required inputs

First NameLast Name

Additional inputs (choose ?2)

Date of BirthStreetCityRegionZip CodeID ValuePhone NumberEmail

Optional inputs

Middle Name

Input guidance

First Name
Required on every request.
Last Name
Required on every request.
ID Value
AcceptedSSNITIN
Submit the customer's Social Security Number (SSN) or Individual Taxpayer Identification Number (ITIN) as id_value.

Notes

  • Mandatory name: Every request must include user_firstname and user_lastname.
  • Additional inputs: Also include at least two fields from the Additional inputs group. ID Value (SSN or ITIN) is one option in that group — it is not required on every request.

Request


{
  "config": {
    "ekyc": {
      "timeout": 30000,
      "type": "US_CB"
    },
    "ekyc_api": true,
    "response_fields": "ekyc_data,ekyc_result"
  },
  "user_id": "usr_test_us_cb",
  "user_firstname": "Michael",
  "user_lastname": "Scudero",
  "user_dob": "1989-06-21",
  "phone_number": "7327680712",
  "email": "hoymike794@gmail.com",
  "user_country": "US",
  "user_city": "Holmdel",
  "user_region": "NJ",
  "user_zip": "07733",
  "user_street": "66 Bethany Road"
}

Response


{
  "ekyc_result": "SUCCESS",
  "ekyc_data": {
    "person": {
      "first_name": null,
      "middle_name": null,
      "last_name": null,
      "full_name": null,
      "date_of_birth": null,
      "gender": null,
      "national_ids": [],
      "phones": [],
      "emails": [],
      "addresses": []
    },
    "matches": {
      "first_name": true,
      "last_name": true,
      "middle_name": null,
      "full_name": true,
      "date_of_birth": true,
      "gender": null,
      "national_id": null,
      "address": true,
      "phone": true,
      "email": true,
      "street": true,
      "street2": null,
      "city": true,
      "zip": true,
      "region": true
    },
    "additional_matches": null,
    "additional_data": null
  }
}

AML payload examples

This section demonstrates different AML screening use cases, including customer screening and payment screening. The examples show recommended configurations and best practices for using search profiles, monitoring, and entity classification.

1. AML Customer Screening (Discouraged for New Implementations)

You can screen a user against sanctions lists, PEPs, crime watchlists and adverse media by configuring data sources and fuzzy-matching settings directly in the API request.

The example request below uses default source and fuzzy settings. All detailed configuration options can be defined via the API.

Recommendation

Although configuration via API is supported, we strongly recommend setting up source, monitoring and fuzzy-matching settings in the Admin UI and referencing them by name in the API request. This approach simplifies maintenance and reduces the risk of misconfiguration.

Example:

{
  "config": {
    "aml": {
      "type": "PERSON",
      "version": "v1",
      "monitoring_required": false,
      "monitoring_schedule": null,
      "sources": {
        "sanction_enabled": true,
        "pep_enabled": true,
        "watchlist_enabled": true,
        "crimelist_enabled": true,
        "adversemedia_enabled": false,
        "local_aml_sources": {
          "brazil_spa": false,
          "bolsa_familia": false,
          "cpf_based_pep": false,
          "cpf_based_ppe": false,
          "cpf_based_ppn": false,
          "seguro_defeso": false,
          "garantia_safra": false,
          "auxilio_emergencial": false,
          "brazil_bpc": false
        }
      },
      "fuzzy_enabled": true,
      "fuzzy_config": {
        "phonetic_search_enabled": false,
        "edit_distance_enabled": true,
        "scoring": {
          "allow_designator_translation": true,
          "edit_distance_1_threshold": 7,
          "edit_distance_2_threshold": 13,
          "enable_lastname_detection": false,
          "filter_mismatching_country": false,
          "filter_mismatching_country_designator": false,
          "filter_mismatching_dob": true,
          "filter_missing_country": false,
          "filter_missing_dob": false,
          "glued_words_splitting": "off",
          "allow_ocr_spellcheck": false,
          "min_nr_token_match": 67,
          "result_limit": 30,
          "score_threshold": 0.585,
          "adverse_media_scores": {
            "fuzziness": 0.5,
            "exact_match": false,
            "force_dob_filter": true,
            "force_country_filter": true
          }
        }
      }
    },
    "ip_api": false,
    "email_api": false,
    "phone_api": false,
    "aml_api": true,
    "response_fields": "aml_details",
    "device_fingerprinting": false
  },
  "user_fullname": "John Doe",
  "user_firstname": "",
  "user_middlename": "",
  "user_lastname": "",
  "user_dob": "",
  "user_pob": "",
  "user_photoid_number": "match",
  "user_id": "aml-deprecated",
  "user_country": ""
}

2. AML Customer Screening (Recommended)

In this approach, source selection, monitoring, and fuzzy-matching settings are configured in the Admin UI and referenced by name  "search_profile_id": "name of the search profile" in the API request.

This allows you to:

  • Update monitoring rules without resending screening requests
  • Maintain consistent screening behavior across integrations

Best Practices

  • Always specify the subject type (person or entity) to reduce false positives.
  • If the type is set to unknown, the system will automatically determine whether the subject is a person or an entity using AI-based classification.

Example

{
  "config": {
    "aml": {
      "type": "PERSON", #or ENTITY or UNKNOWN
      "version": "v1",
      "monitoring_required": false,
      "monitoring_schedule": null,
      "search_profile_id": "sysdefault"
    },
    "ip_api": false,
    "email_api": false,
    "phone_api": false,
    "aml_api": true,
    "response_fields": "aml_details",
    "device_fingerprinting": false
  },
  "user_fullname": "ACME Limited",
  "user_firstname": "",
  "user_middlename": "",
  "user_lastname": "",
  "user_dob": "",
  "user_pob": "",
  "user_photoid_number": "match",
  "user_id": "aml-entity",
  "user_country": ""
}

3. Payment Screening

By including a receiver object, you can screen both parties in a transaction (sender and receiver) in a single API call.

Payment screening allows you to:

  • Screen the sender and the counterparty simultaneously
  • Use separate search profiles for each party if needed

Note

  • Payment screening does not include ongoing monitoring.
  • If monitoring is required, use AML Customer Screening instead.

Example

{
  "config": {
    "aml": {
      "version": "v1",
      "payment_screening": {
        "sender_config": {
          "type": "UNKNOWN",
          "search_profile_id": "sysdefault"
        },
        "receiver_config": {
          "type": "UNKNOWN",
          "search_profile_id": "sysdefault"
        }
      }
    },
    "aml_api": true,
    "aml_bank_screening_api": false,
    "response_fields": "aml_details"
  },
  "user_fullname": "John Doe",
  "user_firstname": "",
  "user_middlename": "",
  "user_lastname": "",
  "user_dob": "",
  "user_pob": "",
  "user_photoid_number": "match",
  "user_id": "",
  "user_country": "",
  "receiver_fullname": "Jane Doe",
  "receiver_firstname": "",
  "receiver_middlename": "",
  "receiver_lastname": "",
  "receiver_dob": "",
  "receiver_pob": "",
  "receiver_photoid_number": "match",
  "receiver_id": "",
  "receiver_country": ""
}

Payment Screening with Bank Details

You can extend payment screening to include bank-level sanctions checks by enabling bank detail screening flags in the API request.

This ensures that transactions are not initiated toward sanctioned banks or financial institutions.

Supported Bank Checks

  • Bank name screening
  • Bank account screening /crypto wallet
  • SWIFT/BIC screening

Example

{
  "config": {
    "aml_bank_screening": {
      "bank_name_check": true,
      "bank_account_check": true,
      "bank_swift_check": true,
      "match_mode": "OR",
      "partial_match_threshold": 0.8,
      "result_limit": 10,
      "filter_mismatching_country": false,
      "filter_missing_country": false
    },
    "aml": {
      "version": "v1",
      "payment_screening": {
        "sender_config": {
          "type": "UNKNOWN",
          "search_profile_id": "sysdefault"
        },
        "receiver_config": {
          "type": "UNKNOWN",
          "search_profile_id": "sysdefault"
        }
      }
    },
    "aml_api": true,
    "aml_bank_screening_api": true,
    "response_fields": "aml_details,aml_bank_screening_details"
  },
  "user_bank_name": "User Bank",
  "user_bank_account": "User Bank Account",
  "user_bank_swift": "User Bank SWIFT",
  "user_bank_country": "country code",
  "user_fullname": "John Doe",
  "user_firstname": "",
  "user_middlename": "",
  "user_lastname": "",
  "user_dob": "",
  "user_pob": "",
  "user_photoid_number": "match",
  "user_id": "",
  "user_country": "",
  "receiver_bank_name": "Receiver Bank",
  "receiver_bank_account": "Receiver Bank Account",
  "receiver_bank_swift": "Receiver Bank SWIFT",
  "receiver_bank_country": "country code",
  "receiver_fullname": "Jane Doe",
  "receiver_firstname": "",
  "receiver_middlename": "",
  "receiver_lastname": "",
  "receiver_dob": "",
  "receiver_pob": "",
  "receiver_photoid_number": "match",
  "receiver_id": "",
  "receiver_country": ""
}

Address Intelligence

The Address Intelligence API turns raw user, billing, and shipping addresses into verified, standardized, fraud-relevant signals inside a single Fraud API v2 call. Each verified address is parsed against postal-authority data, standardized to deliverable form, and converted into a pair of canonical identifiers; US addresses receive additional USPS-level fraud signals. Results are returned inline in address_details and flow into the Scoring Engine, Network Detection, and the Addresses widget.

Good to know

  • No new integration surface. Address Intelligence is part of the Fraud API — there is no separate endpoint, license key, base URL, or rate limit. An existing integration keeps working; you can enable it in the config object.
  • Not enabled by default. Address Intelligence must be switched on for your organization before the config flags take effect. Contact your SEON account manager or support@seon.io to request access.
  • address_api is the master switch. It must be true for any address verification to run. When absent or false, nothing is verified and nothing is billed.
  • Enable per address type. verify_user_address, verify_billing_address, and verify_shipping_address each default to false. Only the types set to true are verified.
  • country and street are mandatory for an address to be verified. An address with no country is not sent to the verification engine — no result is returned for that type and no charge is incurred.
  • Maximum length is 100 characters per address field. Exceeding it rejects the request with a 400 error.
  • address_details must be listed in response_fields to receive results in the response. If it is omitted, verification still runs and results appear in the Addresses widget in SEON Admin, but the address_details object is not returned in the API response.
    • response_fields is an allow-list. When set, only the listed objects are returned — list every object you want alongside address_details (e.g. fraud_score, applied_rules, ip_details, email_details, phone_details).
  • Billing is per verified address, split into US and International counters on the API Stats page. You are not billed when: address_api is false or all verify_*_address flags are false; an address is missing a mandatory input; or verification returns no result (service unavailable / full timeout).
  • PARTIAL and NOT_FOUND addresses do not return canonical IDs. Use the exist / not_exist operators in rules and null-check in code.
  • Non-US addresses return status, precision, canonical IDs, and address_components only — region_specific_details and geocoding are null.

Request

Existing Fraud API integrations do not change the request body. The same six fields per address type are the input; the only addition is a small block in the config object that opts each address type into verification.

Example:

{
    "config": {
        "address_api": true,
        "address": {
            "verify_user_address": true,
            "verify_billing_address": true,
            "verify_shipping_address": true
        },
        "response_fields": "address_details"
    },
    "user_country": "US",
    "user_city": "Austin",
    "user_region": "TX",
    "user_zip": "78702",
    "user_street": "310 Comal Street, 2nd Floor",
    "user_street2": "",
    "shipping_country": "US",
    "shipping_city": "Austin",
    "shipping_region": "TX",
    "shipping_zip": "78702",
    "shipping_street": "310 COMAL ST FL 2",
    "shipping_street2": "",
    "billing_country": "HU",
    "billing_city": "Budapest",
    "billing_region": "",
    "billing_zip": "1072",
    "billing_street": "Rákóczi út 42",
    "billing_street2": "7. emelet",
    "billing_phone": ""
}

Response

When address verification is enabled, the response gains an address_details object inside data. Each address-type slot (user_address, billing_address, shipping_address) contains either a full result object or null when that type's verify_*_address flag was not set.

Response Attributes

 Type
status
 string
precision
 string
canonical_full_id
 string
canonical_base_id
 string
address_components
 object
geocoding
 object
region_specific_details
 object
Response
{
 "success": true,
 "error": {},
 "data": {
  "address_details": {
   "user_address": {
    "canonical_full_id": "310_comal_st_fl_2_austin_tx_78702_4597_us",
    "canonical_base_id": "310_comal_st_austin_tx_78702_us",
    "status": "VERIFIED",
    "precision": "DELIVERY_POINT",
    "address_components": {
     "line_1": "310 Comal St Fl 2",
     "line_2": "Austin TX 78702-4597",
     "country_iso_2": "US",
     "country_iso_3": "USA"
    },
    "geocoding": {
     "latitude": 30.26046,
     "longitude": -97.72786,
     "precision": "ZIP9"
    },
    "region_specific_details": {
     "us": {
      "enhanced_match": [
       "POSTAL_MATCH",
       "UNKNOWN_SECONDARY",
       "IGNORED_INPUT"
      ],
      "delivery_point_barcode": "787024597993",
      "freight_forwarder_match": "NO_MATCH",
      "metadata": {
       "rdi": "COMMERCIAL",
       "record_type": "H",
       "zip_type": "Standard",
       "county_fips": "48453",
       "carrier_route": "C025",
       "congressional_district": "35",
       "elot_sequence": "0215",
       "elot_sort": "A"
      },
      "usps_analysis": {
       "dpv_match_code": "S",
       "dpv_cmra": false,
       "dpv_vacant": false,
       "dpv_no_stat": true,
       "dpv_footnotes": [
        "AA",
        "C1"
       ]
      }
     }
    }
   },
   "billing_address": {
    "canonical_full_id": "42_rákóczi_7_budapest_budapest_1072_hu",
    "canonical_base_id": "42_rákóczi_budapest_budapest_1072_hu",
    "status": "VERIFIED",
    "precision": "DELIVERY_POINT",
    "address_components": {
     "line_1": "Budapest, Rákóczi Út 42 7, Emelet",
     "line_2": "1072",
     "country_iso_2": "HU",
     "country_iso_3": "HUN"
    },
    "geocoding": null,
    "region_specific_details": null
   },
   "shipping_address": {
    "canonical_full_id": "310_comal_st_fl_2_austin_tx_78702_4597_us",
    "canonical_base_id": "310_comal_st_austin_tx_78702_us",
    "status": "VERIFIED",
    "precision": "DELIVERY_POINT",
    "address_components": {
     "line_1": "310 Comal St Fl 2",
     "line_2": "Austin TX 78702-4597",
     "country_iso_2": "US",
     "country_iso_3": "USA"
    },
    "geocoding": {
     "latitude": 30.26046,
     "longitude": -97.72786,
     "precision": "ZIP9"
    },
    "region_specific_details": {
     "us": {
      "enhanced_match": [
       "POSTAL_MATCH",
       "UNKNOWN_SECONDARY"
      ],
      "delivery_point_barcode": "787024597993",
      "freight_forwarder_match": "NO_MATCH",
      "metadata": {
       "rdi": "COMMERCIAL",
       "record_type": "H",
       "zip_type": "Standard",
       "county_fips": "48453",
       "carrier_route": "C025",
       "congressional_district": "35",
       "elot_sequence": "0215",
       "elot_sort": "A"
      },
      "usps_analysis": {
       "dpv_match_code": "S",
       "dpv_cmra": false,
       "dpv_vacant": false,
       "dpv_no_stat": true,
       "dpv_footnotes": [
        "AA",
        "C1"
       ]
      }
     }
    }
   }
  }
 }
}

User Session Monitoring

SEON Session Monitoring connects a user’s full digital journey to fraud decisions. It uses a lightweight client-side SDK to collect session behavior and generates a stream_id. The customer backend sends this stream_id in the Fraud API request, so SEON can link the session to a login, registration, checkout, money movement, account recovery, or other sensitive action.
 

What problem it solves

Most fraud decisions use point-in-time data such as IP, email, phone, device fingerprint, transaction amount, and account history. These signals are important, but they do not show how the user behaved during the session.

  • Session-level behavior can reveal risks that static checks may miss, including:
  • Information was entered by copying and pasting it into form fields.
  • An active phone call occurred during account recovery or payment.
  • Remote access or screen-sharing software was used during the session.
  • Forms were completed unusually quickly or in a bot-like manner.
  • The IP address, VPN, proxy, locale, browser, or device context changed mid-session.
  • Repeated off-screen activity occurred while personal or payment information was being entered.
  • Signs of automation appeared progressively throughout the flow.
  • Behavior appeared unnatural or inconsistent with normal session activity.
  • Signs of automation, remote access, or real-time voice coaching were present.
  • Specific screens and forms were interacted with before the transaction was completed.

Traditional analytics or replay tools may show what happened, but they are often separate from fraud decisioning. Session Monitoring is fraud-native: it connects session behavior directly to Fraud API decisions, Scoring Engine rules, and analyst review.
 

Integration Overview

The integration has two parts.

1. Client-side SDK

The SEON Stream SDK starts session data collection, generates a unique stream_id, and streams behavioral events to SEON in the background.

The SDK can be started on page load, app open, login, registration, checkout, account recovery, or another sensitive entry point.

2. Server-side Fraud API linkage

The customer backend sends the stream_id in the Fraud API request. SEON then links the behavioral session to the transaction.

When linked, SEON can return session-based risk flags in the Fraud API response, make those flags available in the Scoring Engine, and show the full session journey in SEON Admin.

Architecture and data flow

  1. The client application initializes the SEON Stream SDK.
  2. The application starts a session at the chosen entry point.
  3. The SDK generates a unique stream_id.
  4. The SDK streams session events to SEON.
  5. The customer backend receives or retrieves the stream_id from the client.
  6. The backend sends the stream_id in the Fraud API request.
  7. SEON links the session to the transaction.
  8. Fraud API returns session context and risk flags when available.
  9. SEON Admin displays the session summary, timeline, form interactions, and linked transactions.

Important: Initial processing may take a few seconds after a session starts. If the Fraud API request is sent immediately after startStream(), early session signals may be incomplete.

 

SDK integration guide

Web SDK

Supports single-page and multi-page applications with Vanilla JS and React framework.https://github.com/seontechnologies/seon-web-stream-sdk-public

Android SDK

The Android Stream SDK collects events from native Android applications. https://github.com/seontechnologies/seon-android-stream-sdk-public

iOS SDK

The iOS Stream SDK collects events from native iOS applications. 
https://github.com/seontechnologies/seon-ios-stream-sdk-public

 

Authentication

The SDK authenticates with a short lived, server issued token that you need to get separately:

  1. Your backend requests auth data from SEON's auth endpoint (server to server with your own SEON API key).
  2. Your app passes that blob to the SDK via the authData config property before starting a stream.
  3. The SDK decodes it into a JWT and the ingest domains.

Since the token is short lived, fetch a fresh one before every stream start using the endpoint for your account's region:

  • EU (Ireland) https://api.seon.io/session-monitoring-api/v1/auth
  • US (N. Virginia) https://api.us-east-1-main.seon.io/session-monitoring-api/v1/auth

Example flow:

# 1. Your backend serves /auth for the client to call SEON's auth API.
curl -X POST https://api.seon.io/session-monitoring-api/v1/auth \
  -H "X-API-KEY: YOUR_SEON_API_KEY"
// 2. Your client fetches auth data from your backend.
const authData = await fetch("/auth", { method: "POST" }).then((res) =>
  res.text(),
);

// 3. Pass it to the SDK via the constructor…
const seonStream = new SeonStream({ authData });
// …or apply it to an existing instance.
seonStream.setConfig({ authData });

 

Request configuration

Existing Fraud API integrations continue to send the usual transaction, user, device, and risk fields. The required addition for Session Monitoring linkage is the stream_id generated by the SDK.

{
  "config": {
    "session_monitoring_api":true,
    "response_fields": "session_monitoring_details"
  },
  "stream_id": "01HX7M2K9F8Q4YB6T2N4ZP3A1C"
}

When stream_id is present, SEON attempts to match the Fraud API transaction to the streamed session.

When stream_id is missing:

  • No session context is attached.
  • No session risk flags are returned.
  • The transaction appears as a standalone event.
  • The Session Monitoring widget is not populated for that transaction.

Response

JSON Attributes

Type
sdk_platform
string
sdk_version
string
metadata
object
session_risk
object

 

Risk levels

LevelMeaningRecommended handling
HighStrong fraud-relevant signal.Mark for review review, use in high scored decline rules depending on business risk appetite.
MediumMeaningful signal, best combined with other risk indicators.Use for score increase or multi-signal rules.
LowWeak or contextual signal.Use for analyst context, soft scoring, or combined rules.

 

Session risk flags

Automation risk

FlagMeaning
ui_automationStrong signs of scripted or programmatic UI interaction.
device_farmSession may come from device-farm or coordinated automation infrastructure.
suspicious_form_filloutAbnormal form completion speed or unrealistic interaction patterns.
non_human_typingTyping metrics appears unlikely for a human.

Location risk

FlagMeaning
ip_changeIP address changed during the session.
vpnSession used a detected VPN provider.
proxyIP is associated with detected proxy services.
locale_changeDevice language or locale changed during the session.

Contextual risk

FlagMeaning
off_screenApp or browser became inactive during the session.
window_resizeBrowser window size changed.
unusual_device_orientationIrregular device rotation during the session.
extended_inactivityIdle periods were longer than expected.

Remote access risk

FlagMeaning
remote_accessSigns of remote control or screen-sharing activity.
active_callActive phone call during the session.
potential_vishingBehavior is consistent with real-time voice coaching or social engineering.

 

Privacy

Session Monitoring is designed to collect metadata, not sensitive values.

The SDK does not captureThe SDK can capture:
  • Password values.
  • Credit card numbers.
  • Raw text entered into input fields.
  • Clipboard contents.
  • That an input was focused.
  • Characters added or deleted.
  • Typing duration.
  • Paste or copy action type.
  • Backspace count.
  • Time spent editing.
  • Whether the user went off-screen while editing.

This helps fraud teams detect suspicious behavior without capturing or storing sensitive data.

 

SDK and platform support

PlatformRequirements
iOSiOS 13.0 or higher, Xcode 15 or higher, Swift 5.9 or higher.
AndroidAndroid 7.0 or higher, API level 24 or higher.
WebES2023 and native BigInt support. Chrome 67+, Firefox 68+, Safari 14+, Edge 79+. Vanilla JS and React are currently supported.
Response
{
 "success": true,
 "error": {},
 "data": {
  "session_monitoring_details": {
   "sdk_platform": "web",
   "sdk_version": "2.3.1",
   "metadata": {
    "start_time": "1772531452804",
    "end_time": "1772531496591",
    "session_duration": 1532000,
    "page_count": 7,
    "active_time": 982000,
    "idle_time": 310000,
    "off_screen_time": 240000
   },
   "session_risk": {
    "automation_risk": {
     "level": "medium",
     "flags": [
      "non_human_typing"
     ]
    },
    "contextual_risk": {
     "level": "medium",
     "flags": [
      "off_screen"
     ]
    },
    "remote_access_risk": {
     "level": null,
     "flags": []
    },
    "location_risk": {
     "level": "medium",
     "flags": [
      "vpn"
     ]
    }
   }
  }
 }
}