Application API
Download OpenAPI specification:Download
This API provides a way for lenders to receive applications from clients on the Capitalise Platform and to return offers or rejections.
The API also supports retrieval of documentation, and a set of web hooks to receive updates for applications when the user accepts or rejects an offer.
A typical integration would follow the following flow, typically:
- A client matches to lenders on the Capitalise Platform
- Client completes required fields for a lender's API
- Capitalise API dispatches application to Webhook
- Lender processes application and responds with an offer or rejection
- Client accepts or rejects offer
- Capitalise redirects user to lender onboarding to finalize
A more detailed version of this flow is displayed below:
Required Fields
Lenders need to provide us the list of required fields (optionally with rules for requirements, e.g. only if field a > 100)
Some sample required field rules:
- Simply requiring a field to be complete
Sector
- A field is required based on the value of another field
Contact Number
required ifCompany Type = Sole Trader
- More complex field requirements based on values and multiple conditions
Personal Guarantees
required ifCompany Type = Sole Trader
andRevenue < £100,000
andSector in (IT Services, Business Services)
API Setup
Lender needs to provide Capitalise a webhook for sending applications to. You can optionally provide a separate webhook for sending updates too, or use one for all.
Capitalise has an iPaaS platform which allows us to connect internal software without an API, or existing lender APIs with our API without the need for the lender to provide a webhook, if they provide endpoints to send an application to. This path is suitable for lenders we have an existing high-volume relationship with. Please speak to our product team about this integration path.
Authentication
Authentication uses oAuth via our Auth0 provider. We will provide you a client secret and credentials.
To authenticate, call our oAuth provider, https://capitalise.eu.auth0.com/oauth/token
, as per the sample below:
{
"audience": "https://capitalise.eu.auth0.com/api/v2/",
"client_id": "your_client_id",
"client_secret": "your_client_secret",
"grant_type": "password",
"password": "your_password",
"scope": "openid email profile",
"username": "your_username"
}
Ensure you also send a header:
"content-type": "application/json"
You will receive a payload back like the following, use the id_token as the bearer token in all authenticated requests. These tokens usually expire within 2 minutes, so we recommend authenticating before each request, rather than storing and refreshing the token.
{
"access_token": "....",
"id_token": "....",
"scope": "openid email profile ....",
"expires_in": 120,
"token_type": "Bearer"
}
API
Use your Bearer token to access the API at the below URL:
https://capitalise.com/api/platform/v1/funding
In order to obtain production keys and configuration, you will need to demonstrate several standard scenarios:
Minimum application
Ensure that your API is able to deal with only the minimum mandatory fields being entered. Any additional mandatory fields required should be discussed, as lender specific requirements on existing fields can be custom configured.
Outright rejection
If for any reason you will fully reject an application, e.g. due to poor credit or similar scenarios, you must demonstrate the response you give to the user is clear.
Failed validation
For validation issues where the user may correct the input, you should demonstrate the error message is clear and actionable to the user. Examples of post validation here could include address verification, director lookup verification etc
Manual Review
If you will direct applications for manual review, you should show that acknowledgement made along with a clear message indicating a timeline for update.
Indicative/Underwritten Offer
You should demonstrate that a full and complete offer is returned to the end user if implementing offer responses.
Funding Application
It contains:
- apiProvider: Lender can use this to verify the request is genuine
- application: The packaged Capitalise Application
- fundingSearch: Key details about the users search requirements
- fundingMatch: Key details about the lenders product the client has matched with
- profile: The clients application form
- accountantDetails: The clients accountant, if any.
- assetsToFinance: (Optional) Assets the client is looking to obtain finance for
- basicCompanyDetails: Details about the company and the primary contact for the client
- companyCredit: (Optional) Unverified details of the companies credit standing
- directorOrSecretaryDetails: Detail and credit information about each director, owner or secretary involved in the application
- eposTerminalInfo: (Optional) Details of the clients primary EPOS and monthly takings
- guarantorAssetsForSecurity: (Optional) Any assets the applicants are providing as security
- invoiceFinancing: (Optional) Summary details of the clients outstanding invoice debtors and value
- tradeFinanceProfile: (Optional) Summary details of the clients outstanding trade debtors and value
- tradeHistory: Annualised revenue, asset and profit figures of the companies history
- attachments: A list of documents attached to this application
{
"apiProvider": {
"url": "https://webhook-url/",
"updateUrl": "https://webhook-url/",
"authorizationToken": "1234a"
},
"application": {
"id": 10000,
"reference": "Q43RT7",
"status": "In Review",
"responseReason": null,
"comment": null,
"fundingSearch": {
"id": 10001,
"status": 2,
"amount": "15000.00",
"period": 12,
"statusLabel": "Reviewing",
"author": {
"id": 10002,
"entity": {
"id": 10003,
"entityId": 10004,
"companyName": "Acme Introducer"
},
"userType": "business",
"name": "John Smith",
"email": "johnsmith@email.com"
},
"manager": {
"id": 10005,
"entity": {
"id": 10006,
"entityId": 10007,
"companyName": "Acme Introducer"
},
"userType": "business",
"name": "John Smith",
"email": "johnsmith@email.com"
},
"useOfFunds": "Business expansion",
"urgency": "ASAP"
},
"fundingMatch": {
"id": 10008,
"offerId": null,
"products": [
1
],
"productNames": [
"Term Loans"
],
"statusReason": null,
"statusComment": null,
"canUseInstantOffer": true,
"canUseInstantApplication": true,
"lender": {
"id": 10009,
"entityId": 10010,
"companyName": "Lender Name",
"logo": "https://logo-url",
"icon": "https://icon-url"
},
"status": 1
},
"profile": {
"accountantDetails": { # only provide for searches though introducers
"name": "Acme Accountants",
"address": "12 Road Name",
"town": "London",
"contactName": "John Surname",
"telephone": "01234567890",
"email": "john@acmeacc.com"
},
"assetsToFinance": [
{
"assetCost": null,
"assetSerialNumber": null,
"depositAvailable": null,
"assetType": null,
"assetTypeName": null
}
],
"basicCompanyDetails": {
"contactName": "John Companyman",
"contactEmail": "john@company.com",
"contactPhone": "01234567890",
"companyName": "Companman Company",
"companyTradingName": "CC Company LTD",
"companyNumber": "12345678A",
"companyType": "Limited Company",
"vatRegistered": 1,
"address": "100 Road Name, Town Name",
"city": "London",
"postalCode": "LO4 0ON",
"tradingFrom": 1568718000,
"tradingPeriod": "3",
"creditScore": "3",
"numberOfEmployees": 2,
"percentageOfSalesOnline": 10,
"companyWebsite": "https://beta.companieshouse.gov.uk/company/123456789A",
"sectorName": "Construction"
},
"companyCredit": {
"unpaidItems": 0,
"behindOnTaxPayments": 0,
"officialsDeclaredBankrupt": true,
"officialsFailedBusiness": 0,
"exceededAgreedOverdraft": 0,
"overdraftWorstMonth": 8,
"daysOverdrawn": 13,
"debtRepayments": 86000,
"expectedTurnover": 1200000, # only for companies trading sub 12 months
"expectedNetProfit": 350000 # only for companies trading sub 12 months
},
"directorOrSecretaryDetails": [
{
"title": "Mr",
"fullName": "John Companyman",
"email": "jc@email.com",
"phone": "01234567890",
"dateOfBirth": -51926400,
"position": "Director",
"addressResidential": "125 Street, London, LO4 0ON",
"ownershipPercentage": 100,
"residentialStatus": "homeowner",
"personalGuarantee": true,
"monthlyRentOrMortgage": 245,
"mortgageValue": 39000,
"monthlyBusinessIncome": 6500,
"monthlyNonBusinessIncome": null,
"monthlyOtherHouseholdIncome": null,
"personalCreditLimit": 75000,
"ccjsValue": null,
"personalDefaultsValue": null,
"dependants": 3,
"oldestCreditAccountAge": null,
"missedPaymentsBusiness": null,
"missedPaymentsPersonal": null,
"personalDefaults": null
}
],
"eposTerminalInfo": {
"transactionsPerMonthAvg": 2500,
"monthsUsingCCProcessing": 28,
"monthsRemainingOnBusinessLease": 4,
"terminalId": null,
"terminalProvider": null
},
"guarantorAssetsForSecurity": {
"hasUkHomeownerDirector": true,
"estimatedSecurity": 40000,
"guarantorAssets": [
{
"owner": "John Companyman",
"estimatedValue": 79000,
"totalDebt": 39000,
"address": "125 Street, London, LO4 0ON"
}
]
},
"invoiceFinancing": {
"debtorsValue": null,
"debtorDays": null,
"invoicesNumber": null,
"creditNotesGrossValue": null,
"creditNotesNumber": null,
"customersNumber": null
},
"tradeFinanceProfile": {
"currentValueOfDebtors": 11000,
"approxNoOfCustomers": 2,
"currentValueOfConfirmedOrders": 22750,
"approxGrossMargin": 35,
"madeADozenWebsiteSales": false
},
"tradeHistory": [
{
"year": "2020",
"yearEndTimestamp": 1598832000,
"revenue": "45000",
"profitNet": "4500",
"debtorsOutstanding": null,
"debtorsInvoicesDue": null,
"fixedAssets": null
}
],
"attachments": []
},
"acceptedAt": null,
"invalidatedAt": null
}
}
Offer
An offer is our accepted format to receive a lenders format in. Not all fields are required.
Term Loan
Request
{
"reference": "lender_quote_ref", #required #unqiue [string]
"expiryDate": "2012-11-04T14:51:06.157Z", #nullable [iso2701 date+optional time]
"status": "FINAL", #required [INDICATIVE or FINAL]
"comment": "Other terms include x, y z", #nullable string
"termLoan": {
"maximumAmount": 1000, #required [currency amount]
"minimumAmount": 500, #nullable [currency amount]
"term": 18, #required [1 - 240]
"interestRate": 3.29, #required [0.00 - 100.00] monthly rate
"representativeAPR": 4.00, #nullable [0.00 - 100.00] annual rate
"monthlyRepayment": 834.73, #nullable [currency amount]
"totalRepayment": 123456.72, #nullable [currency amount]
"arrangementFee": 100, #nullable [currency amount]
"promotion": "first month free", #nullable [string]
"likelihoodOfRate": 0.90, #nullable [0.00 - 1.00]
"likelihoodOfAcceptance": 0.94, #nullable [0.00 - 1.00]
}
}
Response
termLoan.totalFees
is returned when fetching an offer, calculated as abs(termLoan.totalRepayment - termLoan.maximumAmount)
Invoice Finance
{
"reference": "lender_quote_ref", #required #unqiue [string]
"expiryDate": "2012-11-04T14:51:06.157Z", #nullable [iso2701 date+optional time]
"status": "FINAL", #required [INDICATIVE or FINAL]
"comment": "Other terms include x, y z", #nullable string
"invoiceFinance": {
"maximumCreditLine": 500000, #required, currency
"minimumCreditLine": 50000, #currency
"serviceFee": 0.025, #required, decimal % [0.00 - 1.00]
"discountFee": 0.025, #required, decimal % [0.00 - 1.00]
"advanceRate": 0.80, #required, decimal % [0.00 - 1.00]
"additionalFees": "£1500 setup", #string
"minimumMonthlyFee": 1500 #currency
"concentrationLimit": 0.23 #decimal % [0.00 - 1.00]
"contractLength": 6, #required 0 = rolling contract
"creditInsurance": 0.55, #decimal % [0.00 - 1.00]
"creditInsuranceRequired": true #bool
"facility" : "DISCOUNTING", #required, [DISCOUNTING or FACTORING]
"selective" : true, #bool
"confidential" : true, #bool
"promotion": "first month free", #string
"likelihoodOfRate": 0.90, #decimal % [0.00 - 1.00]
"likelihoodOfAcceptance": 0.94, #decimal [0.00 - 1.00]
}
}
Merchant Cash Advance
{
"reference": "lender_quote_ref", #required #unqiue [string]
"expiryDate": "2012-11-04T14:51:06.157Z", #nullable [iso2701 date+optional time]
"status": "FINAL", #required [INDICATIVE or FINAL]
"comment": "Other terms include x, y z", #nullable string
"merchantCashAdvance": {
"fundingAmount": 500000, #required, currency
"sweep": 0.80, #required, decimal % [0.00 - 1.00]
"totalRepayment": 58000 #currency
"totalFees": 58000 #currency
"ratio": 1.3 #decimal % [1.00 - 100.00]
"promotion": "first month free", #string
"likelihoodOfRate": 0.90, #decimal % [0.00 - 1.00]
"likelihoodOfAcceptance": 0.94, #decimal [0.00 - 1.00]
}
}
Asset Finance
{
"reference": "lender_quote_ref", #required #unqiue [string]
"expiryDate": "2012-11-04T14:51:06.157Z", #nullable [iso2701 date+optional time]
"status": "FINAL", #required [INDICATIVE or FINAL]
"comment": "Other terms include x, y z", #nullable string
"assetFinance": {
"advanceAmount": 500000, #required, currency
"term": 12, #required, number
"deposit": 58000 #required, currency
"cost": 500 #currency
"vat": 15000 #currency
"totalPrice": 15000 #currency
"representativeAPR": 0.90, #decimal % [0.00 - 1.00]
"productOption": "Hire Purchase" #list [Hire Purchase, Finance Lease]
"monthlyRepayment": 500 #currency
"additionalFees": "£1500 setup", #string
"optionToPurchaseFee": 125 #currency
"description": "Custom text" #string
"promotion": "first month free", #string
"likelihoodOfRate": 0.90, #decimal % [0.00 - 1.00]
"likelihoodOfAcceptance": 0.94, #decimal [0.00 - 1.00]
}
}
Trade Finance
{
"reference": "lender_quote_ref", #required #unqiue [string]
"expiryDate": "2012-11-04T14:51:06.157Z", #nullable [iso2701 date+optional time]
"status": "FINAL", #required [INDICATIVE or FINAL]
"comment": "Other terms include x, y z", #nullable string
"tradeFinance": {
"maximumCreditLine": 500000, #required, currency
"minimumCreditLine": 50000, #currency
"serviceFee": 0.025, #required, decimal % [0.00 - 1.00]
"discountFee": 0.025, #required, decimal % [0.00 - 1.00]
"advanceRate": 0.80, #required, decimal % [0.00 - 1.00]
"additionalFees": "£1500 setup", #string
"minimumMonthlyFee": 1500 #currency
"contractLength": 6, #0 = rolling contract
"promotion": "first month free", #string
"likelihoodOfRate": 0.90, #decimal % [0.00 - 1.00]
"likelihoodOfAcceptance": 0.94, #decimal [0.00 - 1.00]
}
}
Commercial Property
{
"reference": "868/3301", #required #unqiue [can default to search ID / match ID for manual]
"expiryDate": ..., #nullable [date+time]
"status": "Final", #required [INDICATIVE or FINAL]
"comment": "Other terms include x, y z", #nullable string
{
"amount": 1000, #required [currency amount]
"ltv": 34.3, #nullable [percentage 0.00 - 100.00]
"mortgageTerm": 18, #required [1 - 240]
"dealTerm": 18, #required [1 - 240]
"interestRate": 3.29, #required [percentage 0.00 - 100.00]
"arrangementFee": 955, #nullable [currency amount]
"valuationFee": 599, #nullable [currency amount]
"exitFee": 599, #nullable [currency amount]
"productOption": "BTL" #list [BTL, Interest Only, Repayment]
"rateType": "Fixed" #list [Variable, Fixed]
"propertyChargeAddress": "12 Street Name" #string
}
}
When a user submits an application, a payload with a Funding Application is sent to the lender's provided webhook URL.
You must return an HTTP 204 to this dispatcher, otherwise the dispatcher will attempt to resend the application at exponential intervals.
When a user marks an offer as accepted or rejected, an updated payload with a Funding Application is sent to the lender's provided webhook URL. You should filter updates sent to this webhook and only use what you need (e.g., Status is Client Accepted or Client Declined) to avoid confusion.
We recommend using separate endpoints for New Applications and Application Updated. Our Updated endpoint will provide updates for all status changes.
You must return an HTTP 204 to this dispatcher, otherwise the dispatcher will attempt to resend the application at exponential intervals.
List Applications
Fetches an array of Funding Applications.
You can pass an optional ?reference
as a filter to find only applications matching your provided reference.
Fetch Document
Fetch a document from a specific Funding Application by application.id and application.profile.attachment.id.
Acknowledge Application
On receipt of a New Application Webhook, this endpoint allows you to provide an optional reference number to be used in later lookups.
In addition, this endpoint can receive comments until such time as a quote or rejection is provided.
Create a reference for a Funding Application after receipt
{
"reference": "lenders_unique_reference"
}
Create a reference for a Funding Application after receipt, with comment
{
"reference": "lenders_unique_reference",
"comment": "This application requires a manual credit review."
}
Provide an update comment only
{
"comment": "This application requires a manual credit review."
}
Provide Quote/Offer
Once a Funding Application is received, this endpoint allows a quote or offer to be provided in response.
In addition, this endpoint can receive updated offers at any time, which will replace the previous offer supplied.
Send an Initial Quote
{
"reference": "lender_quote_ref",
"expiryDate": "2012-11-04T14:51:06.157Z",
"status": "INDICATIVE",
"comment": "Other terms include x, y z", #nullable string
"termLoan": {
"maximumAmount": 15000,
"term": 12,
"interestRate": 12.29,
"representativeAPR": 13.99,
"monthlyRepayment": 834.73,
"totalRepayment": 17456.72,
"arrangementFee": 100,
"likelihoodOfRate": 0.90,
"likelihoodOfAcceptance": 0.94
}
}
Send an Underwritten Offer
{
"reference": "lender_quote_ref",
"expiryDate": "2012-11-04T14:51:06.157Z",
"status": "INDICATIVE",
"comment": "Other terms include x, y z", #nullable string
"termLoan": {
"maximumAmount": 15000,
"term": 12,
"interestRate": 12.29,
"representativeAPR": 13.99,
"monthlyRepayment": 834.73,
"totalRepayment": 17456.72,
"arrangementFee": 100
}
}
Request Body schema: application/json
comment | string Other terms include x, y z | ||||||||||||||||||
expiryDate | string <date-time> 2012-11-04T14:51:06.157Z | ||||||||||||||||||
reference | string lender_quote_ref | ||||||||||||||||||
status | string INDICATIVE | ||||||||||||||||||
object | |||||||||||||||||||
|
Request samples
- Payload
{- "reference": "string",
- "expiryDate": "2019-08-24T14:15:22Z",
- "status": "string",
- "comment": "string",
- "termLoan": {
- "maximumAmount": 0,
- "term": 0,
- "interestRate": 0,
- "representativeAPR": 0,
- "monthlyRepayment": 0,
- "totalRepayment": 0,
- "arrangementFee": 0,
- "likelihoodOfRate": 0,
- "likelihoodOfAcceptance": 0
}
}
Fail or Reject Application
Once a Funding Application is received this endpoint allows a failure or rejection to be provided in response.
Failing an application allows the client to resubmit and should be used to report formatting, processing or data errors.
Rejecting an application is terminal. A client cannot resubmit.
The comment and reference are optional, but a reason must be provided.
Fail an application
{
"reason": "Failed",
"comment": "Unable to verify directors address. Please check and resubmit.",
"reference": "y76fga78s"
}
Reject an application
{
"reason": "Ineligible",
"comment": "A directors credit checks did not pass our requirements",
"reference": "y76fga78s"
}
Request Body schema: application/json
comment | string Unable to verify directors address. Please check and resubmit. |
reason | string Failed |
reference | string y76fga78s |
Request samples
- Payload
{- "reason": "string",
- "comment": "string",
- "reference": "string"
}