Webhook Integration
CRF Connect Leads sent via a webhook data is available in your partner settings. Our webhook system will PUSH (as opposed to PULL or polling) a single lead at a time which looks like the below sample.
Currently webhook configuration is not self-serve, so to set up a webhook you will need to provide Connect with the following:
- An https endpoint which can receive POST requests with a JSON body
- Any headers you need attached to the request (name and value). This can be used to attach a secure API key
- Whether you want to receive lead updates, or just the initial lead submission
HTTPS Endpoint
Some HTTPS endpoint is required (i.e. https://my-service.com/leads) to receive leads from Connect. The address should be designed to be called by a machine, not a human being, and should be unique or secured with a secret transmitted in the header.
Helpful Tools
There are great tools that can jump-start your lead intake process to your own CRM system. The following services support both Microsoft Dynamics CRM and Salesforce.
Queueing Leads
Connect includes support for queueing leads for future processing as an alternative to directly POSTing the leads to an API or integration. This works by pushing your leads into a managed service such as Azure Storage.
Azure Storage
To use Azure Storage, you must provide Connect with a pre-authenticated URL to an Azure Storage Queue or an Azure Blob Storage Container. You can then create a scheduled job to pull leads from the queue/container into your CRM system. You will need to provide Connect with a URL formatted like the following example, which can be generated for you via the Azure Portal by right-clicking on the queue and generating a Shared Access Signature with a long-lived Expiry time
and the Add
or Create
permission.
The advantage of using an Azure storage account is that leads can be stored for an indefinite period of time on a service with a 99.99% uptime SLA guarantee, without a direct connection to your internal systems.
Azure Storage Queue
https://mystorageaccount.queue.core.windows.net/my-leads-queue/messages?sp=a&st=2021-03-30T17:46:08Z&se=2030-01-01T17:46:00Z&sv=2020-02-10&sig={secret}
Read more here: Azure Queue storage documentation
Azure Blob Storage
https://storageaccounttestl8569.blob.core.windows.net/my-leads-container?sp=c&st=2021-09-17T14:20:57Z&se=2030-01-01T22:20:57Z&spr=https&sv=2020-08-04&sr=c&sig={secret}
Read more here: Azure Blob storage documentation
Lead Schema
The following defines the shape of the webhook payload, where types are contained in < >
brackets, and types followed by ‘option’ can be null.
{ "id": <guid>, // Unique identifier for the lead "submissionId": <guid>, // The id of the form's submission which may produce in multiple leads "duplicateId": <string>, // A hash of some of the leads data which may be used to identify duplicates "dateCreated": <datetimeoffset>, "status": <leadstatus>, "state": <"Removed" | "Submitted">, "requestedAmount": <decimal>, "useOfProceeds": <string option>, "financeNeededBy": <string option>, "hasBusinessPlan": <boolean option>, "collateralTypes": <string option [] option>, "ownershipDemographicTypes": <string option [] option>, "nameOfBusiness": <string option>, "businessAddress": <{ "line1": <string option>, "line2": <string option option>, "city": <string option>, "state": <string option>, "zip": <string option>, "county": <string option> } option>, "yearsInBusiness": <string option>, "numEmployees": <integer option>, "industry": <string option>, "businessType": <string option>, "revenueLastYear": <string option>, "revenueProjected": <string option>, "netProfit": <decimal option>, "firstName": <string option>, "lastName": <string option>, "email": <string option>, "phone": <string option>, "ficoScore": <string option>, "priorBankruptcies": <string option>, "statistics": <{ "censusTract": <string option>, "latitude": <decimal option>, "longitude": <decimal option>, "craEligibleTract": <boolean>, "isCDFIInvestmentArea": <boolean option> } option>, "preferredContactTime": <string option>, "preferredContactMethod": <string option>, "funded": <{ "fundedAmount": <decimal option>, "fundedInterestRate": <decimal option>, "fundedAPR": <decimal option>, "fundedTermMonths": <decimal option>, "fundedAmortizationMonths": <decimal option>, "fundedDate": <datetimeoffset option> } option>, "willReceiveTechnicalAssistance": <boolean option>, "technicalAssistanceOptions": <string option [] option>, "disqualifiedReason": <string option>, "withdrawnReason": <string option>, "otherReasonText": <string option>, "leadSource": { "id": <guid option>, "name": <string option>, "route": <string option> }, "servicePartner": { "id": <guid option>, "name": <string option>, "route": <string option> }, "leadOwner": <string option>, "matchedProduct": <{ "id": <guid option>, "name": <string option>, "tags": <string option [] option>, "kind": <string option>, "termRange": <{ "min": <int>, "max": <int option>, "type": <string> } option>, "aprRange": <{ "min": <decimal>, "max": <decimal option>, "type": <string> } option>, "loanType": <string option>, "collateralType": <string option>, "paymentFrequency": <string option>, } option>, "productSet": <{ "id": <guid>, "name": <string> } option>, "fraudScore": <decimal option>, "ipAddress": <string option>}
Request Payload - Sample
This is an example of what a single lead payload looks like; it contains all the answered questions provided by the applicant along with some information about what product they chose.
{ "id": "4626a582-afb9-48bf-8d86-87e6fe91a842", "submissionId": "3295f494-0607-43ce-afff-28b5b71838e2", "duplicateId": "Ks645Ke3aO0TOfUcdHKvQpPOd9QhOu9/RklhkHxHz2Q=", "dateCreated": "2020-05-08T23:09:15.4796701+00:00", "status": "Matched", "state": "Submitted", "requestedAmount": 25000.00, "useOfProceeds": "Working Capital", "financeNeededBy": "Today", "hasBusinessPlan": true, "collateralTypes": [ "Inventory" ], "ownershipDemographicTypes": [ "Veteran" ], "nameOfBusiness": "Some Company LLC.", "businessAddress": { "line1": "1234 Options Ave.", "line2": null, "city": "Minneapolis", "state": "Minnesota", "zip": "55234", "county": "Hennepin" }, "yearsInBusiness": "LessThanOne", "numEmployees": 3, "industry": "Retail", "businessType": "Corporation", "revenueLastYear": "LessThan100000", "revenueProjected": "_100000To250000", "netProfit": 50000.00, "firstName": "Bob", "lastName": "Lastnameson", "email": "bob@somecompany.com", "phone": "123-456-7890", "ficoScore": "_660To699", "priorBankruptcies": "None", "statistics": { "censusTract": "55124442411", "latitude": 44.9642757, "longitude": -93.2639915, "craEligibleTract": false, "isCDFIInvestmentArea": true }, "howDidYouHear": null, "preferredContactTime": "Afternoon", "preferredContactMethod": "Phone", "funded": { "fundedAmount": 10000, "fundedInterestRate": 1.5, "fundedAPR": 1.2, "fundedTermMonths": 12, "fundedAmortizationMonths": 12, "fundedDate": "2020-05-08T23:09:15.4796701+00:00" }, "willReceiveTechnicalAssistance": true, "technicalAssistanceOptions": [ "BusinessPlan" ], "disqualifiedReason": null, "withdrawnReason": "BorrowerStoppedResponding", "otherReasonText": "", "leadSource": { "id": "94883922-a338-4f3b-bffb-a7d3c80c7ee1", "name": "Some Referral Partner", "route": "some-referral-partner" }, "servicePartner": { "id": "4fbcdfeb-68b5-4e0c-8387-a5c5a0930350", "name": "Some Service Partner", "route": "some-service-partner" }, "leadOwner": "Bob Productownerson", "matchedProduct": { "id": "a9e40b23-0867-4cc7-b9eb-bb01d8f45db6", "name": "Some Product", "tags": ["Minneapolis Metro Team"], "kind": "Loan", "termRange": { "min": 12, "max": 24, "type": "Months" }, "aprRange": { "min": 6.75, "max": 9, "type": "Fixed" }, "loanType": "TermLoan", "collateralType": "Secured", "paymentFrequency": "Monthly" }, "productSet": { "id": "668c6030-8b80-4c49-ab37-3689469ae31f", "name": "Some Active Fund" }, "fraudScore": 0.15, "ipAddress": "127.0.0.1"}
Fraud Score
The fraud score is a weighted composite of scores calculated based on device finger printing, the users’ IP address, and a machine learning algorithm’s determination based on several factors which will evolve over time. Any score above an internal threshold will be withheld from C2C’s partner matchmaking.
All leads have the potential for fraudulence, but scores above 0 should be accorded a higher amount of suspicion. The score can be anywhere between 0 and 1, but in practice any lead at or above 0.85 will not be matched.
Lookups
Below you will find a listing of all available entries for each parameter defined in the Lead Schema above.
Lead Status
Matched
: The initial state, the applicant has chosen your productReviewed
: Service partner has viewed submitted applicant formContacted
: Prospective applicant has been contacted by the product owner, but has not submitted an application to the service partnerQualified
: Lead is marked qualifiedFunded
: Lead has been completedDisqualified
: Lead was disqualifiedWithdrawn
: Lead stopped responding
Uses of Proceeds
- Working Capital
- Start a Business
- Acquire a Business
- Purchase Inventory
- Purchase Machinery or Equipment
- Make Building Improvements
- Building Acquisition
- Refinance Existing Debt
- Other
Finance Needed By
- Today
- InNextTwoWeeks
- InNextTwoMonths
- MultipleOptions
Collateral Types
- Commercial Real Estate
- Residential Real Estate
- Inventory
- Accounts Receivable
- Cash
- Investment Accounts
- New Equipment/Machinery
- Furniture & Fixtures
- Vehicles
- Used Equipment/Machinery
- Vacant Land
- Leasehold Improvements
- Other
Ownership Demographic Types
- Women
- Veteran
- LGBTQ
- Black/African-American
- Asian
- Hispanic/Latino/Latinx
- Native American
- Alaskan Native
- Native Hawaiian
- Pacific Islander
- Mixed-race
- Other
Years in Business
- Startup
- LessThanOne
- OneToTwo
- TwoToThree
- ThreeOrMore
Industry
- Accomodation & Food Service
- Agriculture
- Business Services
- Construction
- Dentists/Physicians
- Educational Services
- Finance & Insurance
- Gas Stations & Convenience Stores
- Healthcare and Social Assistance
- Hotels
- Information Technology
- Landlord
- Manufacturing
- Mining
- Professional Services
- Real Estate
- Restaurant
- Retail
- Transportation & Warehousing
- Utilities
- Waste Management
- Wholesale Trade
- Other
Business Types
- SoleProprietorship
- LLC
- Corporation
- NonProfit
- Other
Revenue Types
- LessThan100000
- _100000To250000
- _250000To500000
- _500000To1000000
- _1000000To5000000
- MoreThan5000000
FICO Scores
- _700Plus
- _660To699
- _640To659
- _620To639
- _580To619
- Below580
Prior Bankruptcies
- None
- _1Prior
- _2OrMore
How Did You Hear
- Ad
- Event
- WordOfMouth
- LenderReferral
- Other
Contact Time
- Morning
- Afternoon
- Evening
Contact Method
- Phone
Withdrawn Reason
- BorrowerStoppedResponding
- Duplicate
- LostBidToCompetitor
- FraudOrSpam
- Other
Disqualified Reason
- EligibilityIssue
- CreditIssue
- CashFlowIssue
- CollateralIssue
- LoanUseIssue
- PersonalGuaranteeIssue
- Other
Technical Assistance Options
- Accounting
- BusinessPlan
- BuyOrSellABusiness
- CashFlowManagement
- CompanyFormation
- CustomerRelations
- CreditCounseling
- FinancingOrCapital
- Franchising
- GovernmentContracting
- HumanResourcesAndManagement
- InternationalTrade
- LegalIssues
- MarketingOrSales
- PrivateSectorProcurement
- TaxPlanning
- TechnologyAndECommerce
Submitting a Test Lead
In order to test both the API and webhooks we recommend creating a test product on our QA environment and submitting leads to that product. Our QA environment is here:
- Add products here: https://qa.connect.crfusa.com/
- Submit a test lead here: https://qa.connect.crfusa.com/form/embed.html
Once you have created a test lead, the lead can be re-sent from the ‘Lead Webhooks’ tab in the ‘Integrations’ section of the partner portal.
Click the ‘Send Lead’ button, then paste in your test lead’s id to re-send the lead to your webhook endpoint. The status will display the response code from your API.