Ping Post v3 API

All material confidential. Materials constitute proprietary information of Modernize Home Services and QuinStreet, Inc. and may be used by the recipient solely to evaluate an existing business relationship with Modernize Home Services. All other rights reserved by Modernize Home Services.

This document contains detailed instructions and examples for how to sell leads to Modernize Home Services through our Ping Post web API, using a two-step process known as “Ping/Post.”

Contents

Document Revision: DRAFT Jan 2025

How It Works

Ping/Post is a two-step process:

  1. Ping - You offer a lead to us by first sending our API partial information about the lead, e.g., service and zipcode. We respond, indicating whether we can buy the lead and for how much ($).
  2. Post - You send us the full details of the lead. We respond, confirming receipt. If the lead is a duplicate or invalid lead, we return an error response indicating the reason.

Details for each step are explained in-depth below.

Before You Start

Before you start sending leads, you will need the following:

Environments

Modernize hosts two API environments, one for production operations and another for testing:

Environment Hostname
Production form-service-hs.qnst.com
Staging (Test) hsapiservice.quinstage.com

The Staging environment is for testing. No staging environment leads will be billable.

IMPORTANT: Before sending real leads to the Production environment, you must first test using the Staging environment. This process ensures that you are correctly authenticating, formatting data fields, and authorized to send us leads for your given service(s). During this step, you will test on your end to confirm functionality. Once testing is complete, we will verify that everything looks correct and confirm that you are ready to go. After our confirmation, you can move to the Production environment once we enable you.

Ping

Use the following HTTP API to offer a lead for sale to Modernize by sending partial information about the lead.

Field Value
URL https://<host>/ping-post/pings
HTTP Method POST
Required Request Headers Content-Type: application/json
Request Body Must contain all Common Parameters required for Ping, plus any required Service-Specific Parameters. Keys and values must be encoded in JSON format.

Post

Use the following API after a successful Ping response (see above) to transact a sale of a lead to Modernize Home Services, by sending full details of the lead along with a pingToken.

Field Value
Base URL https://<host>/ping-post/posts
HTTP Method POST
Required Request Headers Content-Type: application/json
Request Body Must contain all Common Parameters required for Post, plus Service-Specific Parameters. Keys and values must be encoded in JSON format.

Common Parameters [CASE-SENSITIVE]

Unless otherwise indicated, the parameters below are accepted for all services.

IMPORTANT: PARAMETER NAMES HAVE CHANGED in our new API. Additionally, all keys and values are CASE-SENSITIVE AND MAY FOLLOW A DIFFERENT CASING CONVENTION. Some parameters follow the “camelCase”-style convention, while other may follow a “TitleCase”-style convention; E.g., use ownHome, not OwnHome. Please look closely at this document to understand the exact required names for parameters and their possible values. If you pass an invalid parameter name or value, your lead may be rejected.

Parameter Key/Name Value(s) Required on Ping? Required on Post? Example
tagId (provided by account manager). IMPORTANT: tagId varies by environment. When submitting to the production environment, use your production tagId. Test submissions to the staging environment should use 204670250. Note that test submissions are not billable. Yes Yes 204670250
service see Service-Specific Parameter below Yes Yes WINDOWS
postalCode 5-digit US zip code Yes Yes 99751
buyTimeframe (Immediately, 1-6 months, Don't know) Yes Yes Immediately
ownHome (Yes, No) If not the owner, but is authorized to make improvements, use Yes Yes Yes Yes
partnerSourceId Value to identify campaigns by marketing efforts or channels on the publisher side. Helps Modernize track and report quality back to publisher Yes Yes CampaignA
pingToken POST ONLY. Set to pingToken value received from successful Ping response. No Yes 1234567890
homePhoneConsentLanguage POST ONLY. Complete, string of consent language displayed to consumer. Send on Posts only. No Yes Fake example I consent to receiving calls etc. (abbreviated for clarity)
leadIDToken 32-char Jornaya LeadiD Token No Yes* EAF0AAF2-55CD-08A7-DE78-C5A090B3A57B
trustedFormToken TrustedForm token or token URL No Yes* https://cert.trustedform.com/5d9f37382eca1518c752db469cacb6668049c8d3
publisherSubId Publisher’s own transaction-level identifier for the lead. Yes Yes 123456
firstName First name No Yes Quin
lastName Last name No Yes Street
address Address No Yes 9305 Nimbus Ave
city City No Yes Kobuk
state State (USPS abbreviation) No Yes AK
phone Phone (10-digit US, no special chars) No Yes 5039065030
email Email No Yes bizdev@quinstreet.com

* A compliance certification token is required for all leads. You must pass the trustedFormToken (ActiveProspect) for a lead to be accepted. The leadIDToken (Jornaya) may be passed along with the trustedFormToken but is not required.

Service-Specific Parameters [CASE-SENSITIVE]

The following parameters are optional on the Post operation, unless otherwise indicated. Providing these additional parameters can help reduce the likelihood of a post reject occuring. If Parameter Name is N/A below, no additional parameters are required for the service.

IMPORTANT: PARAMETER NAMES HAVE CHANGED in our new API. Additionally, all keys and values are CASE-SENSITIVE AND MAY FOLLOW A DIFFERENT CASING CONVENTION. Some parameters follow the “camelCase”-style convention, while other may follow a “TitleCase”-style convention; E.g., use GuttersType, not guttersType. Please look closely at this document to understand the exact required names for parameters and their possible values. If you pass an invalid parameter name or value, your lead may be rejected.

Common Services

Service Parameter Name Possible Values Required? Example (URL-Encoded)
ALERTS_MEDICAL MedicalAlertProtection (Home, OnTheGo, Both) Yes Home
ALERTS_MEDICAL WhoseMedicalAlert (Myself, SomebodyElse) Yes Myself
BATH_REMODEL OptIn1 Whether the remodel requires removing or adding any walls (No, Yes) No No
BATHROOM_REFACING N/A
DRAINS DrainageIssue (Pumps, Garbage disposal, Leak) Yes Leak
DUMPSTER_RENTAL BuyTimeframe (Within a week, Within two weeks, Within a month, Immediately) No Immediately
FULL_SERVICE_JUNK_REMOVAL JunkVolume (Single item, Multiple items, Room of items, Full cleanout) Yes Full cleanout
GENERATOR ProjectScope (Install, Repair) Yes Install
GENERATOR GeneratorType (Portable, Non-portable) Yes Portable
GUTTER_COVERS GuttersProjectScope (Install, Repair) Yes Install
GUTTER_COVERS CommercialLocation Kind of location (Business, Home) Yes Home
GUTTERS GutterType (Copper, Galvanized, PVC, Seamless Metal, Wood) Yes Seamless Metal
GUTTERS GuttersProjectScope (Install, Repair) Yes Install
GUTTERS CommercialLocation (Business, Home) Yes Home
GUTTER_CLEANING N/A
HOME_SECURITY HomeSecurityProjectScope (Equipment, Install, Reactivate) Yes Install
HOME_SECURITY SecuritySystemInstallationType (NoPreference, SelfInstall, ProfessionalInstall) Yes ProfessionalInstall
HOME_SECURITY CommercialLocation (Business, Home) Yes Home
HOME_WARRANTY Interest Why are you interested? (BuyHome, ProtectHome, RealEstateProfessional, Other) Yes BuyHome
HOT_TUBS HotTubUse (Relaxation, PainAndHealth, Other) Yes PainAndHealth
HOT_TUBS HotTubType (Large, Medium, Small) Yes Large
HVAC HVACInterest (Install Boiler/Radiator, Install Central AC, Install Central Heating, Repair Boiler/Radiator, Repair Central AC, Repair Central Heating ) Yes Install Central AC
HVAC BoilerSystemInstallType (NaturalGas, Electric, Oil, PropaneGas, Do Not Know) Yes NaturalGas
HVAC CentralHeatingInstallType (NaturalGas, Electric, Oil, PropaneGas, Do Not Know) Yes NaturalGas
HVAC BoilerSystemRepairType (NaturalGas, Electric, Oil, PropaneGas) Yes NaturalGas
HVAC CentralHeatingRepairType (NaturalGas, Electric, Oil, PropaneGas) Yes NaturalGas
LABOR_SERVICES BuyTimeFrame (Within a week, Within two weeks, Within a month, Immediately) No Immediately
MOVING BuyTimeFrame (Within a week, Within two weeks, Within a month, Immediately) No Immediately
PLUMBING PlumbingProjectScope (Install, Repair) Yes Repair
REPIPE ProjectScope (Install, Repair) Yes Install
ROOFING_ASPHALT RoofingPlan (Completely replace roof, Repair existing roof, Install roof on new construction) Yes Completely replace roof
ROOFING_CEDAR_SHAKE RoofingPlan (Completely replace roof, Repair existing roof, Install roof on new construction) Yes Completely replace roof
ROOFING_COMPOSITE RoofingPlan (Completely replace roof, Repair existing roof, Install roof on new construction) Yes Completely replace roof
ROOFING_METAL RoofingPlan (Completely replace roof, Repair existing roof, Install roof on new construction) Yes Completely replace roof
ROOFING_NATURAL_SLATE RoofingPlan (Completely replace roof, Repair existing roof, Install roof on new construction) Yes Completely replace roof
ROOFING_TAR_TORCHDOWN RoofingPlan (Completely replace roof, Repair existing roof, Install roof on new construction) Yes Completely replace roof
ROOFING_TILE RoofingPlan (Completely replace roof, Repair existing roof, Install roof on new construction) Yes Completely replace roof
SEWER DrainageIssue (Slow drainage, Water backing up/gurgling) Yes Slow drainage
SIDING_ALUMINIUM ProjectPlan (Siding for a new home, Replace existing siding, Repair section(s) of siding, Siding for a new addition) Yes Replace existing siding
SIDING_BRICKFACE ProjectPlan (Siding for a new home, Replace existing siding, Repair section(s) of siding, Siding for a new addition) Yes Replace existing siding
SIDING_COMPOSITE_WOOD ProjectPlan (Siding for a new home, Replace existing siding, Repair section(s) of siding, Siding for a new addition) Yes Replace existing siding
SIDING_STONEFACE ProjectPlan (Siding for a new home, Replace existing siding, Repair section(s) of siding, Siding for a new addition) Yes Replace existing siding
SIDING_VINYL ProjectPlan (Siding for a new home, Replace existing siding, Repair section(s) of siding, Siding for a new addition) Yes Replace existing siding
SOLAR ElectricBill (Under $100, $100 - $200, $200 - $300, $300+) Yes $200 - $300
STAIR_LIFTS ReasonForStairLift (Safety, Mobility, Other) Yes Safety
TREE_SERVICES JobType (Tree Removal, Tree Trimming, Stump Removal, Other) Yes Tree Removal
TREE_SERVICES NumberOfTrees (1, 2, 3, 4+) Yes 1
WALK_IN_TUBS Interest (Safety, Therapeutic, Other) Yes Safety
WATER_MAIN PortalServiceCode (SEWER, WATER_MAIN, DRAINS, WATER_HEATERS) Yes DRAINS
WATER_HEATERS ProjectScope (Install, Repair) Yes Install
WATER_TREATMENT BuyTimeFrame (Immediately, Within two weeks, Flexible) No Immediately
WATER_TREATMENT ServiceType (CITY_WATER, WELL_WATER, UNSURE) Yes CITY_WATER
WINDOWS NumberOfWindows (1, 2, 3-5, 6-9) If more than 9 windows, use 6-9 Yes 6-9
WINDOWS WindowsProjectScope (Install, Repair) Yes Install
WALK_IN_SHOWERS N/A

Other Services

Service Parameter Name Possible Values Required? Example (URL-Encoded)
ARCHITECTURAL_PLAN_DESIGNS N/A
ASPHALT N/A
BASEMENT_REMODELING N/A
BASEMENT_WATERPROOFING N/A
CRAWLSPACE_ENCAPSULATION N/A
BRICK_WORK N/A
CABINET_INSTALL N/A
CABINET_REFACING N/A
CARPENTRY N/A
CARPET_WHOLESALE N/A
CHIMNEY_CLEANING N/A
CARPET_CLEANING N/A
CRAWLSPACE_ENCAPSULATION N/A
HOUSE_CLEANING N/A
OFFICE_CLEANING N/A
UPHOLSTERY_CLEANING N/A
WINDOWS_CLEANING N/A
CONCRETE_FLATWORK ConcreteProjectScope (Install, Repair) Yes Install
CONCRETE_FLATWORK CommercialLocation (Home,Business) Yes Home
CONCRETE_FOUNDATION ConcreteProjectScope (Install, Repair) Yes Install
CONCRETE_FOUNDATION CommercialLocation (Home,Business) Yes Home
CONCRETE_STAMPED_COLOR ConcreteProjectScope (Install, Repair) Yes Install
CONCRETE_STAMPED_COLOR CommercialLocation (Home,Business) Yes Home
CONCRETE_LIFT_LEVEL ProjectScope (Install, Repair) Yes Install
COUNTERTOP CountertopType (Concrete, Granite, Laminate, Marble, Other Solid Stone, Solid Surface, Stainless Steel, Wood) Yes Marble
COUNTERTOP CountertopProjectScope (Install, Repair) Yes Install
CUSTOM_HOMES_WITH_LOT N/A
CUSTOM_HOMES_WITHOUT_LOT N/A
DECK ProjectScope (Cleaning, Install, Repair) Yes Install
DOOR DoorType (Storm Door, Exterior, Interior, Sliding Door) Yes Storm Door
DOOR DoorProjectScope (Install, Repair) Yes Install
DOOR CommercialLocation (Business, Home) Yes Home
DRAINAGE N/A
DRYROT N/A
DRYWALL_SHEETROCK DrywallProjectScope (Install, Repair) Yes Install
ELECTRICAL ProjectScope (Install, Repair) Yes Install
EXCAVATION N/A
FENCE_VINYL ProjectScope (Install, Repair) Yes Install
FENCE_WOOD ProjectScope (Install, Repair) Yes Install
FENCE_METAL ProjectScope (Install, Repair) Yes Install
FENCING_CHAINLINK ProjectScope (Install, Repair) Yes Install
CARPET FlooringProjectScope (Install, Repair) Yes Install
CARPET MaterialPurchase Have you already purchased materials (Yes, No) No No
FLOORING_HARDWOOD FlooringProjectScope (Install, Repair, Refinishing) Yes Install
FLOORING_HARDWOOD MaterialPurchase Have you already purchased materials (Yes, No) No No
FLOORING_HARDWOOD CommercialLocation Kind of location (Business, Home) Yes
FLOORING_LAMINATE FlooringProjectScope (Install, Repair) Yes Install
FLOORING_LAMINATE MaterialPurchase Have you already purchased materials (Yes, No) No No
FLOORING_LAMINATE CommercialLocation Kind of location (Business, Home) Yes Home
FLOORING_SUBFLOORS FlooringProjectScope (Install, Repair) Yes Install
FLOORING_TILE FlooringProjectScope (Install, Repair) Yes Install
FLOORING_VINYL_LINOLEUM FlooringProjectScope (Install, Repair) Yes Install
FLOORING_VINYL_LINOLEUM MaterialPurchase Have you already purchased materials (Yes, No) No No
FLOORING_VINYL_LINOLEUM CommercialLocation Kind of location (Business, Home) Yes Home
FRAMING N/A
GARAGE_DOOR GarageDoorProjectScope (Install, Repair) Yes Install
GARAGE_DOOR CommercialLocation Kind of location (Business, Home) Yes Home
GARAGE_REMODEL CommercialLocation Kind of location (Business, Home) Yes Home
HANDYMAN CommercialLocation (Business, Home) Yes Home
HOME_MAGAZINE N/A
INSULATION SubProductService (Batts, Blown, Spray, NotSure) Yes Blown
INSULATION InsulationLocation (Attic, Walls, Basement, CrawlSpace, Other)
KITCHEN_REMODEL N/A
KITCHEN_REMODEL N/A
DEBRIS_HAULING N/A
LANDSCAPING_ARCHITECT N/A
LANDSCAPING_DESIGN_INSTALL N/A
LANDSCAPING_LAWN_AERATING N/A
LANDSCAPING_LAWN_SEEDING N/A
LANDSCAPING_MAINTENANCE N/A
LANDSCAPING_SOD N/A
LAWN_TREATMENT N/A
MOLD_REMEDIATION N/A
RETAINING_WALLS N/A
SPRINKLER SprinklerProjectScope (Install, Repair) Yes Install
MARBLE_AND_GRANITE N/A
EXTERIOR_PAINTING N/A
INTERIOR_PAINTING NumberOfRooms (1-2, 3-4, 5-6, 7-8, 9 or more) Yes 9 or more
PAVERS ProjectScope (Install, Repair) Yes Install
PATIO_COVERS N/A
PEST_CONTROL PestType (BirdsBats, BugsInsects, Rodents, SmallAnimals, Termite) Yes BugsInsects
PEST_CONTROL CommercialLocation (Business, Home) Yes Home
POOL PoolType (InGround, AboveGround) Yes InGround
POOL PoolProjectScope (Install, Maintenance, Repair) Yes Install
POOL InGroundType (Concrete, Fiberglass, VinylLined) Yes Fiberglass
POOL CommercialLocation (Business, Home) Yes Home
POOL MaterialPurchase Have you already purchased materials (Yes, No) No No
POWER_WASHING N/A
REMODELING N/A
ROOM_ADDITIONS N/A
SATELLITE_TV N/A
SEPTIC_SEWER [DEPRECATED] N/A
SHEDS N/A
STUCCO_EXTERIOR ProjectPlan (Siding for a new home, Replace existing siding, Repair section(s) of siding, Siding for a new addition) Yes Replace existing siding
SKYLIGHT N/A
SNOW_REMOVAL N/A
STONE_MASONRY N/A
STORAGE N/A
STUCCO_INTERIOR N/A
SUNROOM N/A
TILE_EXTERIOR N/A
TILE_INTERIOR N/A
WALLPAPER N/A
WATER_DAMAGE N/A
WINDOW_BLINDS N/A
WINDOW_DRAPERIES N/A
WINDOW_SHUTTERS N/A
WIRING_LOW_VOLTAGE N/A

Example

Ping

Example Ping Request:

POST /ping-post/pings HTTP/1.1
Host: <hostname>
Content-Type: application/json
{
    "tagId": "204670250",
    "service": "WINDOWS",
    "postalCode": "99751",
    "buyTimeFrame": "Immediately",
    "ownHome": "Yes"
}

Example Ping Response - Success:

201 Created
{
    "status":"success",
    "pingToken": "VBny1dlGo483ZVsJj24BW1xWpA0RrK5z",
    "price":"50",
    "message": null
}

Example Ping Response - Rejected

{
    "status":"rejected",
    "pingToken": null,
    "price": null,
    "message": null
}

Example Ping Response - Error

{
    "status":"error",
    "message": "postalCode is required." 
}

Post Lead

Example Post Request (newline characters shown for clarity):

POST /ping-post/posts HTTP/1.1
Host: <hostname>
Content-Type: application/json
{
    "pingToken": "VBny1dlGo483ZVsJj24BW1xWpA0RrK5z",
    "tagId": "204670250",
    "service": "WINDOWS",
    "NumberOfWindows": "6-9",
    "WindowsProjectScope": "Install",
    "buyTimeframe": "Immediately",
    "ownHome": "Yes",
    "leadIDToken": "EAF0AAF2-55CD-08A7-DE78-C5A090B3A57B",
    "trustedFormToken": "https://cert.trustedform.com/5d9f37382eca1518c752db469cacb6668049c8d3",
    "publisherSubId": "123456",
    "partnerSourceId": "CampaignA",
    "firstName": "John",
    "lastName": "doe",
    "email": "john.doe@gmail.com",
    "phone": "5403216765",
    "state": "CA",
    "address": "1234 st",
    "postalCode": "99751",
    "homePhoneConsentLanguage": "Fake example I consent to receiving calls etc."
}

Example Post Response - Success:

201 Created
{
    "status": "success",
    "leadId": "50108462152",
    "message": null
}

Example Post Response - Rejected

{
    "status": "rejected",
    "message": "pingToken invalid/ pingToken expired",
    "leadId": null
}

Response & Error Codes

Ping Errors

STATUS VALIDATION MESSAGE Meaning
rejected N/A No matches were found for the given lead
error 100-Invalid Username and Password You are not authorized to use the service with the given credentials. Check your tagId and consult with your account manager if needed. IMPORTANT: tagId varies by environment. When submitting to the production environment, use your production tagID. Test submissions to the staging environment should use 204670250. Test submissions are not billable.
error 200-Service is required A service field was either not given or contains an invalid value. NOTE: check casing of both the key and value. See Common Parameters and list of service codes above.
error 300-Zipcode is required A zip/postal code (PC field) was either not found or is invalid.
error 900- Duplicate Ping Request The ping is a duplicate, meaning we have received another ping with the same service + zip from you within the past 10 minutes.
error 900- Service/Pricing not setup - please contact your account representative. You are not authorized to post leads for the given service code. Consult your account manager if needed.

Post Errors

STATUS VALIDATION MESSAGE ERRORS Meaning
rejected Lead is rejected N/A No matches were found for the given lead.
rejected Lead is already submitted for the vendors matched N/A Matched vendors have already received the lead.
rejected Lead is rejected as rejected by matched vendors N/A Matched vendors did not accept the lead.
rejected Lead is rejected OwnHome () is a Required field Invalid or missing OwnHome field.
rejected Lead is rejected Service () is a Required field Invalid or missing service field.
rejected Lead is rejected [{}] Another validation error occurred. Examples include: invalid contact information (first name, last name, address), obscenity, invalid compliance token (e.g., TrustedForm), fraud detected, or other error.

FAQ

How long is a pingToken valid?

While most posts are expected to be completed within a few minutes of the ping (typically 3 minutes or less), we understand that some consumers may take longer to finish their actions. Therefore, pingToken validity extends up to 30 minutes, accommodating these scenarios.

Appendix

Additional Tips

tagId Field

The tagId is unique to your publisher account and authorizes you to send leads for particular services. tagID=204670250 is used only for the Staging environment. Once we confirm stage tests and you move to using the production API, this value must be replaced with the tagID value given to you by your account manager. NOTE: Test submissions are not billable.

Compliance Certification Token

Successful Testing in Staging

While integrating with the API in our staging environment you’ll need to test successful matches scenarios. To guarantee your testing lead matches with clients, you can use one of the following trade specific examples with either of the following postal codes.

Solar

{
    "tagId": "204670250",
    "service": "SOLAR",
    "postalCode": "99004",
    "buyTimeframe": "Immediately",
    "ownHome": "Yes",
    "partnerSourceId" : "campaignA",
    "publisherSubId" : "123456678",
    "ElectricBill" : "$100 - $200"
}
Postal Code
06880
93212
23324
92604
80504
92345

Roofing

{
    "tagId": "204670250",
    "service": "ROOFING_METAL", // ROOFING_COMPOSITE, ROOFING_ASPHALT, or 
    "postalCode": "84601",
    "buyTimeframe": "Immediately",
    "ownHome": "Yes",
    "partnerSourceId": "CampaignA",
    "publisherSubId" : "123456678",
    "RoofingPlan" : "Install roof on new construction"
}
Postal Code
98532
97080
75215
27046