Skip to main content

FormDefender for Developers

V
Written by Victor Dong
Updated over a month ago

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"

Did this answer your question?