Version: 1.2
This document outlines the technical specifications for integrating the Jangl lead platform with the LeadStats third-party verification service. The purpose of this integration is to send lead “ping” data to LeadStats for real-time scoring. LeadStats will return a synchronous “Accept” or “Reject” decision, which Jangl will use to determine whether to purchase the lead.
The integration follows a simple synchronous request/response pattern:
"result": "Accept" or "result": "Reject")."Accept", Jangl proceeds with its logic to purchase the lead."Reject", Jangl must not purchase the lead.Jangl must send an HTTP POST request to the specified endpoint for every lead to be verified.
POST[REPLACE WITH YOUR UNIQUE ENDPOINT URL]Content-Type: application/jsonAuthorization: [REPLACE WITH YOUR BASIC AUTH CREDENTIALS]The body of the POST request must be a JSON object containing all available “ping” data for the lead. The exact schema should be confirmed, but it should include all data points Jangl receives in the ping.
Example Request Body:
{
"id": "amFuZ2wud2VibGVhZHMubG9ncy5hcGkuaW5ib3VuZCsyKzQ2OTYwNTc1Nw==",
"timestamp": "2025-11-17T16:29:43.382Z",
"log_type": "inbound",
"event_type": "ping",
"event_name": "Inbound - Ping",
"jangl_id": "cntevtccxrt63",
"vertical": "auto_insurance",
"vertical_tier_id": null,
"vertical_name": "Auto Insurance",
"vendor_campaign_id": 1012687,
"vendor_id": 1002938,
"vendor_name": "QuoteWizard 02 - Auto Insurance - Tier 2 StateFarm",
"buyer_campaign_id": null,
"buyer_id": null,
"buyer_name": "",
"integration": "",
"integration_id": null,
"integration_name": "",
"meta": {
"originally_created": "2025-11-17T13:29:39Z",
"source_id": "176EEA2110BCB279531D3647D65B05CA",
"offer_id": "1DB17B5D-7A04-4220-A376-C2B1A56AF9AE",
"lead_id_code": "E37A287A-1F6A-2C19-6BAE-81E91E9B162D",
"trusted_form_cert_url": "https://cert.trustedform.com/6a4296ce12ace92814e2bd81bca29f57a2f7f511",
"user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_6_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 musical_ly_41.4.0 BytedanceWebview/d8a21c6",
"data": "https://www.quotewizard.com/router/",
"tcpa_compliant": true,
"tcpa_consent_text": " By clicking 'Get My Auto & Home Quotes' or 'Get My Auto Quotes Only', I provide my express written consent to receive calls and text messages, including for marketing purposes, from QuoteWizard, companies in QuoteWizard\u2019s network or their affiliates , and any party calling or texting on their behalf at the phone number provided by me, including calls and texts made using automated means such as automatic telephone dialing systems, autodialers, selection systems, robocalls, and prerecorded or artificial voice recordings, even if my number is listed on any company-specific, state, or federal Do-Not-Call list. I understand such calls and texts may transmit insurance quotes or seek additional insurance-related information from me. Message and data rates may apply. I understand that consent is not a condition of any purchase and that I may revoke my consent at any time. By clicking 'Get My Auto & Home Quotes' or 'Get My Auto Quotes Only', I am also acknowledging that I have read, understand, and agree to this website\u2019s Privacy Policy and Terms of Use , and I am directing this website to share my information with providers in its network for the purpose of providing me with information about their financial services and products. As part of the quoting process, providers will be confirming information based on claims reports and your credit-based insurance score. This will help provide you with the best quote possible. This information may be used to provide you with a quote for another insurance policy, if requested. "
},
"contact": {
"phone_last_four": "6051",
"city": "ALEXANDRIA",
"state": "MN",
"zip_code": "56308",
"ip_address": "76.19.47.176"
},
"data": {
"drivers": [
{
"birth_date": "1997-04-29",
"marital_status": "Single",
"relationship": "Insured",
"gender": "F",
"license_status": "Active",
"license_state": "MN",
"license_ever_suspended": false,
"age_licensed": 16,
"residence_type": "Own",
"months_at_residence": 12,
"drioccupationvers": "OtherNonTechnical",
"months_at_employer": 36,
"requires_sr22": false,
"bankruptcy": false
}
],
"vehicles": [
{
"year": 2017,
"make": "HYUNDAI",
"model": "ACCENT SE",
"submodel": "ACCENT-SEDAN",
"vin": "KMHCU4AE0HU000000",
"salvaged": false,
"rental": false,
"towing": false,
"alarm": "No Alarm",
"four_wheel_drive": false,
"abs": false,
"airbags": false,
"automatic_seat_belts": false,
"garage": "No Cover",
"ownership": "Own",
"primary_use": "Commute Work",
"annual_miles": 4,
"weekly_commute_days": 5,
"one_way_distance": 2,
"comprehensive_deductible": 500,
"collision_deductible": 500
}
],
"requested_policy": {
"coverage_type": "Preferred",
"bodily_injury": "100/300",
"property_damage": 50000
},
"current_policy": {
"insurance_company": "AMFAM",
"expiration_date": "2025-12-17",
"insured_since": "2022-11-17",
"coverage_type": "Preferred"
}
}
}LeadStats will return a JSON response synchronously. Jangl’s system must wait for this response before proceeding.
The primary field to check is result.
On “Accept”:
The lead has passed verification and may be purchased.
{
"leadId": "amFuZ2wud2VibGVhZHMubG9ncy5hcGkuaW5ib3VuZCsyKzQ2OTYwNTc1Nw==",
"result": "Accept",
"score": 82,
"reason": null
}On “Reject”:
The lead has failed verification and must not be purchased. The reason field may provide additional context.
{
"leadId": "amFuZ2wud2VibGVhZHMubG9ncy5hcGkuaW5ib3VuZCsyKzQ2OTYwNTc1Nw==",
"result": "Reject",
"score": 25,
"reason": "High-risk indicators"
}Response Fields:
leadId (String): An echo of the leadId sent in the request for reconciliation.result (String): The definitive decision. This is the key field."Accept""Reject"score (Number): The numerical score assigned by LeadStats (optional, for logging).reason (String | null): A brief reason for the rejection (optional, for logging).If the LeadStats service encounters an error, it will return a non-200 HTTP status code.
Example Error (HTTP 400 Bad Request):
This occurs if the JSON is malformed or required fields are missing.
{
"error": "Invalid request body: Missing 'zipCode' field."
}Example Error (HTTP 500 Internal Server Error):
This occurs if the LeadStats scoring service has an internal issue.
{
"error": "Internal scoring service error."
}This call is synchronous and blocking. The Jangl platform must wait for the response from the LeadStats endpoint before it responds to the publisher’s ping.
It is critical to implement a reasonable timeout for the request. We recommend a 4-second (3000ms) timeout.
Jangl must define a “fail-safe” behavior in the event of a timeout or an HTTP 5xx error from the LeadStats service.
Recommendation (Fail-Closed):
To prevent purchasing bad leads when the verification service is unavailable, we strongly recommend a “fail-closed” policy.
For questions regarding this integration, please contact the LeadStats integration team at [email protected].