- About the IPQS APIs
- Proxy & VPN Detection API
- Email Verification API
- Phone Number Validation API
- Malicious URL Scanner API
- Device Fingerprint API
- Mobile Device Fingerprinting SDK
- Gaming Fraud Detection SDK
- Dark Web Leak API
- Malware File Scanner API
- Request List API
- Fraud Reporting API
- Account Management APIs
- Bulk Validation CSV
- Allowlist Blocklist APIs
- Plugins Platforms Integrations
- IP Reputation Database
- IP Address Abuse Feed
- Email Verification Database
-
Custom Integrations
- Getting Started
- Authentication
- Refresh Secret
- IP & Proxy Checks
- Email Verification Checks
- Phone Number Validity Checks
- Device Tracker
- List Device Trackers
- Device Tracker Statistics
- Login Tokens
- Overview Statistics
- Recent Proxy Statistics
- Recent Email Statistics
- Fraud Reporting
- Retrieve Requests by ID
- Country List API Documentation
- Release Notes
Device Fingerprint on Form Triggers
You can optionally process the Device Fingerprint service to collect additional details after the user has performed an action, such as after submitting an order or purchase form. Our system allows you to provide an element to bind to as part of an onclick or onsubmit trigger. When the user clicks or submits that element, the Device Fingerprint code will execute and gather the form elements you've specified to perform fraud analysis.
<form method="POST" action="/" id="testform" >
<button type="submit" >Submit</button>
</form>
<script type="text/javascript">
var IPQ = {
Callback: function(){
Startup.FormFieldPrepend = 'ipqs_';
Startup.Trigger('#testform'); // or Startup.Trigger('.element') or Startup.Trigger('button');
Startup.Init(); // Tell device tracker to start.
}
};
</script>
The trigger will override the default action of the element's onclick or onsubmit function, perform IPQS fraud analysis and Device Fingerprinting service, and then execute the original action of the element. For example, suppose you bind the trigger to a form's submit button; our Device Fingerprint script will run first. In that case, it will append the results of our fraud scoring to your form and submit it to your server. The example above shows that setting Startup.FormFieldPrepend will prepend a title to all appended form variables.
If you would like to prevent submitting the form immediately, you can use the Startup.AfterResult() function detailed above. When using the Startup.AfterResult() function, the Device Fingerprint will not append the results to your form. If the service is unable to bind to your supplied trigger, the console log will report errors.
Suppose you prefer to execute code before calling the API during a trigger event. In that case, you can optionally supply a callback function as the second parameter on Startup.Trigger(). It will pass the event object, so you can optionally use preventDefault() or call any other function as needed.
<script type="text/javascript">
var IPQ = {
Callback: function(){
Startup.Trigger("#element", function(event){
event.preventDefault();
Startup.Store('OrderID', 34522);
});
Startup.Init(); // Tell device tracker to start.
}
};
</script>
Device Fingerprinting with Transaction Data
The form trigger framework allows you to specify additional fields for order submission and payment processing. These additional fields allow us to better track your users and provide better fraud analysis to prevent transaction fraud. This feature requires you to use the Startup.Trigger() function as shown above. Without using this function, JavaScript will not correctly append data to each request. Accepted fields and values are listed in the table below. If the API cannot locate a specified field, it will report these in the console logs.
<script type="text/javascript">
var IPQ = {
Callback: function(){
Startup.Field('billing_country', '#country'); // or Startup.Field('billing_city', '.city'); EG: Startup.Field('IPQualityScore_Field_Name', 'htmlelement');
Startup.Init(); // Tell device tracker to start.
}
};
</script>
Additional Methods to Pass Data
Instead of binding to a form, it is possible to delay the initial fingerprint processing using Startup.Pause() and later Startup.Resume(). Doing so pre-loads the necessary JavaScript to fingerprint the user but waits until Startup.Resume() has been called to process the request. Therefore, user-inputted data, not available on the initial page load, can be attached to the initial request as in the example below:
var IPQ = {
Callback: function(){
Startup.Pause(); // prevent fingerprint script from loading on page load
Startup.Init(); // Startup the background processor.
Startup.Store('OrderID', '34522'); // any custom tracking variable
Startup.FieldStore('billing_email', 'USEREMAILVALUE'); // any transaction variable
Startup.AfterResult(function(result){
// retrieve data here or use the postback API to lookup by Startup.Store() value.
});
Startup.Resume(); // resumes fingerprint request
}
};
Accepted Order & Transaction Parameters
Below is a list of optionally accepted parameters for order and transaction support, along with a brief description and a listing of their required formatting. All fields are optional and should be passed with Startup.FieldStore().
Note
We recommend using our dedicated Transaction Scoring API for more accurate transaction and user data analysis.
| Key | Description | Expected Values |
|---|---|---|
| billing_first_name | The customer's billing first name. | String |
| billing_last_name | The customer's billing last name. | String |
| billing_company | The customer's billing company. | String |
| billing_country | The customer's billing country name or billing country ISO-Alpha2. (EG: United States or US) | String |
| billing_address_1 | The customer's billing street address part 1. | String |
| billing_address_2 | The customer's billing street address part 2. | String |
| billing_city | The customer's billing city. | String |
| billing_region | The customer's billing region or state. | String |
| billing_postcode | The customer's billing postcode or zipcode. | String / Number |
| billing_email | The customer's billing email address. | String |
| billing_phone | The customer's billing 11 to 14-digit phone number. (If less than 10 digits are provided, our AI will guess the country code.) | Number |
| shipping_first_name | The customer's shipping first name. | String |
| shipping_last_name | The customer's shipping last name. | String |
| shipping_company | The customer's shipping company. | String |
| shipping_country | The customer's shipping country name or shipping country ISO-Alpha2. (EG: United States or US) | String |
| shipping_address_1 | The customer's shipping street address part 1. | String |
| shipping_address_2 | The customer's shipping street address part 2. | String |
| shipping_city | The customer's shipping city. | String |
| shipping_region | The customer's shipping region or state. | String |
| shipping_postcode | The customer's shipping postcode or zipcode. | String / Number |
| shipping_email | The customer's shipping email address. | String |
| shipping_phone | The customer's shipping 11 to 14-digit phone number. (If less than 10 digits are provided, our AI will guess the country code.) | Number |
| username | The customer's username. | String |
| password_hash | For security reasons and following industry best practices, a SHA256 hash of the user's password for better user analysis. | SHA256 / string |
| credit_card_bin | The first six digits of the credit or debit card, referred to as the Bank Identification Number. | Number |
| credit_card_hash | For security reasons and following industry best practices, a SHA256 hash of the credit card number is accepted to check against blocklisted cards. | SHA256 / string |
| credit_card_expiration_month | Two-character format of the credit card's expiration month. For example, May would be "05". | Number |
| credit_card_expiration_year | Two-character format of the credit card's expiration year. For example, 2022 would be "22". | Number |
| avs_code | One-letter Address Verification Service (AVS) response code provided by the credit card processor or bank. | Number |
| cvv_code | One-letter Card Verification Value (CVV2) response code provided by the credit card processor or bank. | Number |
| order_amount | Total balance of the entire order without currency symbols. | Number |
| order_quantity | Quantity of items for this order. | Number |
| recurring | Is this a recurring order that automatically rebills? | boolean |
| recurring_times | If this is a recurring order, how many times has this recurring order rebilled? For example, if this is the third time the user has been billed, please enter this value as "3". If this is the initial recurring order, leave the value as blank or enter "1". | Number |
Caching Failures
You can specify a function to execute after our API fails to return its results correctly. This could be due to them blocking some of our tracking or disabling third-party scripts.
The AfterResult() function offers a high degree of flexibility. You can call it multiple times and pass it a variety of functions. Our library will execute each of them in the order you passed them.
Note
Using the code below before including the script tag on your site will result in errors and failure of your function to fire.
<script type="text/javascript">
var IPQ = {
Callback: function(){
Startup.AfterFailure(function(result){
// Your code here.
});
Startup.Init(); // Start the fraud tracker.
}
};
</script>
Caching Failures
You can specify a function to execute after our API fails to return its results correctly. This could be due to them blocking some of our tracking or disabling third-party scripts.
The AfterResult() function offers a high degree of flexibility. You can call it multiple times and pass it a variety of functions. Our library will execute each of them in the order you passed them.
Note
Using the code below before including the script tag on your site will result in errors and failure of your function to fire.
<script type="text/javascript">
var IPQ = {
Callback: function(){
Startup.AfterFailure(function(result){
// Your code here.
});
Startup.Init(); // Start the fraud tracker.
}
};
</script>