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."
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.
Ping/Post is a two-step process:
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 ($).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 sending leads, you will need the following:
tagId
, to be used in your production API requests (see below)Modernize hosts two API environments, one for production operations and another for testing:
Environment | Hostname |
---|---|
Production | https://example.leadprosper.tech |
Staging (Test) | https://example.leadprosper.tech |
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. Doing so verifies that you are correctly authenticating, formatting data fields, and authorized to send us leads for your given service(s). Once you have tested and determined that everything is behaving as expected on the Staging environment, you can move to the Production environment.
Use the following HTTP API to offer a lead for sale to Modernize by sending partial information about the lead.
URL | https://example.leadprosper.tech/modernize/coreg/hsleadcapture |
HTTP Method | POST |
Required Request Headers | Content-Type: application/x-www-form-urlencoded |
Request Body | Must contain all Common Parameters required for Ping, plus any
required Service-Specific Parameters. Keys and values
must be encoded in key-value pairs separated by & , with a = between
the key and the value. Non-alphanumeric characters in both keys and values must be URL-Encoded. |
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 the lead along with a PingToken.
Base URL | https://example.leadprosper.tech/modernize/coreg/hsleadcapture |
HTTP Method | POST |
Required Request Headers | Content-Type: application/x-www-form-urlencoded |
Request Body | Must contain all Common Parameters required for Post, plus Service-Specific Parameters. Keys and values must be
encoded in key-value pairs separated by & , with a = between the key
and the value. Non-alphanumeric characters in both keys and values must be URL-Encoded. |
Unless otherwise indicated, the parameters below are accepted for all services.
IMPORTANT:
- All keys and values are CASE-SENSITIVE. If you use different casing, the key or value may be treated as invalid. E.g., use
OwnHome=Yes
, notownhome=yes
.- Keys and values must be encoded in key-value pairs separated by
&
, with a=
between the key and the value.- Non-alphanumeric characters in both keys and values must be URL-Encoded.
Parameter Key/Name | Value(s) | Required on Ping? | Required on Post? | Example |
---|---|---|---|---|
pingType |
PING ONLY. Set to v2 for all Pings. Do not set on Posts. |
Yes | No | v2 |
PingToken |
POST ONLY. Set to PingToken value received from successful Ping response. |
No | Yes | 1234567890 |
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 |
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 |
service |
see Service-Specific Parameter below | Yes | Yes | WINDOWS |
PC |
5-digit US zip code | Yes | Yes | 99751 |
HomePhoneConsent |
PING ONLY. Indicates whether you gathered consent prior to pinging Modernize Home Services. Leave
blank or use No if you did not acquire consent. (Yes , No )
|
Yes | No | Yes |
HomePhoneConsentLanguage |
POST ONLY. Complete, URL-encoded string of of consent language displayed to consumer. Send on Posts only. | No | Yes | Fake%20example%20I%20consent%20to%20receiving%20calls%20etc. (abbreviated for clarity)
|
LeadIDToken |
32-char Jornaya LeadiD Token | Yes* | Yes* | EAF0AAF2-55CD-08A7-DE78-C5A090B3A57B |
TrustedFormToken |
TrustedForm token or token URL | Yes* | Yes* | https%3A%2F%2Fcert.trustedform.com%2F5d9f37382eca1518c752db469cacb6668049c8d3 |
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 |
PublisherSubID |
Publisher's own transaction-level identifier for the lead. | No | Yes | 123456 |
FN |
First name | No | Yes | Quin |
LN |
Last name | No | Yes | Street |
S1 |
Address | No | Yes | 9305%20Nimbus%20Ave |
CT |
City | No | Yes | Kobuk |
SP |
State (USPS abbreviation) | No | Yes | AK |
HP |
Phone (10-digit US, no special chars) | No | Yes | 5039065030 |
EM |
No | Yes | bizdev%40quinstreet.com |
* A compliance certification token is required on all leads. You must pass either or both of
LeadIDToken
(Jornaya) or TrustedFormToken
(ActiveProspect) for a lead to be accepted.
IMPORTANT: All parameters and values are CASE-SENSITIVE. If you pass incorrectly cased parameters or values, they may be treated as invalid
The following parameters should be used on BOTH Ping and Post requests for the service indicated. If Parameter
Name is N/A
below, no additional parameters are required for the service.
Service | Parameter Name | Possible Values | Required? | Example (URL-Encoded) |
---|---|---|---|---|
BATH_REMODEL |
OptIn1 |
Whether the remodel requires removing or adding any walls (No , Yes ) |
No | No |
BATHROOM_REFACING |
N/A | |||
GUTTER_COVERS |
GuttersProjectScope |
(Install , Repair ) |
Yes | Install |
GUTTER_COVERS |
CommercialLocation |
Kind of location (Business , Home ) |
Yes, If Install |
Home |
GUTTERS |
GutterType |
(Copper , Galvanized , PVC , Seamless Metal ,
Wood ) |
Yes | Seamless%20Metal |
GUTTERS |
GuttersProjectScope |
(Install , Repair ) |
Yes | Install |
GUTTERS |
CommercialLocation |
(Business , Home ) |
Yes | Home |
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 |
HVAC |
HVACInterest |
(Install Boiler/Radiator , Install Central AC ,
Install Central Heating , Repair Boiler/Radiator ,
Repair Central AC , Repair Central Heating ) |
Yes | Install%20Central%20AC |
HVAC |
BoilerSystemInstallType |
(NaturalGas , Electric , Oil , PropaneGas ,
Do Not Know ) |
Yes, if Install Boiler/Radiator |
NaturalGas |
HVAC |
CentralHeatingInstallType |
(NaturalGas , Electric , Oil , PropaneGas ,
Do Not Know ) |
Yes, if Install Central Heating |
NaturalGas |
HVAC |
BoilerSystemRepairType |
(NaturalGas , Electric , Oil , PropaneGas ) |
Yes, if Repair Boiler/Radiator |
NaturalGas |
HVAC |
CentralHeatingRepairType |
(NaturalGas , Electric , Oil , PropaneGas ) |
Yes, if Repair Central Heating |
NaturalGas |
ROOFING_ASPHALT |
RoofingPlan |
(Completely replace roof , Repair existing roof ,
Install roof on new construction ) |
Yes | Completely%20replace%20roof |
ROOFING_CEDAR_SHAKE |
RoofingPlan |
(Completely replace roof , Repair existing roof ,
Install roof on new construction ) |
Yes | Completely%20replace%20roof |
ROOFING_COMPOSITE |
RoofingPlan |
(Completely replace roof , Repair existing roof ,
Install roof on new construction ) |
Yes | Completely%20replace%20roof |
ROOFING_METAL |
RoofingPlan |
(Completely replace roof , Repair existing roof ,
Install roof on new construction ) |
Yes | Completely%20replace%20roof |
ROOFING_NATURAL_SLATE |
RoofingPlan |
(Completely replace roof , Repair existing roof ,
Install roof on new construction ) |
Yes | Completely%20replace%20roof |
ROOFING_TAR_TORCHDOWN |
RoofingPlan |
(Completely replace roof , Repair existing roof ,
Install roof on new construction ) |
Yes | Completely%20replace%20roof |
ROOFING_TILE |
RoofingPlan |
(Completely replace roof , Repair existing roof ,
Install roof on new construction ) |
Yes | Completely%20replace%20roof |
SIDING_ALUMINIUM |
ProjectPlan |
(Siding for a new home , Replace existing siding ,
Repair section(s) of siding , Siding for a new addition ) |
Yes | Replace%20existing%20siding |
SIDING_BRICKFACE |
ProjectPlan |
(Siding for a new home , Replace existing siding ,
Repair section(s) of siding , Siding for a new addition ) |
Yes | Replace%20existing%20siding |
SIDING_COMPOSITE_WOOD |
ProjectPlan |
(Siding for a new home , Replace existing siding ,
Repair section(s) of siding , Siding for a new addition ) |
Yes | Replace%20existing%20siding |
SIDING_STONEFACE |
ProjectPlan |
(Siding for a new home , Replace existing siding ,
Repair section(s) of siding , Siding for a new addition ) |
Yes | Replace%20existing%20siding |
SIDING_VINYL |
ProjectPlan |
(Siding for a new home , Replace existing siding ,
Repair section(s) of siding , Siding for a new addition ) |
Yes | Replace%20existing%20siding |
SOLAR |
ElectricBill |
(Under $100 , $100 - $200 , $200 - $300 , $300+ )
|
Yes | %24200%20-%20%24300 |
WALK_IN_TUBS |
Interest |
(Safety , Therapeutic , Other ) |
Yes | Safety |
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 |
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 | |||
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 | |||
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 |
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 |
DeckProjectScope |
(Cleaning , Install , Repair ) |
Yes | Install |
DOOR |
DoorType |
(Storm Door , Exterior , Interior , Sliding Door )
|
Yes | Storm%20Door |
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 |
ElectricalProjectScope |
(Install , Repair ) |
Yes | Install |
EXCAVATION |
N/A | |||
FENCE_VINYL |
FencingProjectScope |
(Install , Repair ) |
Yes | Install |
FENCE_WOOD |
FencingProjectScope |
(Install , Repair ) |
Yes | Install |
FENCING_CHAINLINK |
FencingProjectScope |
(Install , Repair ) |
Yes | Install |
CARPET |
FlooringProjectScope |
(Install , Repair ) |
Yes | Install |
CARPET |
MaterialPurchase |
Have you already purchased materials (Yes , No ) |
Yes, If Install |
No |
FLOORING_HARDWOOD |
FlooringProjectScope |
(Install , Repair , Refinishing ) |
Yes | Install |
FLOORING_HARDWOOD |
MaterialPurchase |
Have you already purchased materials (Yes , No ) |
Yes, If Install |
No |
FLOORING_HARDWOOD |
CommercialLocation |
Kind of location (Business , Home ) |
Yes, If Repair |
Home |
FLOORING_LAMINATE |
FlooringProjectScope |
(Install , Repair ) |
Yes | Install |
FLOORING_LAMINATE |
MaterialPurchase |
Have you already purchased materials (Yes , No ) |
Yes, If Install |
No |
FLOORING_LAMINATE |
CommercialLocation |
Kind of location (Business , Home ) |
Yes, If Repair |
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 ) |
Yes, If Install |
No |
FLOORING_VINYL_LINOLEUM |
CommercialLocation |
Kind of location (Business , Home ) |
Yes, If Repair |
Home |
FRAMING |
N/A | |||
GARAGE_DOOR |
GarageDoorProjectScope |
(Install , Repair ) |
Yes | Install |
GARAGE_DOOR |
CommercialLocation |
Kind of location (Business , Home ) |
Yes, If Repair |
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 |
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 | |||
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%20or%20more |
PATIO_COVERS |
N/A | |||
PEST_CONTROL |
PestType |
(BirdsBats , BugsInsects , Rodents , SmallAnimals ,
Termite ) |
Yes | BugsInsects |
PEST_CONTROL |
CommercialLocation |
(Business , Home ) |
Yes | Home |
PLUMBING |
PlumbingProjectScope |
(Install , Repair ) |
Yes | Repair |
POOL |
PoolType |
(InGround , AboveGround ) |
Yes | InGround |
POOL |
PoolProjectScope |
(Install , Maintenance , Repair ) |
Yes | Install |
POOL |
InGroundType |
(Concrete , Fiberglass , VinylLined ) |
Yes, if InGround |
Fiberglass |
POOL |
CommercialLocation |
(Business , Home ) |
Yes | Home |
POOL |
MaterialPurchase |
Have you already purchased materials (Yes , No ) |
Yes, If AboveGround |
No |
POWER_WASHING |
N/A | |||
REMODELING |
N/A | |||
ROOM_ADDITIONS |
N/A | |||
SATELLITE_TV |
N/A | |||
SEPTIC_SEWER |
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%20existing%20siding |
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 | |||
WINDOW_BLINDS |
N/A | |||
WINDOW_DRAPERIES |
N/A | |||
WINDOW_SHUTTERS |
N/A | |||
WIRING_LOW_VOLTAGE |
N/A |
Example Ping Request:
POST /modernize/coreg/hsleadcapture HTTP/1.1
Host: https://example.leadprosper.tech
Content-Type: application/x-www-form-urlencoded
Content-Length: 350
pingType=v2&tagId=204670250&service=WINDOWS&PC=99751&NumberOfWindows=6-9&WindowsProjectScope=Install&BuyTimeframe=Immediately&OwnHome=Yes&HomePhoneConsent=Yes&LeadIDToken=EAF0AAF2-55CD-08A7-DE78-C5A090B3A57B&TrustedFormToken=https%3A%2F%2Fcert.trustedform.com%2F5d9f37382eca1518c752db469cacb6668049c8d3&PublisherSubID=123456&PartnerSourceID=CampaignA
Example Ping Response - Success:
200 OK
{
"STATUS":"SUCCESS",
"PINGTOKEN":"50108462152",
"PRICE":"50"
}
Example Ping Response - Unmatched:
200 OK
{
"STATUS":"REJECTED"
}
Example Error Response - Not Authorized for Service:
200 OK
{
"STATUS":"ERROR",
"VALIDATION MESSAGE":"900- Service/Pricing not setup - please contact your account representative."
}
Example Post Request (newline characters shown for clarity):
POST /modernize/coreg/hsleadcapture HTTP/1.1
Host: https://example.leadprosper.tech
Content-Type: application/x-www-form-urlencoded
Content-Length: 522
PingToken=50108510154&tagID=204670250&service=WINDOWS&PC=99751&NumberOfWindows=6-9&WindowsProjectScope=Install&BuyTimeframe=Immediately&OwnHome=Yes&LeadIDToken=EAF0AAF2-55CD-08A7-DE78-C5A090B3A57B&TrustedFormToken=https%3A%2F%2Fcert.trustedform.com%2F5d9f37382eca1518c752db469cacb6668049c8d3&PublisherSubID=123456&PartnerSourceID=CampaignA&HomePhoneConsentLanguage=Fake%20example%20I%20consent%20to%20receiving%20calls%20etc.&FN=Quin&LN=Street&S1=9305%20Nimbus%20Ave&CT=Kobuk&SP=AK&HP=5039065030&EM=bizdev%40quinstreet.com
Example Post Response - Accepted:
200 OK
{
"STATUS":"ACCEPTED",
"GDCKEY":"10221479803"
}
Example Post Response - Rejected for Validation Failure:
200 OK
{
"STATUS":"REJECTED",
"VALIDATIONMESSAGE":"Lead is failed in Targus Validations"
}
Example Post Response - Rejected for Vendor Duplicate
200 OK
{
"STATUS":"REJECTED",
"VALIDATIONMESSAGE":"Lead already submitted for the vendors matched"}
}
Example Post Response - Error, Invalid Zip
200 OK
{
"STATUS":"REJECTED",
"VALIDATION MESSAGE":"Lead is rejected",
"ERRORS":[
"Invalid Zip Code"
]
}
Example Post Response - Error, Invalid Service
200 OK
{
"STATUS":"REJECTED",
"VALIDATION MESSAGE":"Lead is rejected",
"ERRORS":[
"Please fix the service code: WAS"
]
}
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. |
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. |
tagId
FieldThe 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.
pingType
and PingToken
FieldspingType=v2
must ONLY be passed on Ping requests. It is the field that differentiates Ping
requests from Post requests. Make sure the parameter is NOT included with your Post.PingToken
from the Ping response to put in the Post request as instructed
in Common Parameters.HomePhoneConsent=Yes
indicating that your user saw consent.HomePhoneConsentLanguage=<...>
, including the full language that was shown
to the user on-site, in URL-encoded form. Do NOT pass HomePhoneConsent=Yes
. Please ask your
account manager for details on what exact language we accept.TrustedFormToken
field.LeadIDToken
field. Check with your account manager if there are any issues.TrustedFormToken
and LeadIDToken
on both Ping and Post requests.