- 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
About the Flutter Fingerprinting SDK
The IPQS Mobile Device Fingerprinting SDK protects Flutter apps against sophisticated fraud and abuse from high-level bad actors. IPQS uses a mix of JS device fingerprinting and mobile SDK device fingerprinting to enable your Flutter app to accurately identify fraud and abusive behavior with mobile device fingerprinting techniques. Verify new or returning users and identify high-risk behavior, including:
- Mobile emulators
- Residential botnets
- Location spoofing
- GPS tampering
- Bots
- Non-human requests
- Fake accounts
- Install fraud
- and hijacked devices.
IPQS makes it easy to detect duplicate accounts, bonus abuse, fraudulent users, fake installs, and more.
Downloading The SDK
You can download the flutter SDK from the user dashboard after creating a new mobile app and selecting "Flutter" as the platform.
Usage
Set up and utilize the FraudEngine class and the FraudEngine channel like-so:
// Be sure to import the fraugengine package in your main.dart
import 'package:fraudengine/fraudengine.dart';
...
// Declare and initialize the FraudEngine instance
void main() {
FraudEngine fraudengine = FraudEngine();
fraudengine.setApiKey(
'YOUR_APP_API_KEY',
);
// OPTIONAL / SET TO FALSE BY DEFAULT
fraudengine.setAskLocalNetworkPermission(true);
fraudengine.setAskLocationPermission(true);
fraudengine.setCaptureAdvertisingID(true);
fraudengine.setCheckClipboard(true);
fraudengine.setCustomEndpoint('custom_domain_here');
}
// Be sure to point to the correct channel wherever you intend to utilize the plugin
static const _channel = MethodChannel('fraudengine');
Add Custom Tracking Variables
The following code allows for passing custom tracking variables such as a user ID, transaction ID, click ID, and similar identifiers to associate a mobile device fingerprint request with a specific user or action:
// Pass custom variables to pending request
fraudengine.addCustomVariable("userID", value: "1234");
// then call main mobile fingerprint request which will append the variables above
Set up permissions if needed, false by default
// For location request
fraudengine.setAskLocationPermission(true);
// For local network request
fraudengine.setAskLocalNetworkPermission(true);
// For checking clipboard
fraudengine.setCheckClipboard(true);
// For capturing advertising ID
fraudengine.setCaptureAdvertisingID(true);
Mobile Device Fingerprinting
// Call the mobile fingerprint request
fraudengine.mobileTracker().then((result) => print(result.success)).catchError((error) => print(error);
Email Verification Lookup
// Insert any email you want to test below
fraudengine.verifyEmail("EXAMPLE@EXAMPLE.COM").then((result) => print(result.success)).catcherror((error) => print(error);
IP Address Reputation Lookup
// Inset any IP address to test below
fraudengine.verifyIPAddress("8.8.8.8").then((result) => print(result.success)).catchError((error) => print(error));
Phone Number Verification Lookup
// Insert any phone number to test below
fraudengine.verifyPhone("1234567373").then((result) => print(result.success)).catchError((error) => print(error));
Custom Endpoint
// Get with support to set yours up today
fraudengine.setCustomEndpoint("YOUR_CUSTOM_ENDPOINT");
Setting Up the Flutter SDK
Installation & Setup:
1: Download the Flutter SDK via App Management for your app.
2: Add the fraudengine folder to your project.
3: Add a dependency to your pubspec.yaml :
# in your pubspec.yaml
dependencies:
flutter:
sdk: flutter
fraudengine:
path: path/to/fraudengine
4: For iOS, open the ios/runner/info.plist file.
Add the following to the
<key>LSApplicationQueriesSchemes</key>
<array>
<string>undecimus</string>
<string>cydia</string>
<string>sileo</string>
<string>zbra</string>
<string>filza</string>
<string>activator</string>
</array>
For usage of location data, add this to the same info.plist file:
<key>NSLocationWhenInUseUsageDescription</key>
<string>Your user-facing reasoning for using location information</string>
For Android setup, open or create ./android/local.properties and add:
# note: this will be your app's api key found under app management
ipqsApiKey=YOUR_APP_API_KEY
Add the following to your ./android/app/build.gradle
android {
///
defaultConfig {
///
multiDexEnabled true
}
}
For usage of permissions in Android, add the following to your ./android/app/src/main/AndroidManifest.xml file:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
<uses-permission android:name="android.permission.READ_BASIC_PHONE_STATE"/>
Result Methods
Our SDK offers various result methods and functions to enhance your experience and help prevent fraudulent activity.
| Field | Description | Type |
|---|---|---|
| message | Get the response message string for this request. This usually returns "Success" but can include administrator-level information on why a request failed. | String |
| success | A boolean containing the request's success or failure status. "True" on success, "false" on failure. | Boolean |
| request_id | The unique ID associated with this request. Helpful for debugging and postbacks. | String |
| fraud_score | Number 0 - 100 describing how likely this device is to commit fraud. 0 being not at all, 100 being definitively fraudulent. We suggest blocking users greater than 85. | Float |
| country_code | A two-character country code based on this user's IP address. | String |
| region | A string describing the region this user's IP is from. | String |
| city | A string describing the city this user's IP is from. | String |
| ISP | A string describing the ISP this user's IP belongs to. | String |
| organization | A string describing the Organization to which this user's IP belongs. | String |
| ASN | The ASN assigned to the ISP to which this user's IP belongs. | Integer |
| latitude | The latitude where this user's IP is located. | Float |
| longitude | The longitude where this user's IP is located. | Float |
| is_crawler | Returns "true" if this user's IP is from any of the following search engine crawlers: Baidu, Google, Bing, Yahoo, Yandex, Sogou, Exabot, DuckDuckGo, Facebook, Twitter, Pinterest, Naver, UptimeRobot, AppleBot, ArchiveBot, CoccocBot, YisouBot, PetalBot, ByteDance, and MailRU. | Boolean |
| timezone | Returns the timezone this user's IP is from. | String |
| host | Returns the hostname of this user's IP address. | String |
| proxy | Returns "true" if this user's IP is a known proxy. | Boolean |
| vpn | Returns "true" if this user's IP is a known VPN. | Boolean |
| tor | Returns "true" if this user's IP is a known or suspected TOR node. | Boolean |
| recent_abuse | Returns "true" if this user's IP has been reported for being abusive recently or if this device has been seen performing abusive actions. | Boolean |
| bot_status | Returns "true" if this user's IP has been reported for botting or if this device has been seen performing bot-like actions. | Boolean |
| connection_type | Classification of the IP address connection type as "Residential", "Corporate", "Education", "Mobile", or "Data Center". | String |
| device_suspicious | Returns "true" if this device has suspicious properties or has been seen performing suspicious activities recently. | Boolean |
| device_emulated | Returns "true" if this device has been emulated or appears to have been emulated. | Boolean |
| device_id | A unique identifier for this device. | String |
Retrieve Results
Note
Before using either of these methods, make sure your initial API request passed a valid userID value (or any variable of your choice) using the addCustomVariable function. The variable name must be set on your custom tracking variables.
Postback Example to Retrieve Latest Request by UserID
This method uses the Postback API to retrieve requests by userID. Replace XX with the specific user ID you want to retrieve requests for.
https://www.ipqualityscore.com/api/json/postback/XHtctAHRKvJDCu84NmtEltMhwmF0r2Aq?type=mobiletracker&userID=XX
Retrieve multiple requests with the Request List API
This method uses the Request List API to retrieve requests by userID. Replace XX with the specific user ID you want to retrieve requests for.
https://www.ipqualityscore.com/api/json/requests/XHtctAHRKvJDCu84NmtEltMhwmF0r2Aq/list?type=mobiletracker&userID=XX
Troubleshooting
| Error Code | Description | Solution |
|---|---|---|
| REWSC-404 | The API key is missing or invalid. | Confirm you have set up the API key correctly and that the API key is correct. |