Platform Integrations
Via Webhooks
What is it?
Platform Integrations allow your mobile app to “talk” to other applications (like your CRM) and share important data in real-time. Since we use a technology called Webhooks, your mobile app can send data without a direct API connection. This means your mobile app can send data to thousands of external applications whenever something new happens without any additional development or special integrations.
How it benefits you?
When a user installs your app and enters their contact info, your mobile app can send the new contact to your CRM. This can kick off an automated welcome email, and a task can be scheduled to contact the user.
Later, the same user gets pre-qualified on your app, and it can trigger another workflow that sends a more personalized congrats email.
As a Mortgage Broker, you can use the pre-qualification data to send laser-targeted emails and complete parts of a mortgage application. Hence, no one has to rekey the info again.
As a Realtor, you can use the pre-qualification data to narrow the search filters and email your client new properties within their budget and location.
How to set it up
Admin > Webhooks > Get Started
Open your app and navigate to your Admin. Tap on Webhooks and Get Started
Get your Webhook URL
Ask your CRM company or the platform for your custom CMA Webhook URL. Copy and Paste it into your app.
That's it
Sit back and watch the data flow from your app to your favourite place.
Tutorials
Brokeredge
Google Sheet
HubSpot
Mailchimp
Trello
For Developers
We currently support three types of payloads.
- Client Profile
- Client PreQualification
- CMA Leads
Client Profile
The profile data payload is posted when a client creates a new profile on the professional’s app or logs in to an existing account. The JSON data structure has a type key that shows this is a profile payload.
{
"type": "profile",
"version": "1.0",
"customerId": "CO36817",
"ownerCustomerId": "23",
"firstName": "Ben",
"lastName": "Consumer 2",
"email": "consumer2@bendigi.com",
"phone": "416-720-3044",
"localeIdentifier": "en",
"defaultLocation":
{
"countryCode": "CA",
"province": "ON",
"city": "Toronto",
"longitude": "-79.38459",
"latitude": "43.80549"
},
"createdAt": "2020-07-07T21:40:21.172Z"
}
Aside from basic contact information, the payload also contains unique ids.
customerId is the user’s unique id on your mobile app and should be stored in your CRM because future notifications about this user will include the same key/value so it can be cross-referenced.
ownerCustomerId is the pro’s own unique id with us. This is particularly useful if the pro shares their CRM account with another colleague and both have an app with us. Here you may use the same webhook URL, and this field will help to identify from whose app the data originated.
Client PreQualification
The PreQualification data payload is our most comprehensive data set. The data is posted when a client completes or updates their scenario on their mobile app. The JSON data structure has a type key that identifies this payload as a prequalification.
It also has a unique scenarioId; this system-generated id will live with the scenario. Even if the user updates their input and the data is recalculated and reposted, the scenarioId will not change. However, clients can have multiple PreQual scenarios, so if the user starts an entirely new scenario, the posted data will carry a new scenarioId.
{
"type": "prequalification",
"version": "1.0",
"scenarioId": "3A3E9126-94F3-4D41-BAC0-B93D1BC16842",
"scenarioTitle": "Sally",
"contact": {...},
"applicant":{...},
"subjectProperty":{...},
"mortgage":{...}, // ommited on Realtor apps
"closingCosts":{...},
"qualificationDetails":{...}
}
The Pre-Qualification payload is very comprehensive and comes in multiple sections. If you want to parse all the fields fully, please read this. However, if you are just looking only to extract the most important information that the user has entered, look at the Contact, Applicant and Subject Property sections below.
Contact Section
This entire section is useful and should be retrieved in full.
"contact": {
"customerId": "69",
"firstName": "Ben",
"lastName": "Salami",
"email": "consumer@bendigi.com",
"phone": "416-720-3044"
}
Applicant Section
This will give you the information that the user has entered, including the total available funds they have saved up, their gross annual income, list of liabilities and if they own other properties. The income key is an array of incomes; however, currently, we only have one entry listed as employment income. In the future, users can enter other sources of income, hence the array.
"applicant": {
"totalAvailableFunds": 400000,
"firstTimeBuyer": true,
"foreignBuyer": false,
"creditScoreRange": "800 - 900",
"employmentType": "employed",
"incomes": [
{
"amount": 150000,
"type": "employmentincome",
"frequency": "annual"
}
],
"liabilities": [],
"nonSubjectProperties": []
},
Subject Property
The subject property section will contain the pre-qualified purchase price and other estimates.
If you want the absolute minimum from this section, you should parse out
- purchasePrice,
- downPayment
- propertyLocation.
If you want to go a step further, also look at the propertyType and occupancy.
"subjectProperty": {
"purchasePrice": 999999,
"totalMonthlyCost": 5417.634998018308,
"propertyType": "house",
"brandNewHome": false,
"propertyLocation": {
"province": "Ontario",
"city": "Toronto",
"municipality": "toronto",
"fullAddress": "Toronto, ON, Canada",
"placeId": "ChIJpTvG15DL1IkRd8S0KlBVNTI"
},
"occupancy": "ownerOccupied",
"rentalIncome": {},
"downPayments": [
{
"amount": 173673.9875,
"type": "personalcash"
}
],
"expenses": [
{
"type": "propertytax",
"payment": 5997.03400296,
"frequency": "annual"
},
{
"type": "heat",
"payment": 150,
"frequency": "monthly"
}
]
}
CMA Leads
CMA Leads are generated from users who submit a mortgage requests on the generic Canadian Mortgage App. In order for a professional to receive such leads, they will need to be part of the referral program here.
All payloads are posted with type = lead.
Further, the leadType defines the exact place on the app where these users have submitted the request from. This is not very important once the leads are received but here is what they mean:
- lead_preq: This type of lead is directly generated in the pre-qualification tool
- lead_contact: The user used the main contact form in the home screen or inside one of the tools that allows submission.
- lead_quote: The user visited the rate screen and decided to request a quote for a rate
- lead_rate: The user went further into a specific rate on the app and decided to apply for it.
Mortgage Goal
One of the more important properties in the lead payload is the key mortgageGoal. There are 5 options. Depending on the option, scenario data may also be attached. The 5 options are preapproval, purchase, refinance, renew or other.
Here are some examples of payload for each mortgage goal.
{
"type": "lead",
"version": "1.0",
"leadId": "QfMDqwfeRi",
"leadType": "lead_preq",
"contact": {
"customerId": "CO36752",
"firstName": "Ben",
"lastName": "Salami",
"email": "consumer@bendigi.com",
"phone": "(416) 720-3044",
"preferredContactMethods": [
"text",
"phone",
"email"
],
"preferredContactLanguages": [
"en"
],
"userLocation": {
"province": "ON",
"city": "Toronto"
}
},
"request": {
"clientNotes": "Client notes goes here",
"mortgageGoal": "preapproval",
"propertyValue": 807987.4236961136,
"propertyLocation": {
"province": "Ontario",
"city": "Toronto"
}
},
"scenarioData": {
// follows the PREQ scenario structure
},
"submittedAt": "2023-01-09T21:00:13.901Z"
}
{
"type": "lead",
"version": "1.0",
"leadId": "1H8x0CUNeN",
"leadType": "lead_contact",
"contact": {
"customerId": "CO36752",
"firstName": "Ben",
"lastName": "Salami",
"email": "consumer@bendigi.com",
"phone": "(416) 720-3044",
"preferredContactMethods": [
"text",
"phone",
"email"
],
"preferredContactLanguages": [
"en"
],
"userLocation": {
"province": "ON",
"city": "Toronto"
}
},
"request": {
"clientNotes": "Client noted goes here",
"mortgageGoal": "refinance",
"propertyValue": 1200000,
"mortgageBalance": 250000,
"maturityDate": "2022-12-29T21:06:00.000Z",
"propertyLocation": {
"countryCode": "Canada",
"province": "Ontario",
"city": "Toronto",
"longitude": "-79.3831843",
"latitude": "43.653226"
}
},
"submittedAt": "2022-12-28T21:07:03.895Z"
}
{
"type": "lead",
"version": "1.0",
"leadId": "Ykq77SUvC6",
"leadType": "lead_contact",
"contact": {
"customerId": "CO36752",
"firstName": "Ben",
"lastName": "Salami",
"email": "consumer@bendigi.com",
"phone": "(416) 720-3044",
"preferredContactMethods": [
"text",
"phone",
"email"
],
"preferredContactLanguages": [
"en"
],
"userLocation": {
"province": "ON",
"city": "Toronto"
}
},
"request": {
"clientNotes": "Client noted goes here",
"mortgageGoal": "renew",
"mortgageBalance": 850000,
"existingMortgageRate": {
"rate": 3.0
},
"maturityDate": "2022-12-31T21:08:00.000Z",
"propertyLocation": {
"countryCode": "Canada",
"province": "Ontario",
"city": "Toronto",
"longitude": "-79.3831843",
"latitude": "43.653226"
}
},
"submittedAt": "2022-12-28T21:09:44.735Z"
}
{
"type": "lead",
"version": "1.0",
"leadId": "BR9sH8rptn",
"leadType": "lead_contact",
"contact": {
"customerId": "CO36752",
"firstName": "Ben",
"lastName": "Salami",
"email": "consumer@bendigi.com",
"phone": "(416) 720-3044",
"preferredContactMethods": [
"text",
"phone",
"email"
],
"preferredContactLanguages": [
"en"
],
"userLocation": {
"province": "ON",
"city": "Toronto"
}
},
"request": {
"clientNotes": "Client Notes goes here and it’s a least 30 characters long"
"mortgageGoal": "other",
},
"submittedAt": "2022-12-28T21:30:46.746Z"
}