Dashboard
Instant Valuation Tool
Lead Responder
Autocaller

Using Webhooks

Basic

You can configure your LeadPro account to send events to a designated endpoint when a lead is either created or updated. This is known as a 'webhook'.

To use the webhook functionality, you'll need to:

  1. Create an endpoint to receive the data from LeadPro

  2. Add the endpoint URL to the developers section of your dashboard

Once enabled, LeadPro will POST the event data to your endpoint as JSON. The payload contains two fields:

  • "event" – which can be either "lead.created" or “lead.updated”

  • "data" – which contains the lead data, and consists of the following fields:

Field
Type
Example
Mandatory
Validation
id
Number
1
Yes
auto-generated
first_name
String
Richard
No
length : min 1 max 50
last_name
String
Smith
No
length : min 1 max 50
full_name
String
Richard Smith
Yes
length min 1 max 100
email
String
richard.smith@gmail.com
Yes
valid email address
phone
String
07123456789
Yes
length : max 255 ( only valid UK phone numbers will be called by autocaller)
type
String
vendor
Yes
either : 'sale', 'vendor', 'landlord', 'let', 'mortgage_request'
source
String
rightmove
No
you can submit a specific lead source only for /leads. If no source is submitted source will default to 'homepage'.
address
String
51 Asimov Place, Starbridge
Yes if Vendor/Landlord/ Mortgage
length : max 100
postcode
String
N1 3JY
Yes if Vendor/Landlord/ Mortgage
length : min 2 max 10
advert_address
String
51 Asimov Place, Starbridge
No
length : max 100
advert_postcode
String
N1 3JY
No
length : min 2 max 10
advert_url
String
https://www.site.com/result
No
length : max 255
advert_image
String
https://via.placeholder.com/150
No
length : max 255
title
String
Mr
No
length : min 1 max 10
message
String
When can I view this property?
No
length : max 255
appointment_availability
JSON
{ hours: [ 2021-04-22T10:00:00.000Z, 2021-05-22T10:00:00.000Z, ] }
No
max JSON byte size 2048, array values must be ISO 8601 date string
meta
Record<String, String>
{“virtual tour”: “true”}
No
max JSON byte size 1024, object with only string values
questionnaire
String[][]
[[“Do you have property to sell?”, “yes”], [“When would you like to move”, “Before july”]]
No
max JSON byte size 2048, each value in questionnaire should be array of strings with 2 elements
parentId
Number
54
No
Must be a valid parent lead
createdAt
String(ISO 8601)
2000-01-23T01:23:45.678+09:00
No
not writeable
status
String
active
No
must be UNREAD, IN_PROGRESS, NO_BUSINESS, BUSINESS, DUPLICATE
stage
String
complete
No
must be NEW CONTACTED, KEEP_IN_TOUCH, LOST, NOT_CONTACTABLE, WON VALUATION_BOOKED, INSTRUCTED, VIEWING_BOOKED, REGISTERED, DUPLICATE, SPAM DELETED,
gdpr_checkbox
Boolean
false
No
N/A
host
String
https://valuation.mydomain.com
No
N/A
average_sale_estimation
Number
10000
No
max 2 decimal places
average_rent_estimation
Number
1000000
No
max 2 decimal places
office_id
Number
567
No
Must be a valid office_id
property_reference
String
'your unique property reference'
If type 'sale' or 'let'
N/A
property_bedrooms
Number
4
If type 'vendor' or 'landlord'
N/A
office_name
String
Oxford
No
Not writeable
minimum_sale_estimation
Number
10000
No
max 2 decimal places
maximum_sale_estimation
Number
233333
No
max 2 decimal places
minimum_rent_estimation
Number
55444333
No
max 2 decimal places
maximum_rent_estimation
Number
343444455
No
max 2 decimal places
comparable_props
Object[]
{ "address": "68 Uftwen Road", "beds": 4, "coords": { "x": -0.082544, "y": 51.5422 }, "date": "2021-02-10T00:00:00.000Z", "distance": 166, "months_ago": 7, "original_asking_price": 2150000, "price": 1782500, "time_taken_to_sell": 76 }
No
Not writeable
{
  event: lead.updated,
  data: {
    id: 1,
    title: "Sir",
    first_name: "Richard",
    last_name: "Branson",
    email: "rbranson@virgin.com",
    type: "vendor",
    source: "homepage",
    phone: 07123456789,
    address: "51 Asimov Place, Starbridge",
    postcode: "N1 3JY",
    advert_address: "51 Asimov Place, Starbridge",
    advert_postcode: "N1 3JY",
    advert_image: "https://www.site.com/result",
    advert_url: "https://via.placeholder.com/150",
    appointment_availability: {
      hours: ["2021-01-01T08:00:00.000Z", "2021-01-01T09:00:00.000Z"],
    },
    full_name: "Sir Ricard Branson"    message: "When can we view?",
    meta: {
      virtual tour: true
    }
  }
}

Advanced

For additional security, you may wish to verify that the requests being made to your endpoint are coming from LeadPro. We include a JWT token in the "Authorization" header, as follows:

{   
  alg: "HS256",
  typ: "JWT"
}

The body of this token contains the full payload, and we recommend using this instead of the actual payload.

The token signature is the base64 encoding of the HS256 encrypted header and body. The key for verifying this signature can be found in the developers section of your dashboard.

All 3 values are then concatenated together using fullstops as separators, to form the actual token which is then included in the request header.

If at any point, your key becomes compromised, we recommend renewing it in the developers section.

Webhook signing secret (optional)

The secret is used to decrypt the payload when received by the endpoint you have setup. It's entirely optional as we also send the data unencrypted as part of the same request.

Contents