Introduction
FormDefender is the easiest, fastest, cheapest way to fingerprint users coming to your landing page and determine if they have bad intentions (click fraud, free trial abuse, etc).
It was developed at trykitt.ai because we found our generous FOREVER FREE tier was being abused by growth hackers, and after 6 months of iterative development we managed to reduce fraud by >99%.
Loading the SDK
You can grab the code to load the SDK here:
Initialization
The SDK is initialized like this, passing in the appropriate settings.
KittAI.init();
Events
The SDK triggers events that your code can watch for and act upon.
The following event lets you know that the SDK has loaded and is ready to be initialized. Depending on how you load the SDK in your app, it may fire after the DOM document ready event, so we recommend listening specifically for this event.
KittAI.on('onReady', function(data) {
console.log('Event triggered:', data);
});
Here is a list of all supported events...
Event | Meaning |
onReady | SDK has loaded and is ready to be initialized |
onInitialized | SDK has been initialized. Functions are ready to be called. |
onValidationComplete | Email validation is completed. Contains the email and results as an object |
Functions/Methods
Function | Description |
initialize() | Initializes the library |
getState() | returns all of the security info (proxy detection, bot detection etc) generated by the SDK in a single object. |
validateEmail("[email protected]") | validates a given email |
var result = await KittAI.validateEmail('[email protected]')
console.log(result);
State & Data
In addition to accessing the data directly in the 'onReady' function, you can access the SDK's state and data at any time by calling
const state = KittAI.getState();
In this case, state will make all of the following properties available to you:
| Type | Definition |
isBot | boolean | specifies if a bot/automation framework was detected (eg: selenium, puppeteer, etc) |
isIncognito | boolean | specifies if the browser in question is in incognito mode |
isVariableIP | boolean | true if the ipLocal and ipServer don't match; suggests they are on a VPN or a network with fluid ip use (eg: mobile) |
isProxy | boolean | server side detection of a VPN or other device proxying the request |
ipServer | string | IP address detected server side |
ipLocal | string | specifies if IP address information appears to be manipulated in the client |
clientFingerprint | string | Unique fingerprint combining data collected both in the browser and at the server |
userAgentInfo | object | contains user agent related information (see table below) |
proxyInfo | object | information regarding the detected proxy (provider, connection type, riskScore, etc) |
geoip | object | geographic information related to the IP |
userAgentInfo | object | object containing User Agent related metadata |
initializationElapsedMs | int | time it took to initialize the library in miliseconds |
emailValidationResults | array (objects) | email validation details. each validation request adds on object to this array. |
proxyInfo Properties
| Type | Definition |
type | string | eg: "residential" , "business" |
provider | string | eg: "Comcast Communications" |
organization | string | eg: "Comcast Cable Communications, LLC" |
hostName | string | eg: "c-24-1-169-238.hsd1.il.comcast.net" |
proxy | boolean | whether or not we detected server-side that the request was proxied through a VPN technology, a known VPN provider or a datacenter proxy. |
riskScore | int | scores 0-100 <30 is safe 31-60 is generally okay >60 is risky and becomes exponentially more risky |
geoipInfo Properties
| Type | Definition |
city | string | eg: "Prospect Heights" |
region | string | eg: "IL" |
country | string | eg: "US" |
longitude | string | eg: "42.1097" |
latitude | string | eg: "-87.9399" |
userAgentInfo Properties
User agent info varies greatly. We do our best to cover them all but you should be aware that some fields may return as null.
Field | Type | Definition |
browser | string | eg: "chrome" |
browserVersion | string | eg: "141" |
deviceBrand | string | eg: "apple" |
deviceModel | string | eg: "macintosh" |
deviceType | string | eg: "desktop" |
os | string | eg: "iOS" |
osVersion | string | eg: "17.4" |