Funding Circle Introducer API (v1)

Download OpenAPI specification:Download

Overview

This page contains information on how to use the Funding Circle Introducer API.

We believe that small businesses deserve access to finance that’s quick and hassle-free.

That’s why we have launched a Funding Circle lending API. Our API makes it fast, simple and straightforward for introducers to offer Funding Circle loans from within their own website, platform or mobile app.

To learn more about our introducer opportunities, visit us at https://www.fundingcircle.com/introducers/. To gain access to our Sandbox, email us at broker@fundingcircle.com.

Authentication

The API is under OAuth 2.0 Client Credentials Grant flow. In order to make a request, your client must be authorised.

access_token

The first step is to generate an access_token. In order to generate this, submit a POST request to the Authentication endpoint passing a base-64 token generated from your unique client_id:client_secret.

curl --request POST \
--url "https://auth.sandbox.api.fundingcircle.co.uk/oauth2/token" \
--header "Authorization: Basic $(echo -n 'client_id:client_secret' | base64)" \
--data-urlencode "grant_type=client_credentials"

The access_token is valid for only 24 hours and must be set in the HTTP header of each request.

Authorization: Bearer eyJraWQiOiJkd1ZKOFFhaGNcL2V4bFBwRUN3TDVNaTA3YmRqOFhNK3MzY.....

Important: You must not include the access_token when making a PUT request to upload a document.

Errors

An x-amzn-trace-id header will be returned with each request. We can use this ID to debug problems you may have with a particular API request. Ideally, you should store the x-amzn-trace-id of your requests so you can help us look into a specific one, if required.

We follow the error response format proposed in RFC 7807 also known as Problem Details for HTTP APIs. As with our normal API responses, your client must be prepared to gracefully handle additional members of the response.

BAD_REQUEST_BODY

  • HTTP status: 400

This response means that the API cannot process your request due to something that is perceived to be a client error (e.g., malformed request query, invalid request body, or deceptive request routing). To resolve this, please ensure that the request syntax is correct and includes all mandatory fields.

BAD_REQUEST_PARAMETERS

  • HTTP status: 400

This response means that the API cannot process your request due to a wrongly typed or malformed path parameter. To resolve this, please ensure that the parameter value matches the expected pattern.

UNAUTHORIZED

  • HTTP status: 401

This response means that your client is not authorised to access the API. Please make sure you've called the Auth endpoint first to fetch the access_token. Note that each token is valid for only 24 hours.

ACCESS_DENIED

  • HTTP status: 403

This response means that your access_token might be valid, but you're temporarily not allowed to access the API.

FORBIDDEN

  • HTTP status: 403

This response means that the API understands the request, but refuses to authorise it. To resolve this, please ensure you have permission to access the resource.

RESOURCE_NOT_FOUND

  • HTTP status: 404

This response means that the API has processed your request, but the resource could not be found.

GONE

  • HTTP status: 410

This response means that the API has processed your request, but the resource has now permanently expired.

UNSUPPORTED_MEDIA_TYPE

  • HTTP status: 415

This response means that the API refuses to accept the request because of the payload format. To resolve this, please select content-type application/json.

UNPROCESSABLE_ENTITY

  • HTTP status: 422

This response means that the API has processed the request, but the client is not allowed to proceed. Some of the reasons are:

  • The email provided is already in use by another Funding Circle non-borrower account.
  • We are unable to identify the business provided in our database or the business is dormant or inactive.
  • The application cannot be processed because this company either has an ongoing application with Funding Circle, or they have recently been rejected.
  • The total percentage of the shares held submitted is less than 50%.

FAILED_DEPENDENCY

  • HTTP status: 424

This response means that the requested action couldn't be performed because it depends on another action that has failed.

Sandbox

Our sandbox environment provides predefined test scenarios using specific values. To test successfully, you must use the exact values listed below - other values will not work as expected.

Eligibility

To test different eligibility outcomes, use one of these specific companies_house_id values in your loan application requests:

  • 00000000 - company with low eligibility
  • 00000001 - company with medium eligibility
  • 00000002 - company with high eligibility

Important: Any other companies_house_id value will return not-eligible, simulating a company that doesn't qualify for Funding Circle products.

Loan Application

To test different loan application journeys, use one of these specific business_name values in your loan application requests:

  • Bighead Catshark Ltd - successful application with a credit offer
  • Blotchy Swellshark Ltd - application that requires additional documentation
  • Loop Shark Ltd - application that remains in processing
  • Broadmouth Shark Ltd - rejected application
  • Inflight Shark Ltd - error scenario (ongoing application from the same company)

Important: Using any other business name (or no business name) will result in an application that remains in "processing" indefinitely.

Current Limitation: Once you upload and submit documents, the loan application status will change to "in progress" and remain in this status indefinitely.

Loan Application

Submit a complete loan application for a term loan through a simple, step-by-step process. Make a POST request to start the application process and use the returned links to monitor processing status. You will receive either a credit decision or a request for additional information If needed, use our endpoints to securely upload required files.

Main application flow


Some of our endpoints use background processing following the Microsoft Asynchronous Request-Reply Pattern. This means you'll get an immediate response with a placeholder, then you can poll using the provided UUID to get the final result. Most applications receive instant decisions, but some require additional documentation before credit decision can be made. Some endpoints are marked with optional tag because they don't have to be called for every application.

Create a term loan application

Submit a term loan application for processing. Credit reports will be pulled for the company and any supplied EBOs (Executive Business Owners).

The duration of processing will vary depending on the loan details, availability of 3rd party data providers and internal Funding Circle business rules. Successful calls to this endpoint contain a link to a status resource containing any available information on the expected duration.

Important

If you are a broker, you must submit client_consent and broker_commission.

If you are a partner, you should not submit client_consent and broker_commission, as they will be ignored.

Authorizations:
access_token
Request Body schema: application/json
callback_url
string^https:\/\/[\w\.-]{2,}\.[\D]{2,}\b([-\w_.?&\/...

If included in the request, when an action is required or a decision is made, we will call your webhook using the payload described in the callbacks section.

partner_reference
string [ 1 .. 36 ] characters

A free value supplied by the partner for their own reference, e.g. an internal identifier for the customer or loan.

required
object

A reference uniquely identifying a business. This must contain the Companies House ID.

required
Array of objects non-empty unique

List of Executive Business Owners (EBOs). These are shareholders that play a day-to-day role in the business and hold ownership of up to 50% or more of the applicant company. Names need to match what is listed in Companies House.

required
object

Information about the applicant. This must be a director of the business.

required
object

Please provide the following inputs for the company requesting finance.

required
object

Information about the loan.

required
object

Purpose of the loan.

object

Client consent fields must be provided by all brokers. If you are a partner then these fields are not required.

broker_commission
number (Amount between 0-6%, must be an incremental input of 0.5%)
Enum: 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6

Commission rate must be included for all broker requests. The max commission you can charge will be determined by your Tier. Tier 1 can charge up to 6%, Tier 2, up to 5.5%, and, Tier 3, up to 5%. For more information on your Tier, please contact your Account Manager. If you are set up as a partner, your commission will be pre-determined by our partner agreement. Therefore, partners do not need to send a commission amount as this will be ignored.

Responses

Callbacks

Request samples

Content type
application/json
{
  • "partner_reference": "HG79872",
  • "business_reference": {
    },
  • "ebo_list": [
    ],
  • "customer_info": {
    },
  • "business_info": {
    },
  • "loan_info": {
    },
  • "loan_purpose": {
    },
  • "client_consent": {
    },
  • "broker_commission": 0.5
}

Response samples

Content type
application/problem+json
{
  • "type": "BAD_REQUEST_BODY",
  • "title": "Invalid request body",
  • "detail": "[Object has missing required properties (['some_property'])]"
}

Callback payload samples

Callback
POST: Loan application status update
Content type
application/json
{
  • "callback_uuid": "a5764857-ae35-34dc-8f25-a9c9e73aa898",
  • "created_at": "2017-07-21T17:32:28Z",
  • "submitted_at": "2017-07-21T17:32:28Z",
  • "status_uri": "/loan_application_status/a5764857-ae35-34dc-8f25-a9c9e73aa898"
}

Create a flexipay application

Submit a FlexiPay application for processing. Credit reports will be pulled for the company and any supplied EBOs (Executive Business Owners). The duration of processing will vary depending on the loan details, availability of 3rd party data providers and internal Funding Circle business rules. Successful calls to this endpoint contain a link to a status resource containing any available information on the expected duration.

Authorizations:
access_token
Request Body schema: application/json
broker_email
string <email> [ 1 .. 80 ] characters ^.+@.+$

Email address of the associated broker, if applicable. This allows to tag them for commission. Brokers must be registered under the same organisation using the API.

required
object

A reference uniquely identifying a business. This must contain the Companies House ID.

required
Array of objects non-empty unique

List of Executive Business Owners (EBOs). These are shareholders that play a day-to-day role in the business and hold ownership of up to 50% or more of the applicant company. Names need to match what is listed on companies house.

required
object

Information about the applicant. This must be a director of the business.

required
object

Please provide the following inputs for the company requesting finance.

Responses

Request samples

Content type
application/json
{
  • "broker_email": "john.smith@example.com",
  • "business_reference": {
    },
  • "ebo_list": [
    ],
  • "customer_info": {
    },
  • "business_info": {
    }
}

Response samples

Content type
application/problem+json
{
  • "type": "BAD_REQUEST_BODY",
  • "title": "Invalid request body",
  • "detail": "[Object has missing required properties (['some_property'])]"
}

Check the status of a loan application

Retrieves a resource that describes the current status of a submitted loan application. This endpoint is intended to be polled and clients should adjust their polling frequency as follows:

  • After sending a loan application
Interval Polling frequency
0 to 2 minutes Every second
2 to 10 minutes Every minute
10 minutes to 6 hours Every hour
6 hours and over Every 12 hours
  • After submitting a required action
Interval Polling frequency
0 to 2 minutes Every second
2 minutes and over Every 12 hours
Authorizations:
access_token
path Parameters
loan_application_uuid
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
Example: 22e0ee76-e496-4488-b813-2de2c90c5e0f

Unique identifier for the loan application.

Responses

Response samples

Content type
application/hal+json
{
  • "loan_application_uuid": "a5764857-ae35-34dc-8f25-a9c9e73aa898",
  • "reason": "processing",
  • "created_at": "2017-07-21T17:32:28Z",
  • "updated_at": "2017-07-21T17:32:28Z",
  • "_links": {
    }
}

Retrieve a loan application

Beta

Retrieve the current status of a processed loan application. The loan application can have one of the following statuses:

  • in_progress - the application is actively being processed
  • action_required - the application requires an action to be taken before a decision can be made. See more details on how to upload documents here
  • decision_made - a credit decision has been made. A link to the decision is provided
Authorizations:
access_token
path Parameters
loan_application_uuid
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
Example: 22e0ee76-e496-4488-b813-2de2c90c5e0f

Unique identifier for the loan application.

Responses

Response samples

Content type
application/hal+json
Example
{
  • "status": "in_progress",
  • "loan_application_uuid": "22e0ee76-e496-4488-b813-2de2c90c5e0f",
  • "loan_application_details": {
    },
  • "_links": {
    }
}

Retrieve the decision for a loan application

Retrieve the decision for a processed loan application. The decision status can be one of the following:

  • provisional_offer - the application was successful, and a provisional offer is contained within the payload
  • offered - the application process has been completed, and the final offer details are contained within the payload
  • rejected - the application was not successful, and a high-level reason for the rejection is contained within the payload
  • action_required - the application requires an action to be taken before a decision can be made. See more details on how to upload documents here
Authorizations:
access_token
path Parameters
loan_application_uuid
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
Example: 22e0ee76-e496-4488-b813-2de2c90c5e0f

Unique identifier for the loan application.

Responses

Response samples

Content type
application/hal+json
Example
{
  • "created_at": "2019-08-24T14:15:22Z",
  • "status": "action_required",
  • "actions": [
    ],
  • "amend_bank_statements_reasons": [
    ],
  • "_links": {
    }
}

Get a document upload URL for a loan application

Beta

Get a document upload URL when an action is required.

A pre-signed URL can be used to upload documents. Documents can only be uploaded when an application has one of the following required actions:

  • upload_bank_statements - upload bank statements for the last 6 months
  • amend_bank_statements - re-upload bank statements, if the previous upload had incorrect or insufficient data
  • upload_filed_accounts - upload the most recent set of financial statements

The upload must be completed with a PUT request with the header x-amz-server-side-encryption:aws:kms. For this request, do not include the access_token:

curl ${document_upload_url} -X PUT -T ./document.pdf -H "x-amz-server-side-encryption:aws:kms"

Each pre-signed URL has a lifespan of 30 seconds and can be used to upload a single document.

Documents must be in PDF format with a maximum file size of 100 MB.

Authorizations:
access_token
path Parameters
loan_application_uuid
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
Example: 22e0ee76-e496-4488-b813-2de2c90c5e0f

Unique identifier for the loan application.

Responses

Response samples

Content type
application/hal+json
{}

Submit the required action

Beta

Submit the required action when documents have been uploaded.

The duration of processing will vary depending on the number of documents.

Authorizations:
access_token
path Parameters
loan_application_uuid
required
string <uuid> ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]...
Example: 22e0ee76-e496-4488-b813-2de2c90c5e0f

Unique identifier for the loan application.

Request Body schema: application/json
s3_keys
required
Array of strings [ 1 .. 30 ] items unique

List of s3 keys representing uploaded documents.

Responses

Request samples

Content type
application/json
{
  • "s3_keys": [
    ]
}

Response samples

Content type
application/problem+json
{
  • "type": "BAD_REQUEST_BODY",
  • "title": "Invalid request body",
  • "detail": "[Object has missing required properties (['some_property'])]"
}