Skip to content

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

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 like Grants or BusinessServices.

  • 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

Filtering questions:

FilterEnum Name
AmountRequestedInteger
BusinessAddressAddress Object
BusinessIndustryIndustries
BusinessTypeBusinessType
CollateralCollateral
CreditScoreCreditScores
HasBusinessPlantrue or false
NetProfitInteger
PriorBankruptciesPriorBankruptcies
RevenueLastYearRevenues
RevenueProjectedRevenues
UseOfProceedsUseOfProceeds
YearsInBusinessYearsInBusiness

Informational questions:

FieldType
BusinessNameString
EmailString
FirstNameString
LastNameString
PhoneString

Relevant API Calls

Get Questions

In order to determine which questions you must gather to get matching Products, you can invoke this endpoint.

Specifications: GET /api/{referralpartner}/form/questions

Route Parameters

  • {referralpartner} - [Required string] This is a specific, unique value provided by Connect that represents your organization.
  • slug - [Optional string] and references which Form you are utilizing, if this is your organizations’ default form, the querystring value should be omitted entirely.

Response

The response will be an array of Questions. 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;
// 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 Questions, 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

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 DefaultValues have been answered. Any values which do not correspond to Question ids will be ignored.

Specifications: POST /api/{referralpartner}/form

Route Parameters

  • {referralpartner} - [Required string] This is a specific, unique value provided by Connect that represents your organization.
  • slug - [Optional string] and references which Form you are utilizing, if this is your organizations’ default form, the querystring value should be omitted entirely.

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.

Body

{
"RequestedAmount": 75000,
"UseOfProceeds": "WorkingCapital",
"BusinessName": "Johns Plumbing Supplies",
"BusinessType": "LLC",
"BusinessIndustry": "InformationTechnology",
"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

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 Created
Location: /api/{referralpartner}/form/submissions/{submissionId}

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

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

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

  • {referralpartner} - [Required string] This is a specific, unique value provided by Connect that represents your organization.
  • slug - [Optional string] and references which Form you are utilizing, if this is your organizations’ default form, the querystring value should be omitted entirely.

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.

Body

{
"submissionId": "e5fa496a-bf93-44a8-b0b0-7573dceace34",
"productId": "544448ec-a3c7-4781-9781-5ae7e27dcc80"
}

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

The BusinessAddress field should be provided as an object with the following properties:

PropertyTypeRequiredDescription
Line1StringYesStreet address, line 1
Line2StringNoStreet address, line 2 (optional, e.g. suite or unit)
CityStringYesCity
StateStringYesState or province
PostalCodeStringYesPostal or ZIP code

Example:

{
"Line1": "2122 Generic Ave N.",
"Line2": "Suite 100",
"City": "Minneapolis",
"State": "Minnesota",
"PostalCode": "55413"
}

Enum Values

Collateral

  • CommercialRealEstate: Commercial Real Estate
  • ResidentialRealEstate: Residential Real Estate
  • Inventory: Inventory
  • AccountsReceivable: Accounts Receivable
  • Cash: Cash
  • InvestmentAccounts: Investment Accounts
  • NewEquipmentMachinery: New Equipment/Machinery
  • FurnitureAndFixtures: Furniture and Fixtures
  • Vehicles: Vehicles
  • UsedEquipmentMachinery: Used Equipment/Machinery
  • VacantLand: Vacant Land
  • LeaseholdImprovements: Leasehold Improvements
  • Other: Other

UseOfProceeds

  • WorkingCapital: Working Capital
  • StartABusiness: Start a Business
  • AcquireABusiness: Acquire a Business
  • PurchaseInventory: Purchase Inventory
  • PurchaseMachineryOrEquipment: Purchase Machinery or Equipment
  • MakeBuildingImprovements: Make Building Improvements
  • BuildingAcquisition: Building Acquisition
  • RefinanceExistingDebt: Refinance Existing Debt
  • Other: Other

BusinessType

  • SoleProprietorship: Sole Proprietorship
  • LLC: LLC
  • Corporation: Corporation
  • NonProfit: Non-Profit
  • Other: Other

YearsInBusiness

  • Startup: Startup
  • LessThanOne: Less Than One Year
  • OneToTwo: One to Two Years
  • TwoToThree: Two to Three Years
  • ThreeOrMore: Three or More Years

PriorBankruptcies

  • None: None
  • _1Prior: 1 Prior
  • _2OrMore: 2 or More

CreditScores

  • _700Plus: 700+
  • _660To699: 660–699
  • _640To659: 640–659
  • _620To639: 620–639
  • _580To619: 580–619
  • Below580: Below 580

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,000
  • MoreThan5000000: More Than $5,000,000

Industries

  • AccomodationAndFoodService: Accommodation and Food Service
  • Agriculture: Agriculture
  • BusinessServices: Business Services
  • Construction: Construction
  • DentistsPhysicians: Dentists/Physicians
  • EducationalServices: Educational Services
  • FinanceAndInsurance: Finance and Insurance
  • GasStationsAndConvenienceStores: Gas Stations and Convenience Stores
  • HealthcareAndSocialAssistance: Healthcare and Social Assistance
  • Hotels: Hotels
  • InformationTechnology: Information Technology
  • Landlord: Landlord
  • Manufacturing: Manufacturing
  • Mining: Mining
  • ProfessionalServices: Professional Services
  • RealEstate: Real Estate
  • Restaurant: Restaurant
  • Retail: Retail
  • TransportationAndWarehousing: Transportation and Warehousing
  • Utilities: Utilities
  • WasteManagement: Waste Management
  • WholesaleTrade: Wholesale Trade
  • Other: Other

BusinessServices

  • Accounting: Accounting
  • BusinessPlan: Business Plan
  • BuyOrSellABusiness: Buy or Sell a Business
  • CashFlowManagement: Cash Flow Management
  • CompanyFormation: Company Formation
  • CustomerRelations: Customer Relations
  • CreditCounseling: Credit Counseling
  • FinancingOrCapital: Financing or Capital
  • Franchising: Franchising
  • GovernmentContracting: Government Contracting
  • HumanResourcesAndManagement: Human Resources and Management
  • InternationalTrade: International Trade
  • LegalIssues: Legal Issues
  • MarketingOrSales: Marketing or Sales
  • PrivateSectorProcurement: Private Sector Procurement
  • TaxPlanning: Tax Planning
  • TechnologyAndECommerce: Technology and E-Commerce

OwnershipDemographics

  • Women: Women
  • Veteran: Veteran
  • LGBTQ: LGBTQ
  • BlackAfricanAmerican: Black/African American
  • Asian: Asian
  • Latinx: Latinx
  • MiddleEastNorthAfrican: Middle East/North African
  • NativeAmerican: Native American
  • AlaskanNative: Alaskan Native
  • NativeHawaiian: Native Hawaiian
  • PacificIslander: Pacific Islander
  • Mixedrace: Mixed Race
  • Disabled: Disabled
  • Other: Other

ContactMethods

  • Email: Email
  • Phone: Phone

ContactTime

  • Morning: Morning
  • Afternoon: Afternoon
  • Evening: Evening

FinanceNeededBy

  • Today: Today
  • InNextTwoWeeks: In Next Two Weeks
  • InNextTwoMonths: In Next Two Months
  • MultipleOptions: Multiple Options