Introduction
Welcome to the Jeff Data API! This site contains technical information about integration of multiple API services that Jeff offers to it's partners.
Authorization
Partner is given a username
and password
which must be used for an authentication.
HTTP Basic Auth (Recommended)
Pass credentials on each request using HTTP Basic Auth
Using query parameters
If it is not possible to use HTTP Basic Auth, then add credentials as query parameters on each request.
API versioning and change management
The service URLs (except Partner Events) contain a version number. A new version number is issued only if there are incompatible API changes that can break existing integrations.
Version name | Description |
---|---|
1.3 | Added possibility to get only fraud data in case of non-lead data match responses in Lead Data API |
1.2 | Added possibility of non-lead data match responses in Lead Data API |
1.1 | Initial stable base version. |
Partner Events
application completed
https://api.jeff-app.com/partners-api/events/application-completed?lead-id={jeff-lead-id}&external-id={partner-internal-id}&username={partner-username}&password={partner-password}
lead exists
https://api.jeff-app.com/partners-api/events/lead-exists?lead-id={jeff-lead-id}&external-id={partner-internal-id}&username={partner-username}&password={partner-password}
lead rejected
https://api.jeff-app.com/partners-api/events/lead-rejected?lead-id={jeff-lead-id}&external-id={partner-internal-id}&username={partner-username}&password={partner-password}
lead rejected with detailed reason
https://api.jeff-app.com/partners-api/events/lead-rejected?lead-id={jeff-lead-id}&external-id={partner-internal-id}&username={partner-username}&password={partner-password}&rejection-reason={any string explaining why lead was rejected}
lead qualified
https://api.jeff-app.com/partners-api/events/lead-qualified?lead-id={jeff-lead-id}&external-id={partner-internal-id}&username={partner-username}&password={partner-password}`
loan rejected
https://api.jeff-app.com/partners-api/events/loan-rejected?lead-id={jeff-lead-id}&external-id={partner-internal-id}&username={partner-username}&password={partner-password}`
loan rejected with detailed reason
https://api.jeff-app.com/partners-api/events/loan-rejected?lead-id={jeff-lead-id}&external-id={partner-internal-id}&username={partner-username}&password={partner-password}&rejection-reason={any string explaining why loan was rejected}`
loan issued
https://api.jeff-app.com/partners-api/events/loan-issued?lead-id={jeff-lead-id}&external-id={partner-internal-id}&username={partner-username}&password={partner-password}`
s2s loan issued
https://api.jeff-app.com/partners-api/events/loan-issued?lead-s2s-id={jeff-lead-s2s-id}&external-id={partner-internal-id}&username={partner-username}&password={partner-password}`
marketing api loan issued
https://api.jeff-app.com/partners-api/events/loan-issued?lead-marketing-api-id={jeff-lead-marketing-api-id}&external-id={partner-internal-id}&username={partner-username}&password={partner-password}`
There are six types of events:
application-completed
- when a user has completed application form on lender’s sidelead-exists
- when lead already exists in partners database and partner won't pay for itlead-rejected
- when a lead has been rejectedlead-qualified
- when a user has successfully passed all blacklist and anti-fraud checksloan-rejected
- when a loan has been rejectedloan-issued
- when a loan has been issued
Requests can be made using GET
or POST
methods, to the following url: https://api.jeff-app.com/partners-api
Each request must contain:
event-type
as path variable or as query parameter- Jeff lead identifier as query parameter. It can be one of the following:
lead-id
parameter, which is sent by Jeff on redirect if working with Jeff with redirect modellead-s2s-id
parameter, which is sent by Jeff in the API request if working with Jeff with API integration model.lead-marketing-api-id
parameter, which is sent by Jeff via Marketing API integration
external-id
as query parameter, which is an unique application identifier in the partner system / CRMusername
parameter with a value set to a username provided by Jeffpassword
parameter with a value set to a password provided by Jeff (Basic auth is available as an alternative, see authorization section)
So the final structure is like this:
- Redirects (
event-type
as path variable) -https://api.jeff-app.com/partners-api/events/{event-type}?lead-id={jeff-lead-id}&external-id={partner-internal-id}
- Redirects (
event-type
as query param) -https://api.jeff-app.com/partners-api/events?event-type={event-type}&lead-id={jeff-lead-id}&external-id={partner-internal-id}
- S2S API integration (
event-type
as path variable) -https://api.jeff-app.com/partners-api/events/{event-type}?lead-s2s-id={jeff-lead-s2s-id}&external-id={partner-internal-id}
- S2S API integration (
event-type
as query param) -https://api.jeff-app.com/partners-api/events?event-type={event-type}&lead-s2s-id={jeff-lead-s2s-id}&external-id={partner-internal-id}
- Marketing API integration (
event-type
as path variable) -https://api.jeff-app.com/partners-api/events/{event-type}?lead-marketing-api-id={jeff-lead-marketing-api-id}&external-id={partner-internal-id}
Event Sequence
It is important to understand the logic of the sequence of the events described in the previous section. If any of the events is sent without previously sending events before it in the sequence, the unsent events are autogenerated.
List of possible sequences:
application-completed -> lead-qualified -> loan-issued
application-completed -> lead-exists
application-completed -> lead-rejected
application-completed -> lead-qualified -> loan-rejected
Rejection Reasons
The following event types
loan-rejected
lead-rejected
may contain additional query parameter rejection-reason
with an arbitrary string values describing the reason of a rejection in partner's system
Repeated leads
In case agreement with Jeff states that you are also paying for leads that were already present in your system, you have to stop sending the lead-exists
event and start appending &repeated=true
to the postback you pay for. Example for a loan issued event: https://api.jeff-app.com/partners-api/events/loan-issued?lead-id={jeff-lead-id}&external-id={partner-internal-id}&username={partner-username}&password={partner-password}&repeated=true
Price Group Parameter
There is a request parameter price-group
that can be included in the event request. The possible values for this parameter are A
, B
, C
, and D
, allowing for categorization of leads into different pricing tiers.
Error Responses
Any illogical event requests will be declined with HTTP Status 400
, examples:
loan-rejected
received for a loan which has receivedloan-issued
eventlead-rejected
received for a loan which has receivedlead-validated
eventloan-issued
received for a loan which has receivedlead-exists
event
Lead Data
In case of a match an
HTTP 200
response is returned with a JSON body in the following form:
{
"id": "0facfde9-98c7-4915-8b04-9a0a31a8c582",
"created": "2020-12-09T17:40:37",
"email": "dave.black@mail.com",
"phoneNumber": "+84999999999",
"emailVerified": true,
"emailVerificationDateTime": "2020-12-09T20:40:37",
"phoneVerified": true,
"phoneVerificationDateTime": "2020-12-09T19:39:02",
"associatedEmails": ["dave.black@mail.com", "d.black@mail.com"],
"associatedPhoneNumbers": ["+84999999999"],
"mobileServiceProvider": "Viettel",
"lastActivity": "2021-01-14T17:03:35",
"hasBeenRejected": true,
"hasEvidenceOfRepaidLoan": true,
"leadScore": 0.131409152018384,
"leadScoreTimestamp": "2022-10-18T13:35:45",
"qualityScore": 0.223780810832977,
"emailScore": 963,
"userJourneyCompleted": true,
"userProfileCreated": true,
"fullName": "John Doe",
"gender": "MALE",
"dateOfBirth": "1989-09-30",
"countryCode": "VN",
"desiredLoanAmount": 9000000,
"address": {
"region": "Red River Delta",
"province": "Hanoi",
"city": "Hanoi"
},
"employment": {
"status": "EMPLOYED",
"occupation": "BUSINESS_OWNER"
},
"income": {
"monthlyIncome": 4200000,
"currency": "VND",
"isIncomeOfficial": true
},
"recentLoan": {
"exists": true,
"paid": true,
"overdue": false
},
"idDocuments": [
{
"type": "PASSPORT",
"issueDate": "2022-09-30"
}
],
"collaterals": {
"types": ["CAR", "CAR_REGISTRATION", "CELL_PHONE"]
},
"emailUsageData": {
"last1Day": {
"received": 1,
"read": 1,
"clicked": 0
},
"last7Days": {
"received": 3,
"read": 2,
"clicked": 1
},
"last30Days": {
"received": 10,
"read": 8,
"clicked": 3
},
"allTime": {
"received": 21,
"read": 16,
"clicked": 7
}
},
"webUsageData": {
"last1Day": {
"sessionCount": 1,
"avgSessionDuration": 10.55547249,
"maxSessionDuration": 10.55547249,
"avgPagesVisited": 1.0,
"maxPagesVisited": 1
},
"last7Days": {
"sessionCount": 3,
"avgSessionDuration": 60.896565697,
"maxSessionDuration": 125.89567684,
"avgPagesVisited": 2.245435647,
"maxPagesVisited": 5
},
"last30Days": {
"sessionCount": 4,
"avgSessionDuration": 68.96866689,
"maxSessionDuration": 150.95859566,
"avgPagesVisited": 6.24217365,
"maxPagesVisited": 11
},
"allTime": {
"sessionCount": 8,
"avgSessionDuration": 55.11457453,
"maxSessionDuration": 150.95859566,
"avgPagesVisited": 5.124775743,
"maxPagesVisited": 11
}
},
"jeffUsageData": {
"last1Day": {
"redirects": 3,
"rejects": 0,
"applicationsCompleted": 0,
"leadsQualified": 0,
"loansIssued": 0
},
"last7Days": {
"redirects": 5,
"rejects": 1,
"applicationsCompleted": 1,
"leadsQualified": 0,
"loansIssued": 0
},
"last30Days": {
"redirects": 8,
"rejects": 1,
"applicationsCompleted": 2,
"leadsQualified": 1,
"loansIssued": 0
},
"allTime": {
"redirects": 10,
"rejects": 1,
"applicationsCompleted": 4,
"leadsQualified": 3,
"loansIssued": 1
}
},
"partnerInteractions": {
"productsVisited": [
{
"partnerId": "partner-1",
"timestamp": "2021-11-27T16:04:47.123548",
"revenue": null,
"repeated": null,
"rejectionReason": null
},
{
"partnerId": "partner-2",
"timestamp": "2022-03-25T09:15:17.01209",
"revenue": null,
"repeated": null,
"rejectionReason": null
},
{
"partnerId": "partner-3",
"timestamp": "2022-03-28T01:01:58.147107",
"revenue": null,
"repeated": null,
"rejectionReason": null
},
{
"partnerId": "partner-1",
"timestamp": "2022-04-06T10:33:58.362258",
"revenue": null,
"repeated": null,
"rejectionReason": null
}
],
"applicationsCompleted": [
{
"partnerId": "partner-1",
"timestamp": "2022-04-06T08:27:10.825953",
"revenue": false,
"repeated": false,
"rejectionReason": null
},
{
"partnerId": "partner-2",
"timestamp": "2022-04-06T10:40:02.972373",
"revenue": false,
"repeated": true,
"rejectionReason": null
}
],
"applicationsRejected": [],
"applicationsQualified": [
{
"partnerId": "partner-1",
"timestamp": "2022-04-06T08:49:04.895792",
"revenue": false,
"repeated": false,
"rejectionReason": null
},
{
"partnerId": "partner-2",
"timestamp": "2022-04-06T10:44:14.067854",
"revenue": false,
"repeated": true,
"rejectionReason": null
}
],
"loansIssued": [
{
"partnerId": "partner-2",
"timestamp": "2022-04-06T10:45:14.067854",
"revenue": true,
"repeated": true,
"rejectionReason": null
}
],
"loansRejected": [
{
"partnerId": "partner-1",
"timestamp": "2022-04-06T08:50:04.895792",
"revenue": false,
"repeated": false,
"rejectionReason": "FRAUD"
}
]
},
"zaloData": {
"hasAccount": true,
"hasLoggedInJeff": true,
"reachable": true,
"messagingData": {
"last1Day": {
"sent": 1,
"delivered": 1
},
"last7Days": {
"sent": 3,
"delivered": 2
},
"last30Days": {
"sent": 3,
"delivered": 2
},
"allTime": {
"sent": 5,
"delivered": 4
}
}
},
"trafficSources": {
"last1Day": {
"list": []
},
"last7Days": {
"list": ["source_4"]
},
"last30Days": {
"list": ["source_1", "source_4"]
},
"allTime": {
"list": ["source_6", "source_1", "source_4"]
}
},
"leadDataRequestStatistics": {
"last1Day": {
"count": 5
},
"last7Days": {
"count": 7
},
"last30Days": {
"count": 7
},
"allTime": {
"count": 7
}
},
"parameterRequestStatistics": {
"last1Day": {
"emailCount": 5,
"phoneCount": 6
},
"last7Days": {
"emailCount": 8,
"phoneCount": 9
},
"last30Days": {
"emailCount": 8,
"phoneCount": 9
},
"allTime": {
"emailCount": 10,
"phoneCount": 10
}
},
"userAgents": [
{
"userAgentString": "Mozilla/5.0 (Linux; Android 10; vivo 1920) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.99 Mobile Safari/537.36",
"timestamp": "2020-12-23T13:29:13",
"device": {
"deviceClass": "Phone",
"name": "Vivo 1920",
"brand": "Vivo"
},
"operatingSystem": {
"systemClass": "Mobile",
"name": "Android",
"version": "10",
"versionName": "Android 10"
},
"agent": {
"agentClass": "Browser",
"name": "Chrome",
"version": "86.0.4240.99"
}
}
],
"ipAddresses": [
{
"timestamp": "2020-11-26T15:13:01",
"ipAddress": "192.85.98.1",
"timezone": "Asia/Ho_Chi_Minh",
"address": {
"country": "Vietnam",
"countryCode": "VN",
"region": "SG",
"regionName": "Ho Chi Minh",
"city": "Ho Chi Minh City",
"district": "District 4",
"zip": "728000"
},
"coordinates": {
"lat": 10.81,
"lon": 106.64
},
"connection": {
"isp": "Viettel Group",
"org": "VIETTEL",
"as": "AS7552 Viettel Group",
"asName": "VIETEL-AS-AP",
"mobile": true,
"proxy": true,
"hosting": false,
"scraper": false
}
}
],
"platformPresenceFacts": [
{
"id": 553,
"created": "2020-12-09T07:54:59",
"platform": "pinterest",
"present": true,
"credentialType": "EMAIL"
},
{
"id": 567,
"created": "2020-12-09T07:56:19",
"platform": "samsung",
"present": true,
"credentialType": "EMAIL"
},
{
"id": 568,
"created": "2020-12-09T07:56:19",
"platform": "spotify",
"present": false,
"credentialType": "EMAIL"
},
{
"id": 557,
"created": "2020-12-09T07:55:15",
"platform": "twitter",
"present": false,
"credentialType": "EMAIL"
},
{
"id": 558,
"created": "2020-12-09T07:55:15",
"platform": "twitter",
"present": true,
"credentialType": "PHONE"
},
{
"id": 557,
"created": "2020-12-09T07:47:12",
"platform": "microsoft",
"present": false,
"credentialType": "EMAIL"
},
{
"id": 558,
"created": "2020-12-09T07:47:12",
"platform": "microsoft",
"present": true,
"credentialType": "PHONE"
}
],
"offerListings": [
{
"timestamp": "2023-05-23T13:02:50.258586",
"partnerPosition": 2
},
{
"timestamp": "2023-05-23T13:05:38.799589",
"partnerPosition": null
},
{
"timestamp": "2023-05-24T07:16:24.412846",
"partnerPosition": 1
}
],
"matchedProperties": ["EMAIL", "PHONE"],
"fraudData": {
"emailMarkedFraudBy": [],
"phoneMarkedFraudBy": ["ae8d566b56f65581", "87ba261bf6a84629"],
"emailNonFraudByJeffData": false,
"phoneNonFraudByJeffData": false
}
}
In case there is no match for a lead in Jeff's database, a response code
HTTP 204
is returned and no message body is present.
(empty response)
There is a possibility that there will be no matching lead in Jeff's database, but there is still data available for the given contact information. In these cases only "fraudData" and "parameterRequestStatistics" properties are returned in an
HTTP 200
response.
{
"id": null,
"created": null,
"email": null,
"phoneNumber": null,
"emailVerified": null,
"emailVerificationDateTime": null,
"phoneVerified": null,
"phoneVerificationDateTime": null,
"associatedEmails": null,
"associatedPhoneNumbers": null,
"lastActivity": null,
"hasBeenRejected": null,
"hasEvidenceOfRepaidLoan": null,
"leadScore": null,
"leadScoreTimestamp": null,
"qualityScore": null,
"emailScore": null,
"userJourneyCompleted": null,
"userProfileCreated": null,
"emailUsageData": null,
"jeffUsageData": null,
"partnerInteractions": null,
"userAgents": null,
"ipAddresses": null,
"platformPresenceFacts": null,
"matchedProperties": null,
"parameterRequestStatistics": {
"last1Day": {
"emailCount": 5,
"phoneCount": 6
},
"last7Days": {
"emailCount": 8,
"phoneCount": 9
},
"last30Days": {
"emailCount": 8,
"phoneCount": 9
},
"allTime": {
"emailCount": 10,
"phoneCount": 10
}
},
"fraudData": {
"emailMarkedFraudBy": [],
"phoneMarkedFraudBy": ["ae8d566b56f65581", "87ba261bf6a84629"],
"emailNonFraudByJeffData": false,
"phoneNonFraudByJeffData": false
}
}
In case there is a problem with the query parameters passed, an
HTTP 400
response is returned with a JSON body in the following form:
{
"errorMessage": "Wrong phone number format. Please check the documentation"
}
The Lead Data API allows you to fetch various data points about a lead in Jeff database by using contact information.
Changelog since 2024.08
- 2024.08.06 Added Quality Score
- 2024.08.12 Implemented lead feature aggregation leading to data accuracy increase for 20% of the leads
- 2024.08.24 Not including current partner user in lead data request statistics
- 2024.09.05 Added "Revenue", "Reject Reason" and "Repeated" properties to partner interactions section
- 2024.09.09 Added "Has Evidence Of Repaid Loan" property
- 2024.09.11 Revisited "User Profile Created" property, leading to a better hitrate and more valuable results
- 2024.09.11 Added "User Journey Completed" property
- 2024.09.16 Added "Associated Emails" and "Associated Phone Numbers" properties
- 2024.09.24 Improved accuracy for properties associated with rejection
- 2024.10.07 Added multiple new fields from Jeff's user journey: gender, occupation, is income official, has recent loan, was recent loan paid, was recent loan overdue, desired loan amount, region, province, id document type, id document issue date
Retrieving lead data
In order to retrieve details of a lead, execute an HTTP GET
request to the URL below. It is mandatory to have at least email or phone parameter present, by which the lead will be searched upon.
In case both email and phone are supplied, lead search is done in the following priority:
- Both email and phone matches lead
- Phone matches lead
- Email matches lead
URL: https://api.jeff-app.com/partners-api/1.3/leads
Query parameters:
Parameter | Value Examples | Mandatory | Description |
---|---|---|---|
jon.doe@gmail.com |
No | Email of the lead to search for | |
phone | VN: 84877797487 PH: 639365429568 MX: 526565737752 |
No | Phone number of the lead to search for with country code (international format, no plus sign or spaces) |
Field descriptions
Lead Basic Info
Path | Description |
---|---|
id | ID of the lead that created the application |
created | Timestamp of the moment lead registered in Jeff the first time |
Lead e-mail | |
phoneNumber | Lead phone number |
emailVerified | Has lead interacted with Jeff via his e-mail |
emailVerificationDateTime | Date Time of the lead's first interaction via e-mail |
phoneVerified | Has lead interacted with Jeff via his phone |
phoneVerificationDateTime | Date Time of the lead's first interaction via phone |
associatedEmails | Emails of all users who matched the passed email and phone number |
associatedPhoneNumbers | Phone numbers of all users who matched the passed email and phone number |
mobileServiceProvider | Lead's mobile service provider name. Null if not possible to determinate |
lastActivity | Date Time of the lead's last interaction with Jeff |
hasBeenRejected | Has the lead ever came from reject traffic or been rejected by a partner |
hasEvidenceOfRepaidLoan | Does Jeff have compelling evidence that the lead has successfully repaid a loan |
leadScore | A custom score that shows the quality of the lead, customised to the lender requesting the API. Higher score indicates a better lead for the lender. |
leadScoreTimestamp | Timestamp of the creation of given lead score |
qualityScore | Score that is calculated at the moment user does first interactions with offers at Jeff. Predicts the LTV of the user. |
emailScore | Score that represents how actively user interacts with Jeff's email content. Integer values 0 - 1000. Bigger value represents higher activity |
userJourneyCompleted | Has lead successfully completed the initial user journey |
userProfileCreated | Has lead successfully created a profile in Jeff |
fullName | Full name of the lead |
gender | Gender of the lead. One of MALE , FEMALE |
dateOfBirth | Lead's date of birth |
countryCode | Country code of the Jeff system lead registered through |
desiredLoanAmount | Desired loan amount the lead has requested in the application |
Address
Lead's residential address details
Path | Description |
---|---|
address / region | Region |
address / province | Province |
address / city | City |
Employment
Lead's employment details
Path | Description |
---|---|
employment / status | Lead's employment status. Possible values: EMPLOYED , UNEMPLOYED |
employment / occupation | Lead's occupation. Possible values: POLICE , BLUE_COLLAR , BUSINESS_OWNER , UNEMPLOYED , DRIVER , FREELANCER , LAWYER , RETIRED , JOURNALIST , WHITE_COLLAR , FARMER , MILITARY_PERSONNEL , SELF_EMPLOYED , EMPLOYED , STUDENT , HOUSEWIFE , PRIVATE_SECTOR , PUBLIC_SECTOR , BUSINESS_PROCESS_OUTSOURCING , OVERSEAS_WORKER , FOREIGN_RESIDENT , OTHER |
Income
Lead's income details
Path | Description |
---|---|
income / monthlyIncome | Lead's monthly income |
income / currency | Currency of the monthly income |
income / isIncomeOfficial | Is income official |
Recent Loan
Details lead has given about their last loan
Path | Description |
---|---|
recentLoan / exists | Has lead had a recent loan |
recentLoan / paid | Has lead successfully re-paid the loan |
recentLoan / overdue | Is/Was the loan overdue |
ID Documents
Information about the ID documents that the lead has provided. Empty array if no ID documents have been provided.
Path | Description |
---|---|
idDocuments / ** / type | Type of the ID document. One of SOCIAL_SECURITY_SYSTEM_ID , UNIFIED_MULTI_PURPOSE_ID , DRIVERS_LICENSE , PASSPORT , TAX_IDENTIFICATION_NUMBER , PAN_CARD , AADHAAR_CARD |
idDocuments / ** / issueDate | Issue date of the document |
Collaterals
Information about the potential collaterals available to the lead.
Path | Description |
---|---|
collaterals / types | List of all the potential collateral types available to the lead. Possible values: MOTORBIKE , CAR , MOTORBIKE_REGISTRATION , CAR_REGISTRATION , REAL_ESTATE , JEWELRY , CELL_PHONE , TABLET , LAPTOP , CAMERA , OTHER |
Email Usage Data
Lead's interaction statistics with emails sent by Jeff. These statistics are currently available in 4 different time buckets:
- Last 1 day:
last1Day
- Last 7 days:
last7Days
- Last 30 days:
last30Days
- All time:
allTime
Path | Description |
---|---|
emailUsageData / {timeBucket} / received | The number of emails lead has received from Jeff |
emailUsageData / {timeBucket} / read | The number of Jeff emails lead has opened |
emailUsageData / {timeBucket} / clicked | The number of Jeff emails where lead has clicked on a link |
Web Usage Data
Statistics on lead's usage of Jeff's website. These statistics are currently available in 4 different time buckets:
- Last 1 day:
last1Day
- Last 7 days:
last7Days
- Last 30 days:
last30Days
- All time:
allTime
Path | Description |
---|---|
webUsageData / {timeBucket} / sessionCount | Total session count |
webUsageData / {timeBucket} / avgSessionDuration | Average session duration in seconds |
webUsageData / {timeBucket} / maxSessionDuration | Max session duration in seconds |
webUsageData / {timeBucket} / avgPagesVisited | Average number of pages visited per session |
webUsageData / {timeBucket} / maxPagesVisited | Max number of pages visited per session |
Jeff Usage Data
Information about the lead activity in Jeff. These statistics are available in 4 different time buckets:
- Last 1 day:
last1Day
- Last 7 days:
last7Days
- Last 30 days:
last30Days
- All time:
allTime
Path | Description |
---|---|
jeffUsageData / {timeBucket} / redirects | The number of times lead has been redirected to a partner from Jeff |
jeffUsageData / {timeBucket} / applicationsCompleted | The number of times lead has completed an application in partner systems |
jeffUsageData / {timeBucket} / rejects | The number of times lead has been rejected by partner |
jeffUsageData / {timeBucket} / leadsQualified | The number of times lead has been recognized as qualified (passed basic fraud and quality checks) in partner systems |
jeffUsageData / {timeBucket} / loansIssued | The number of times loan has been issued for the given lead by a partner |
Partner Interactions
Information about each lead interaction with Jeff's partners via Jeff platform.
Path | Description |
---|---|
partnerInteractions / productsVisited / ** | List of interactions where lead has visited a product offered by a Jeff's partner |
partnerInteractions / applicationsCompleted / ** | List of interactions where lead has successfully completed an application on Jeff's side |
partnerInteractions / applicationsRejected / ** | List of interactions where lead has been rejected by a partner after successfully completing application |
partnerInteractions / applicationsQualified / ** | List of interactions where lead has successfully passed partner's preliminary checks after completing application |
partnerInteractions / loansIssued / ** | List of interactions where a partner has issued a loan to the lead |
partnerInteractions / loansRejected / ** | List of interactions where a partner has rejected a loan to the lead |
partnerInteractions / ** / partnerId | ID of the partner lead interacted with |
partnerInteractions / ** / timestamp | Timestamp of the interaction |
partnerInteractions / ** / revenue | Boolean field indicating whether the interaction was a revenue-generating for Jeff or not. |
partnerInteractions / ** / repeated | Boolean field indicating whether this interaction is not the first time lead performs it with the partner (previous interactions not necessarily done via Jeff). |
partnerInteractions / ** / rejectionReason | In case of applicationsRejected or loansRejected , optional reason why the reject happened. Possible values: FRAUD , BLACKLIST , ALREADY_EXISTS (lead already present in partner's database, so lead proceeds the process with the partner, but Jeff receives reject event), AGE |
Zalo Data
Information Jeff has about lead's Zalo account. Jeff to lead's Zalo account messaging data are split into 4 time buckets:
- Last 1 day:
last1Day
- Last 7 days:
last7Days
- Last 30 days:
last30Days
- All time:
allTime
Path | Description |
---|---|
hasAccount | Does the lead have a Zalo account |
hasLoggedInJeff | Has the lead logged in into Jeff via their Zalo account |
reachable | Was it possible to reach lead via Zalo last time Jeff tried |
messagingData / {timeBucket} / sent | Number of messages sent from Jeff to lead's Zalo account |
messagingData / {timeBucket} / delivered | Number of messages successfully delivered to lead's Zalo account |
Traffic Sources
List of anonymized traffic sources that have brought the lead to Jeff during the given time period. Possible traffic source values currently are: source_1
, source_2
, source_3
, source_4
, source_5
and source_6
. These statistics are available in 4 different time buckets:
- Last 1 day:
last1Day
- Last 7 days:
last7Days
- Last 30 days:
last30Days
- All time:
allTime
Path | Description |
---|---|
trafficSources / {timeBucket} / list | List of anonymized traffic sources that have brought the lead to Jeff |
Lead Data Request Statistics
Statistics on count of Lead Data API requests (from all API clients) that matched the particular lead. These statistics are available in 4 different time buckets:
- Last 1 day:
last1Day
- Last 7 days:
last7Days
- Last 30 days:
last30Days
- All time:
allTime
Path | Description |
---|---|
leadDataRequestStatistics / {timeBucket} / count | The number of total Lead Data API requests that have matched the particular lead |
Parameter Request Statistics
Statistics on count of Lead Data API requests (from all API clients) that had provided the same parameter (email or phone) as in the current call. These statistics are available in 4 different time buckets:
- Last 1 day:
last1Day
- Last 7 days:
last7Days
- Last 30 days:
last30Days
- All time:
allTime
Path | Description |
---|---|
parameterRequestStatistics / {timeBucket} / emailCount | The number of total Lead Data API requests that have provided the same email as in the current call |
parameterRequestStatistics / {timeBucket} / phoneCount | The number of total Lead Data API requests that have provided the same phone as in the current call |
User Agents
User agent details of the devices used to access Jeff.
Path | Description |
---|---|
userAgents / userAgentString | Raw user agent string sent by the browser |
userAgents / timestamp | Last time of action with the particular device |
userAgents / device / deviceClass | Class of the physical device (Phone , Desktop , Mobile , Tablet etc.) |
userAgents / device / name | Name of the physical device |
userAgents / device / brand | Brand of the physical device |
userAgents / operatingSystem / systemClass | Operating system details |
userAgents / operatingSystem / name | Operating system class (Mobile , Desktop , Game Console , etc.) |
userAgents / operatingSystem / version | Numeric operating system version |
userAgents / operatingSystem / versionName | Full named operating system version |
userAgents / agent / agentClass | User agent class (Browser Webview , Mobile App , Desktop App , Robot , Browser , etc.) |
userAgents / agent / name | Name of the user agent |
userAgents / agent / version | Version of the user agent |
IP Addresses
Details of the IP addresses used to access Jeff.
Path | Description |
---|---|
ipAddresses / timestamp | Timestamp corresponding to the last time of action with the particular IP address |
ipAddresses / ipAddress | IP address string |
ipAddresses / timezone | Timezone of the IP address |
ipAddresses / address / country | Country name |
ipAddresses / address / countryCode | Country code (two letters, ISO 3166-1) |
ipAddresses / address / region | Short code of region/state |
ipAddresses / address / regionName | Region name |
ipAddresses / address / city | City |
ipAddresses / address / district | District |
ipAddresses / address / zip | Zip code |
ipAddresses / address / coordinates / lat | Coordinates: latitude |
ipAddresses / address / coordinates / lon | Coordinates: longitude |
ipAddresses / address / connection / isp | ISP name |
ipAddresses / address / connection / org | Organization name |
ipAddresses / address / connection / as | Autonomous System number and organization |
ipAddresses / address / connection / asName | Autonomous System name |
ipAddresses / address / connection / mobile | Mobile connection? |
ipAddresses / address / connection / proxy | Exit address of VPN, proxy or Tor? |
ipAddresses / address / connection / hosting | Data center, collocated or hosting? |
ipAddresses / address / connection / scraper | Is considered belonging to a web scraper? (Judged by Jeff internal rules) |
Platform presence facts
Information about whether email and/or phone number of the lead are registered in external platforms.
Path | Description |
---|---|
platformPresenceFacts / id | ID of the presence fact |
platformPresenceFacts / created | Time when the information was obtained |
platformPresenceFacts / platform | Platform in question. Currently supported platforms: microsoft , pinterest , samsung , spotify , twitter |
platformPresenceFacts / present | Is the given credentialType present in the platform |
platformPresenceFacts / credentialType | EMAIL or PHONE |
Offer Listings & Partner Positions
List of offer listings made by lead in Jeff during the previous month. If your company was present in the offer listing, the position of your offer is returned.
Path | Description |
---|---|
offerListings / timestamp | Timestamp of the offer listing fact |
offerListings / partnerPosition | Listing position (1 means the highest position, 2 the second etc.) of your company or null if it wasn't present |
Matching info
Path | Description |
---|---|
matchedProperties | A list of request properties that matched the lead (EMAIL , PHONE ) |
Fraud data
Path | Description |
---|---|
fraudData / emailMarkedFraudBy | An anonymized list of partners that have confirmed this email to be fraudulent |
fraudData / phoneMarkedFraudBy | An anonymized list of partners that have confirmed this phone to be fraudulent |
fraudData / emailNonFraudByJeffData | Is this email confirmed to be non fraudulent by Jeff internal rules |
fraudData / phoneNonFraudByJeffData | Is this phone confirmed to be non fraudulent by Jeff internal rules |
Fraud Data
In case of successful lookup
HTTP 200
response is returned with a JSON body in the following form:
{
"emailMarkedFraudBy": [],
"phoneMarkedFraudBy": ["ae8d566b56f65581"],
"emailNonFraudByJeffData": false,
"phoneNonFraudByJeffData": false
}
In case there is a problem with the request, a
HTTP 400
response is returned with a JSON body in the following form:
{
"errorMessage": "Wrong phone number format. Please check the documentation"
}
The Fraud Data API allows you to fetch data points related to fraud information about the provided contact information fields
Retrieving fraud data
In order to retrieve fraud data for contact information, execute an HTTP GET
request to the URL below. It is mandatory to have at least email or phone parameter present, by which fraud data will be matched upon.
URL: https://api.jeff-app.com/partners-api/1.3/fraud
Query parameters:
Parameter | Value Examples | Mandatory | Description |
---|---|---|---|
jon.doe@gmail.com |
No | Email to search for fraud records | |
phone | VN: 84877797487 PH: 639365429568 |
No | Phone number to search for fraud records with country code (international format, no plus sign or spaces) |
Field descriptions
Path | Description |
---|---|
emailMarkedFraudBy | An anonymized list of partners that have confirmed this email to be fraudulent |
phoneMarkedFraudBy | An anonymized list of partners that have confirmed this phone to be fraudulent |
emailNonFraudByJeffData | Is this email confirmed to be non fraudulent by Jeff internal rules |
phoneNonFraudByJeffData | Is this phone confirmed to be non fraudulent by Jeff internal rules |
Social Presence
In case of a successful submission an
HTTP 200
response is returned with a JSON body in the following form:
{
"platformPresenceFacts": [
{
"id": 28291484,
"created": "2023-10-11T14:15:48.531457",
"platform": "apple",
"present": true,
"credentialType": "EMAIL"
},
{
"id": 28291470,
"created": "2023-10-11T14:15:45.689966",
"platform": "booking",
"present": true,
"credentialType": "EMAIL"
},
{
"id": 28291497,
"created": "2023-10-11T14:15:50.573201",
"platform": "facebook",
"present": false,
"credentialType": "EMAIL"
},
{
"id": 28291514,
"created": "2023-10-11T14:16:08.107327",
"platform": "facebook",
"present": true,
"credentialType": "PHONE"
},
{
"id": 28291469,
"created": "2023-10-11T14:15:45.564377",
"platform": "github",
"present": false,
"credentialType": "EMAIL"
},
{
"id": 28291472,
"created": "2023-10-11T14:16:42.564311",
"platform": "netflix",
"present": true,
"credentialType": "EMAIL",
"details": {
"hasActiveSubscription": true
}
},
{
"id": 28291508,
"created": "2023-10-11T14:15:53.621066",
"platform": "google",
"present": true,
"credentialType": "EMAIL"
},
{
"id": 28291512,
"created": "2023-10-11T14:15:59.247238",
"platform": "google",
"present": true,
"credentialType": "PHONE"
},
{
"id": 28291484,
"created": "2023-10-11T14:15:47.893164",
"platform": "instagram",
"present": true,
"credentialType": "EMAIL"
},
{
"id": 28291485,
"created": "2023-10-11T14:15:48.883164",
"platform": "instagram",
"present": true,
"credentialType": "PHONE"
},
{
"id": 28291478,
"created": "2023-10-11T14:15:47.614644",
"platform": "lazada",
"present": true,
"credentialType": "EMAIL"
},
{
"id": 28291486,
"created": "2023-10-11T14:15:49.078331",
"platform": "lazada",
"present": true,
"credentialType": "PHONE"
},
{
"id": 28291499,
"created": "2023-10-11T14:15:50.411477",
"platform": "linkedin",
"present": true,
"credentialType": "EMAIL"
},
{
"id": 28291477,
"created": "2023-10-11T14:15:47.602809",
"platform": "microsoft",
"present": true,
"credentialType": "EMAIL"
},
{
"id": 28291471,
"created": "2023-10-11T14:15:45.707403",
"platform": "microsoft",
"present": false,
"credentialType": "PHONE"
},
{
"id": 28291487,
"created": "2023-10-11T14:15:49.129091",
"platform": "pinterest",
"present": true,
"credentialType": "EMAIL"
},
{
"id": 28291494,
"created": "2023-10-11T14:15:50.202594",
"platform": "skype",
"present": true,
"credentialType": "EMAIL",
"details": {
"id": "live:1de8f11d356bf276",
"name": "Jeff Daniels",
"photo": "https://avatar.skype.com/v1/avatars/live:1de8f11d356bf277/public?returnDefaultImage=true&size=m",
"city": "Hồ Chí Minh",
"country": "Vietnam",
"isBusinessAccount": false
}
},
{
"id": 28291480,
"created": "2023-10-11T14:15:47.894092",
"platform": "skype",
"present": true,
"credentialType": "PHONE",
"details": {
"id": "live:1de8f11d356bf276",
"name": "Jeff Daniels",
"photo": "https://avatar.skype.com/v1/avatars/live:1de8f11d356bf277/public?returnDefaultImage=true&size=m",
"city": "Hồ Chí Minh",
"country": "Vietnam",
"isBusinessAccount": false
}
},
{
"id": 28291473,
"created": "2023-10-11T14:15:46.530926",
"platform": "spotify",
"present": true,
"credentialType": "EMAIL"
},
{
"id": 28291474,
"created": "2023-10-11T14:15:46.959822",
"platform": "twitter",
"present": true,
"credentialType": "EMAIL"
},
{
"id": 28291476,
"created": "2023-10-11T14:15:47.522598",
"platform": "twitter",
"present": true,
"credentialType": "PHONE"
},
{
"id": 28291489,
"created": "2023-10-11T14:15:49.778366",
"platform": "zalo",
"present": true,
"credentialType": "PHONE"
},
{
"id": 28291490,
"created": "2023-10-11T14:15:49.257414",
"platform": "samsung",
"present": true,
"credentialType": "EMAIL"
},
{
"id": 28291495,
"created": "2023-10-11T14:15:50.112478",
"platform": "gravatar",
"present": true,
"credentialType": "EMAIL",
"details": {
"name": "Jeff Daniels",
"photo": "https://1.gravatar.com/avatar/aff87b5f8955021131625b8c9de5cb816c7ddb2c52eca27b1ae0160fa7522511",
"location": "Vietnam, Hồ Chí Minh",
"profileUrl": "https://gravatar.com/jeffd254fa74a1",
"lastActivity": "2023-10-11T14:15:50"
}
}
],
"errorMessage": null
}
In case there is a problem with the query parameters passed, an
HTTP 400
response is returned with a JSON body in the following form:
{
"errorMessage": "Wrong phone number format. Please check the documentation"
}
The Social Presence API allows you to pass an e-mail and/or a phone number of a client and retrieve information about platforms these credentials are registered in.
Retrieving social presence data
In order to retrieve social presence data, execute an HTTP GET
request to the URL below. It is mandatory to have at least email or phone parameter present.
URL: https://data.jeff-app.com/partner-api/1.0/social-data
Query parameters:
Parameter | Value Examples | Mandatory | Description |
---|---|---|---|
jon.doe@gmail.com |
No | Email to search social presence for | |
phone | VN: 84877797487 PH: 639365429568 |
No | Phone number to search search social presence for. Has to include country code (international format, no plus sign or spaces) |
max-wait-time-seconds | 20 |
No | Max waiting time before returning a response. Allowed values are from 1 to 90 inclusive. Defaults to 25 |
platforms | facebook,apple,instagram |
No | A list of platforms to search for. By default all platforms are searched |
Response waiting times
Longer waiting times (controlled by the max-wait-time-seconds
parameter) increase the hit rate of the social presence data for the given email/phone. Some of the platforms reach 95% hit rate in 5 seconds, some take up to 30. If all the desired data points are gathered before timeout is reached, response returns immediately.
Field descriptions
Platform presence facts
Information of in which external platforms email and/or phone number are registered
Path | Description |
---|---|
platformPresenceFacts / id | ID of the presence fact |
platformPresenceFacts / created | Time when the information was obtained |
platformPresenceFacts / platform | Platform in question. See Supported platforms for a full list |
platformPresenceFacts / present | Is the given credentialType present in the platform |
platformPresenceFacts / credentialType | EMAIL or PHONE |
platformPresenceFacts / details / id | Unique user identifier in the given platform. Supported platforms: skype |
platformPresenceFacts / details / name | Full name of the user. Supported platforms: skype , gravatar |
platformPresenceFacts / details / profileUrl | URL to the profile of the user. Supported platforms: skype , gravatar |
platformPresenceFacts / details / photo | URL of the photo of the user. Supported platforms: skype , gravatar |
platformPresenceFacts / details / lastActivity | Timestamp of the last activity of the user. Supported platforms: gravatar |
platformPresenceFacts / details / city | City of residence as provided in profile. Supported platforms: skype |
platformPresenceFacts / details / state | State of residence as provided in profile. Supported platforms: skype |
platformPresenceFacts / details / country | Country of residence as provided in profile. Supported platforms: skype |
platformPresenceFacts / details / location | Location in free form as provided in profile. Supported platforms: gravatar |
platformPresenceFacts / details / isBusinessAccount | Is the account a business account. Supported platforms: skype |
platformPresenceFacts / details / hasActiveSubscription | Is the account on an active subscription plan. Supported platforms: netflix |
Supported platforms
Name | Phone Number | Notes | |
---|---|---|---|
+ | + | ||
+ | + | ||
+ | + | ||
apple | + | @icloud.com e-mails are not checked - in this case the response will not contain apple presence fact |
|
lazada | + | + | |
+ | |||
microsoft | + | + | |
skype | + | + | |
zalo | + | ||
github | + | ||
netflix | + | ||
+ | + | ||
spotify | + | ||
booking | + | (Booking.com) | |
+ | |||
samsung | + | ||
gravatar | + |