Matchmaking API
Connect’s system-to-system Matchmaking API enables referral partners (and self-referring service partners) to integrate with Connect’s product catalog and create matching leads to service partners without any user interaction.
If you already know certain information about a user, such as their name, email, address, FICO score, etc., it is possible to present the user with Connect product offerings without them having to fill out an entire Connect questionnaire - or even know that they used Connect. You can also retrieve the list of questions from the Connect API and prompt the user directly to fill in any gaps in the requirements.
Forms, Questions, and Products
Section titled “Forms, Questions, and Products”A bit of terminology:
-
A ‘Form’ is a set of questions.
-
A ‘Question’ is an individual question asked on the form, such as “Net Profit”.
-
A ‘Product’ is an product offering with several filtering criteria which an applicant must meet prior to being matched.
-
A ‘Product Kind’ is a category of product, such as a
Loan
. Future products may be things likeGrant
s orBusinessService
s. -
A ‘Submission’ is a set of answers to a form.
-
A ‘Lead’ is a link between a product and a submission
Since not every product is a good fit for every applicant, products have filters, and those filters act on answers to questions. Each product kind
requires different questions be answered in order to determine if the applicant is a good match, or to simply be a useful lead - for example, knowing the person’s first name can’t filter them, but a service partner would need to know who they’re talking to when they reach out.
Products commonly have filters such as AmountRequested
, which could be a range from $100,000 to $150,000, or YearsInBusiness
which may only allow businesses with TwoToThree
or ThreeOrMore
years.
The following is an example of the minimum question set required for a Form to match with any Loan
product:
Loan
Products Questions
Section titled “Loan Products Questions”Filtering questions:
Filter | Enum Name |
---|---|
AmountRequested | Integer |
BusinessAddress | Address Object |
BusinessIndustry | Industries |
BusinessType | BusinessType |
Collateral | Collateral |
CreditScore | CreditScores |
HasBusinessPlan | true or false |
NetProfit | Integer |
PriorBankruptcies | PriorBankruptcies |
RevenueLastYear | Revenues |
RevenueProjected | Revenues |
UseOfProceeds | UseOfProceeds |
YearsInBusiness | YearsInBusiness |
Informational questions:
Field | Type |
---|---|
BusinessName | String |
String | |
FirstName | String |
LastName | String |
Phone | String |
Relevant API Calls
Section titled “Relevant API Calls”- get-questions - Retrieve a flattened list of questions
- post-submission - Submit answers to questionnaire
- get-matches - Retrieve product matches for a submission
- post-match - Create a new lead for a matching product
Get Questions
Section titled “Get Questions”In order to determine which questions you must gather to get matching Product
s, you can invoke this endpoint.
Specifications: GET /api/{referralpartner}/form/questions
Route Parameters
Section titled “Route Parameters”{referralpartner}
- [Required string] This is a specific, unique value provided by Connect that represents your organization.slug
- [Optional string] and references whichForm
you are utilizing, if this is your organizations’ default form, the querystring value should be omitted entirely.
Response
Section titled “Response”The response will be an array of Question
s. Each Question
has several properties, the most important properties of which are: id
and required
. Several other properties may appear on a question to indicate validation, custom language, or how to position the question on a screen, if applicable.
type Question = { // id of the question is also the property name of the answer in all other API calls id: string;
// If no value is provided, the C2C will assume this value defaultValue?: any | undefined;
// Validation isRequired?: boolean | undefined; minValue?: number | undefined; maxValue?: number | undefined;
// Form requires a full NAICS code in the `BusinessIndustry_NAICS` field requireFullNAICS?: boolean | undefined;
// Custom question type multi or single choice options isDropdown?: boolean | undefined; options?: QuestionOptionViewModel[] | undefined; none?: string | undefined;
// Display properties kind: QuestionType; isLabelAlwaysOn?: boolean | undefined; prefix?: string | undefined; postfix?: string | undefined; isDollar?: boolean | undefined; col?: number | undefined; colSpan?: number | undefined; label?: string | undefined; placeholder?: string | undefined;}
The response is an array of Question
s, which may look like the below JSON.
[ { "kind": "AmountRequested", "id": "AmountRequested", "col": 2, "isRequired": true }, { "kind": "UseOfProceeds", "id": "UseOfProceeds", "col": 2, "isRequired": true }, { "kind": "FinanceNeededBy", "id": "FinanceNeededBy", "col": 2, "isRequired": false }, { "kind": "BusinessName", "id": "BusinessName", "col": 2, "isRequired": true }, { "kind": "BusinessType", "id": "BusinessType", "col": 2, "isRequired": true }, { "kind": "BusinessIndustry", "id": "BusinessIndustry", "col": 2, "isRequired": true }, { "kind": "YearsInBusiness", "id": "YearsInBusiness", "col": 2, "isRequired": true }, { "kind": "BusinessAddress", "id": "BusinessAddress", "col": 2, "isRequired": true }, { "kind": "FirstName", "id": "FirstName", "col": 2, "isRequired": true }, { "kind": "LastName", "id": "LastName", "col": 3, "isRequired": true }, { "kind": "Email", "id": "Email", "col": 2, "colSpan": 2, "isRequired": true }, { "kind": "Phone", "id": "Phone", "col": 2, "colSpan": 2, "isRequired": true }, { "kind": "ContactMethod", "id": "ContactMethod", "col": 2, "colSpan": 2, "label": "How would you like to be contacted?", "isRequired": false, "isLabelAlwaysOn": true }, { "kind": "ContactTime", "id": "ContactTime", "col": 2, "colSpan": 2, "label": "What time do you prefer to be contacted?", "isRequired": false, "isLabelAlwaysOn": true }, { "kind": "RevenueLastYear", "id": "RevenueLastYear", "col": 2, "isRequired": true }, { "kind": "NetProfit", "id": "NetProfit", "col": 2, "isRequired": true, "defaultValue": 0 }, { "kind": "BusinessNumEmployees", "id": "BusinessNumEmployees", "col": 2, "label": "Number of full-time employees", "isRequired": false, "isLabelAlwaysOn": true }, { "kind": "PriorBankruptcies", "id": "PriorBankruptcies", "col": 2, "label": "Prior bankruptcies", "isRequired": true, "isLabelAlwaysOn": true }, { "kind": "Collateral", "id": "Collateral", "isRequired": true }, { "kind": "RevenueProjected", "id": "RevenueProjected", "col": 2, "isRequired": true }, { "kind": "HasBusinessPlan", "id": "HasBusinessPlan", "col": 2, "isRequired": true }, { "kind": "OwnerDemographics", "id": "OwnerDemographics", "isRequired": true }, { "kind": "CreditScore", "id": "CreditScore", "col": 2, "isRequired": true }]
Post Submission
Section titled “Post Submission”Once all the answers to the required questions are known, whether by looking them up from an existing system or prompting the user with them, the Post Submission
endpoint can be invoked. The post submission endpoint expects a JSON object in the body
, with each required question’s id
as a property of the object. The order of the properties does not matter, so long as all the required questions without DefaultValue
s have been answered. Any values which do not correspond to Question
ids will be ignored.
Specifications: POST /api/{referralpartner}/form
Route Parameters
Section titled “Route Parameters”{referralpartner}
- [Required string] This is a specific, unique value provided by Connect that represents your organization.slug
- [Optional string] and references whichForm
you are utilizing, if this is your organizations’ default form, the querystring value should be omitted entirely.
Querystring Parameters
Section titled “Querystring Parameters”ipaddress
- Pass along the client’s IP address to help with fraud detection. This is optional, but highly recommended as it will assist in identifying potential fraudulent activity or spam. If this is not provided, Connect will mark your lead as ‘synthetic’, assuming the lead is trusted and skip fraud detection.
{ "RequestedAmount": 75000, "UseOfProceeds": "WorkingCapital", "BusinessName": "Johns Plumbing Supplies", "BusinessType": "LLC", "BusinessIndustry": "InformationTechnology", "BusinessIndustry_NAICS": "541511", // only required if `requireFullNAICS` is true "YearsInBusiness": "ThreeOrMore", "BusinessAddress": { "Line1": "2122 Generic Ave N.", "City": "Minneapolis", "State": "Minnesota", "PostalCode": "55413" }, "FirstName": "John", "LastName": "Smith", "Email": "john.smith@johnsplumbingsupplies.com", "Phone": "123-456-7890", "RevenueLastYear": "_500000To1000000", "PriorBankruptcy": "None", "Collateral": [ "CommercialRealEstate", "ResidentialRealEstate" ], "RevenueProjected": "_500000To1000000", "HasBusinessPlan": true, "CreditScore": "_700Plus"}
Response
Section titled “Response”The response will be a 201 Created
status code, with a location
header containing a URL to the submission. This URL can be used to retrieve the matched products for the submission.
HTTP/1.1 201 CreatedLocation: /api/{referralpartner}/form/submissions/{submissionId}
Get matches
Section titled “Get matches”Once a submission has been created, it can be retrieved by invoking this endpoint. This endpoint is available indefinitely, but matchmaking will only be performed once — this functionality may change in the future. The matchmaking itself is actually performed when the submission is created, in post-submission, and this endpoint exists to retrieve the matchmaking results.
Specifications: /api/{referralpartner}/form/products
Response
Section titled “Response”The response will be an object with a property called products
, which contains the products matched, or an empty array.
type ProductResponse = { // The submission's unique id id: string;
// The products matched products: Product[]
// Additional resources which may be helpful to the applicant otherResources: AdditionalResource[]}
type Product = { // The product's unique id productId: string;
// Partner metadata partner: PartnerMetadata;
// Product details details: ProductDetail;}
type PartnerMetadata = { headquarters?: string | undefined; name?: string | undefined; description?: string | undefined; areasServed?: string | undefined; amountFinancedToDate?: number | undefined; smallBusinessesServed?: number | undefined; establishedYear?: number | undefined; languages?: string | undefined; website?: string | undefined;}
type ProductDetail = { // URL of the product or partner's logo productImage?: string | undefined;
// Name of the product name?: string | undefined;
// Kind of product (e.g. Loan) kind: ProductType;
// Terms of the loan product, when type = 'Loan' - OPTIONAL termsRange?: NumberRangeViewModel | undefined; interestRateRange?: NumberRangeViewModel | undefined; timeToFundRange?: NumberRangeViewModel | undefined; loanType?: LoanType | undefined; applicationFee?: FeeViewModel | undefined; originationFee?: FeeViewModel | undefined; collateralType: CollateralType; paymentFrequency?: PaymentFrequency | undefined; maxMoneyAmount: number | undefined;}
{ "products": [ { "productId": "1c7c521b-e6fe-43e5-aca5-f7f285d1722d", "details": { "productImage": "https://connect.crfusa.com/images/products/f7fde75f8cc84941888bef65de09eff9", "name": "My Small Business Loan", "kind": "Loan", "termsRange": { "min": 1, "max": 5, "unit": "Years" }, "interestRateRange": { "min": 6.75, "max": 9, "unit": "Fixed" }, "timeToFundRange": { "min": 15, "max": 30, "unit": "Days" }, "loanType": "TermLoan", "collateralType": "Secured", "paymentFrequency": "Monthly" }, "partner": { "name": "MyPartner", "headquarters": "Minneapolis, Minnesota", "partnerDescription": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris est justo, congue ut tempus quis, ullamcorper vitae tortor. Praesent vitae laoreet urna, in feugiat sapien. Nam sapien ligula, aliquam eget justo pretium, consectetur tincidunt tellus. Duis gravida lobortis nunc, eu faucibus felis commodo tincidunt.", "areasServed": "Minnesota", "amountFinancedToDate": 1000000, "smallBusinessesServed": 10000, "establishedYear": 1998, "languages": "English, Spanish" } } ]}
Apply Lead to Product
Section titled “Apply Lead to Product”In order to generate a matching lead, the submission must now be linked with a product. This is done by invoking the Post Match
endpoint.
Specifications: POST /api/{referralpartner}/form/apply
Route Parameters
Section titled “Route Parameters”{referralpartner}
- [Required string] This is a specific, unique value provided by Connect that represents your organization.slug
- [Optional string] and references whichForm
you are utilizing, if this is your organizations’ default form, the querystring value should be omitted entirely.
Querystring Parameters
Section titled “Querystring Parameters”skipFraudCheck
- [Optional boolean]. If your system has already verified the user, the match will be created regardless of the outcome of Connect’s internal fraud detection.
{ "submissionId": "e5fa496a-bf93-44a8-b0b0-7573dceace34", "productId": "544448ec-a3c7-4781-9781-5ae7e27dcc80"}
Response
Section titled “Response”The response will be an object containing contact information for the product’s service partner. It may also optionally include a formHandoff
which can be used to send a user directly into a product’s application system, see Form Handoff for more information.
type ApplyResult = { // Partner info partnerName?: string | undefined; website?: string | undefined;
// Contact information contactImage?: string | undefined; contactImageType: ProductContactImageType; contactName?: string | undefined; contactTitle?: string | undefined; contactEmail?: string | undefined; contactPhone?: string | undefined; contactAddress?: string | undefined; contactQuote?: string | undefined; contactAboutMe?: string | undefined; productId: string;
// Matching product details details: ProductDetail;
// Form handoff info formHandoff?: FormHandoff | undefined;}
type FormHandoff = { // URL to POST user to endpoint?: string | undefined;}
Example JSON
{ "partnerName": "MyPartner", "website": "https://www.mypartner.org/", "contactImage": "https://connect.crfusa.com/images/partners/918a07db8d7443d194beb9baff7201bc", "contactImageType": "Partner", "contactName": "Some Person", "contactTitle": "Loan Officer", "contactEmail": "contact@mypartner.org", "contactPhone": "612-100-4444", "contactAddress": "MyPartner\n123 E Somewhere Ave.\nSuite 100\nMinneapolis, MN 55411", "contactQuote": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", "contactAboutMe": "Mauris est justo, congue ut tempus quis, ullamcorper vitae tortor.", "productId": "1c7c521b-e6fe-43e5-aca5-f7f285d1722d", "details": { "productImage": "https://connect.crfusa.com/images/products/f7fde75f8cc84941888bef65de09eff9", "productName": "My Small Business Loan", "kind": "Loan", "termsRange": { "low": 1, "high": 5, "unit": "Years" }, "interestRateRange": { "low": 6.75, "high": 9, "unit": "Fixed" }, "timeToFundRange": { "low": 15, "high": 30, "unit": "Days" }, "loanType": "TermLoan", "collateralType": "Secured", "paymentFrequency": "Monthly" }, "id": "83a7f974-f02b-456f-8978-9cf9621787fe"}
Address Object
Section titled “Address Object”The BusinessAddress
field should be provided as an object with the following properties:
Property | Type | Required | Description |
---|---|---|---|
Line1 | String | Yes | Street address, line 1 |
Line2 | String | No | Street address, line 2 (optional, e.g. suite or unit) |
City | String | Yes | City |
State | String | Yes | State or province |
PostalCode | String | Yes | Postal or ZIP code |
Example:
{ "Line1": "2122 Generic Ave N.", "Line2": "Suite 100", "City": "Minneapolis", "State": "Minnesota", "PostalCode": "55413"}
Enum Values
Section titled “Enum Values”Collateral
Section titled “Collateral”CommercialRealEstate
: Commercial Real EstateResidentialRealEstate
: Residential Real EstateInventory
: InventoryAccountsReceivable
: Accounts ReceivableCash
: CashInvestmentAccounts
: Investment AccountsNewEquipmentMachinery
: New Equipment/MachineryFurnitureAndFixtures
: Furniture and FixturesVehicles
: VehiclesUsedEquipmentMachinery
: Used Equipment/MachineryVacantLand
: Vacant LandLeaseholdImprovements
: Leasehold ImprovementsOther
: Other
UseOfProceeds
Section titled “UseOfProceeds”WorkingCapital
: Working CapitalStartABusiness
: Start a BusinessAcquireABusiness
: Acquire a BusinessPurchaseInventory
: Purchase InventoryPurchaseMachineryOrEquipment
: Purchase Machinery or EquipmentMakeBuildingImprovements
: Make Building ImprovementsBuildingAcquisition
: Building AcquisitionRefinanceExistingDebt
: Refinance Existing DebtOther
: Other
BusinessType
Section titled “BusinessType”SoleProprietorship
: Sole ProprietorshipLLC
: LLCCorporation
: CorporationNonProfit
: Non-ProfitOther
: Other
YearsInBusiness
Section titled “YearsInBusiness”Startup
: StartupLessThanOne
: Less Than One YearOneToTwo
: One to Two YearsTwoToThree
: Two to Three YearsThreeOrMore
: Three or More Years
PriorBankruptcies
Section titled “PriorBankruptcies”None
: None_1Prior
: 1 Prior_2OrMore
: 2 or More
CreditScores
Section titled “CreditScores”_700Plus
: 700+_660To699
: 660–699_640To659
: 640–659_620To639
: 620–639_580To619
: 580–619Below580
: Below 580
Revenues
Section titled “Revenues”LessThan100000
: Less Than $100,000_100000To250000
: $100,000–$250,000_250000To500000
: $250,000–$500,000_500000To1000000
: $500,000–$1,000,000_1000000To5000000
: $1,000,000–$5,000,000MoreThan5000000
: More Than $5,000,000
Industries
Section titled “Industries”AccomodationAndFoodService
: Accommodation and Food ServiceAgriculture
: AgricultureBusinessServices
: Business ServicesConstruction
: ConstructionDentistsPhysicians
: Dentists/PhysiciansEducationalServices
: Educational ServicesFinanceAndInsurance
: Finance and InsuranceGasStationsAndConvenienceStores
: Gas Stations and Convenience StoresHealthcareAndSocialAssistance
: Healthcare and Social AssistanceHotels
: HotelsInformationTechnology
: Information TechnologyLandlord
: LandlordManufacturing
: ManufacturingMining
: MiningProfessionalServices
: Professional ServicesRealEstate
: Real EstateRestaurant
: RestaurantRetail
: RetailTransportationAndWarehousing
: Transportation and WarehousingUtilities
: UtilitiesWasteManagement
: Waste ManagementWholesaleTrade
: Wholesale TradeOther
: Other
BusinessServices
Section titled “BusinessServices”Accounting
: AccountingBusinessPlan
: Business PlanBuyOrSellABusiness
: Buy or Sell a BusinessCashFlowManagement
: Cash Flow ManagementCompanyFormation
: Company FormationCustomerRelations
: Customer RelationsCreditCounseling
: Credit CounselingFinancingOrCapital
: Financing or CapitalFranchising
: FranchisingGovernmentContracting
: Government ContractingHumanResourcesAndManagement
: Human Resources and ManagementInternationalTrade
: International TradeLegalIssues
: Legal IssuesMarketingOrSales
: Marketing or SalesPrivateSectorProcurement
: Private Sector ProcurementTaxPlanning
: Tax PlanningTechnologyAndECommerce
: Technology and E-Commerce
OwnershipDemographics
Section titled “OwnershipDemographics”Women
: WomenVeteran
: VeteranLGBTQ
: LGBTQBlackAfricanAmerican
: Black/African AmericanAsian
: AsianLatinx
: LatinxMiddleEastNorthAfrican
: Middle East/North AfricanNativeAmerican
: Native AmericanAlaskanNative
: Alaskan NativeNativeHawaiian
: Native HawaiianPacificIslander
: Pacific IslanderMixedrace
: Mixed RaceDisabled
: DisabledOther
: Other
ContactMethods
Section titled “ContactMethods”Email
: EmailPhone
: Phone
ContactTime
Section titled “ContactTime”Morning
: MorningAfternoon
: AfternoonEvening
: Evening
FinanceNeededBy
Section titled “FinanceNeededBy”Today
: TodayInNextTwoWeeks
: In Next Two WeeksInNextTwoMonths
: In Next Two MonthsMultipleOptions
: Multiple Options