Freelancer Splitpay

This guide explains the integration process for Solaris' Freelancer Splitpay product, including the mandatory information you need to collect from your customer and the necessary endpoints and webhooks you need to integrate into your solution.

Introduction

Product specifications

Consumer Splitpay are currently only available for customers in Germany with a German bank account. Check the overview page for more details on the product specifications.

Solaris' Freelancer Splitpay solution enables self-employed persons to convert transactions that are not older than 90 days into installment loans instantly within a credit line agreement. Additionally, freelancer Splitpay offers high-volume credit lines, ranging from 2,000 to 50,000 EUR, and longer loan terms from 3 to 24 months.

The product is offered to freelancers who are registered as:

  • Freier Beruf/Freiberufler (freelancer or self-employed)
  • Gewerbebetrieb (commercial enterprise)

User journey

Your customers can apply for splitpay by completing the following steps:

  • Enter their desired amount which they want to turn into an installment loan on your frontend to receive an anonymous offer.
  • Apply for a credit line officially and provide the mandatory information.
  • Consent to Solaris' terms and conditions and the credit scoring process, which will be done in relation to their credit line application.
  • If their application is approved, they'll receive the binding credit line offer (SECCI form) and contract, which they must review before the identification process.
  • Complete the identification process and sign the credit line contract.
  • The credit line limit will be available for the customer to use in the form of single installment loans. For each amount the customer uses, an installment loan will be created and serviced separately, and the remaining credit line limit will be recalculated accordingly.

Credit scoring

Solaris uses an automated credit scoring system (Splitpay Freelancer Scorer) to make informed credit decisions on freelancer credit line applications. The scorer collects and analyzes different information, such as the customer's financial information, credit data, transaction history, and outstanding loans to assess their creditworthiness and determine their risk level and credit eligibility.

Based on different credit checks done throughout the application lifecycle, the scorer estimates the probability of default (PD), determining whether a credit line is offered and the limit granted.

How the scorer interacts with the credit line service

The credit line service and its related endpoints handle Splitpay requests and collect the required information about the applicants, such as self-declared financial information, credit records, and account snapshots. Throughout the lifecycle of a credit line application, the scorer provides different responses based on the information provided during each stage of the application.

The scorer performs different credit checks throughout the application lifecycle, such as:

  • Pre-check: Based on the self-declared information the applicant provides when applying for a credit line.
  • Initial scoring: Based on the credit record obtained from external credit bureaus, such as SCHUFA.
  • Verification: Based on the account snapshot to verify the financial information provided in the credit line application. This is the final check, after which the scorer provides the final decision. Some applications could also skip the final verification check.

Credit line application workflow

The following diagram describes the workflow of a credit line application and its different stages and statuses:

credit_line_application_status


System prerequisites

Before integrating Solaris' Consumer Splitpay, you must implement the following requirements:

1. Technical setup:

Set up your environment and get your authentication keys. For step-by-step instructions, check the Technical setup guide.

2. Legal and compliance screens:

Build the necessary legal and compliance screens in your sign-up flow to collect your customers' consent to the necessary legal and compliance requirements.

Create the following screens and record your customers' consent on each screen as a UTC timestamp (e.g., 2019-01-01T00:00:00Z). Afterward, you must pass each timestamp in its respective field to Solaris.

  • Collect the customer's consent to Solaris's Terms and Conditions and store the timestamp in the terms_conditions_signed_at field.
  • Collect the customer's consent to data processing and store the timestamp in the data_terms_signed_at field.
  • Collect the customer's economic interest declaration and store the timestamp in the own_economic_interest_signed_at field.

For step-by-step instructions, check the Legal and compliance screens guide.

note

The mentioned fields are part of the person resource, in which you will store all customer data points.


Webhooks

Solaris recommends subscribing to the following webhook events to better automate your processes:

  • IDENTIFICATION: The status of a person identification has changed.
  • PERSON_CHANGED: One or more attributes of the person object changed. Contains only person_id and no payload.
  • PERSON_DELETED: Solaris deletes all personal data related to the given person from its system according to GDPR regulations. You are legally required to delete all personal information related to the customer specified in the payload as soon as you receive this webhook notification.
  • FREELANCER_CREDIT_LINE_APPLICATION: The status of the freelancer credit line application changed.
  • CREDIT_LINE: The status of a freelancer credit line has changed.
  • LOAN: The status of a loan has changed.
  • REPAYMENT_PLAN: Sends updates about a repayment plan related to a loan.
  • ACCOUNT_SNAPSHOT: The status of an account snapshot changed.
  • PERSON_MOBILE_NUMBER_CREATED: A mobile number was created for a customer, but has not yet been verified.
  • PERSON_CREDIT_RECORD: The status of a freelancer's credit record has changed.

For detailed instructions on implementing Solaris webhooks, check the webhooks documentation.


Integration flow

Integration steps

Important
  • This guide includes the integration process for Freelancer Splitpay as a standalone solution, i.e., the credit limit will be added to an external account.
  • For existing customers who already have a current account with Solaris and wish to apply for a credit line, skip Step 1.

Integrate Solaris' Freelancer Splitpay by completing the following steps:

User registration and credit line application creation

  1. Freelancers interested in a credit line request an anonymous installment plan for a given amount on your frontend.
  2. Calculate an anonymous installment plan for the customer by completing Step 0: Generate an anonymous installment plan. Afterward, the customer apply for a credit line and provide the necessary information.
  3. Collect the mandatory customer data and consent to the legal and regulatory requirements in your sign-up flow, and create a person resource for your customer by completing Step 1.
  4. Create a freelancer credit line application by completing Step 2
  5. Create a credit record for the freelancer and link it to the application by completing Step 3.
  6. Create an account snapshot for the freelancer and link it to the application by completing Step 4.

Customer identification and credit line creation

If Solaris rejects the application, notify the customer of the rejection on your frontend.

note

Please note that the application could be rejected for different reasons and during various application stages. For example, the application could be rejected in the initial scoring or the verification stage. Check the Credit line application workflow section for more information.

If Solaris approves the application:

  1. Notify the customer of the approval on your frontend.
  2. Trigger the identification and contract signing process by completing Step 5
  3. Redirect the customer to complete the video identification with IDnow.
  4. After successful customer identification and e-signing, Solaris creates the credit line and activates it for the customer.

Credit line usage and servicing

  1. Whenever a customer uses an amount from the credit line limit, an installment loan for this amount will be created and serviced separately, and the remaining amount of the credit line limit will be recalculated. You can find all related endpoints to usage and servicing in Step 6.

You can find detailed descriptions of these steps and their related endpoints in the following sections.


Step 0: Generate an anonymous installment plan

In this step, you should enable your customers to request an anonymous installment plan before applying for a credit line by integrating the following endpoint in your sign-up flow. Your customers enter the desired amount they want to convert into installments and they receive an initial installment plan, including the monthly installment amount, loan duration, and applicable interest rates.

POST Create an anonymous credit line installment plan

This endpoint generates an anonymous credit line installment plan for a specific amount, allowing potential customers to receive an initial offer before applying for a credit line. You must add the following properties in the request body:

  • amount: The total amount the customer wants to turn into an installment loan.
  • interest_rate: The interest rate applicable on the credit line. This rate is fixed for each partner depending on contractual and commercial agreements with Solaris.

Request example

Copy
Copied
POST /v1/freelancers/anonymous_credit_line_installment_plans
{
  "amount": {
    "currency": "EUR",
    "unit": "cents",
    "value": 100000
  },
  "interest_rate": 0.11
}

Response example

The API call returns an initial installment plan, including the monthly installment amount, the loan duration, and the applicable interest rates.

Copy
Copied
{
    "installment_plans": [
        {
            "total": {
                "value": 102528,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 3,
            "monthly_installment": {
                "value": 34176,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 102991,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 4,
            "monthly_installment": {
                "value": 25748,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 103457,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 5,
            "monthly_installment": {
                "value": 20691,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 103925,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 6,
            "monthly_installment": {
                "value": 17321,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 104404,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 7,
            "monthly_installment": {
                "value": 14915,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 104875,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 8,
            "monthly_installment": {
                "value": 13109,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 105346,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 9,
            "monthly_installment": {
                "value": 11705,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 105824,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 10,
            "monthly_installment": {
                "value": 10582,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 106300,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 11,
            "monthly_installment": {
                "value": 9664,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 106775,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 12,
            "monthly_installment": {
                "value": 8898,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 107257,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 13,
            "monthly_installment": {
                "value": 8250,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 107742,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 14,
            "monthly_installment": {
                "value": 7696,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 108219,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 15,
            "monthly_installment": {
                "value": 7215,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 108708,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 16,
            "monthly_installment": {
                "value": 6794,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 109188,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 17,
            "monthly_installment": {
                "value": 6423,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 109674,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 18,
            "monthly_installment": {
                "value": 6093,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 110164,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 19,
            "monthly_installment": {
                "value": 5798,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 110651,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 20,
            "monthly_installment": {
                "value": 5533,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 111143,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 21,
            "monthly_installment": {
                "value": 5292,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 111633,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 22,
            "monthly_installment": {
                "value": 5074,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 112128,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 23,
            "monthly_installment": {
                "value": 4875,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 112619,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 24,
            "monthly_installment": {
                "value": 4693,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        }
    ]
}

Click here to view the full API reference

After the customer decides to apply for a credit line, you must then collect the mandatory information from the customer on your frontend. Such information includes:

  • The mandatory personal information required to create a person resource in Step 1.
  • All the UTC timestamps of the customer's consent to the legal and regulatory requirements in System prerequisites.
  • The mandatory additional information required to create a credit line application resource in Step 2.

Step 1: Collect customer data and create person resource

The customer must provide the mandatory data points in your sign-up flow, including all the timestamps of the customer's consent to the legal and compliance screens. Afterward, you pass all the data points to Solaris by creating a person resource to represent your customer.

What is a person resource?

The person resource represents the customer's personal and financial data at Solaris. It contains all mandatory customer data, as well as links to other resources created for the customer (e.g., accounts, tax identifications).

API reference

Visit the following link to find all the endpoints related to the person resource, including related properties and examples.

Related webhook events

Important points about the person resource
  • The mandatory data points for this endpoint depend on various factors, such as the product, customer type (e.g., retail customers, freelancers, legal representatives, or beneficial owners), and country.
  • You must submit the information exactly as it appears in official documents.
  • Solaris validates the values entered for the fields first_name and last_name. Please ensure your solution applies the following sanitization rules to these fields:

    • It must not be longer than 50 characters.
    • It must not start with a whitespace.
    • It must not include any symbols or emojis.
  • When testing this process on Sandbox, please ensure that you create as many unique person resources as possible (i.e., unique values for first_name, last_name, birth_city, and birth_date). If you create more than 1000 identical person resources, then the API will return a 400 error.

Note about branching

Solaris may restrict the residency countries that are allowed for customers onboarding to a specific branch. If you attempt to create a customer with a residency country that is not allowed for the given branch, the API will return a 400 error and provide a list of allowed residency countries.

Example:

Copy
Copied
{
    "errors": [
        {
            "id": "24b0e02a-341d-40bc-9e52-0d9f8cc8c6eb",
            "status": 400,
            "code": "invalid_model",
            "title": "Invalid Model",
            "detail": "country Residency Country is not allowed for this branch,allowed residency country values for branch \"null\" are [\"DE\", \"FR\"]",
            "source": {
                "field": "country",
                "message": "Residency Country is not allowed for this branch,allowed residency country values for branch \"null\" are [\"DE\", \"FR\"]"
            }
        }
    ]
} 

Please contact your Partner Manager for information about which residency countries are allowed for your branch(es).

Address validation

Your solution must implement address validation to ensure that your system rejects non-existent or wrong address entries before the customer goes through the identification flow. In addition, please note the following best practices:

  • Select a reliable provider to ensure the accuracy and actuality of data.
  • Address validation must happen in real-time when the customer enters their address during the onboarding flow.
  • The system can make auto-complete suggestions to the customer when entering the address. Additionally, it must reject non-existent or wrong entries.
  • If the address validation fails, the customer can enter a nearby address and proceed with the identification flow. However, the customer must submit a proof of address afterward to customer support, such as a rental contract, electricity bill, or certificate of residence in Germany (i.e., Meldebescheinigung).

POST Create person

This endpoint creates a person resource for your customer. Collect the mandatory data points from your customer in the sign-up flow and pass them to Solaris in the request body of this endpoint.

note

The following data points are required for freelancers in Germany.

  • salutation (Check the appendix for possible enums)
  • first_name (including all middle names as printed on the ID document)
  • last_name (including all name parts as printed on the ID document)
  • birth_date
  • birth_city
  • birth_country (ISO 3166-1 alpha-2 codes
  • nationality (ISO 3166-1 alpha-2 codes
  • address (Street, Number, City, Postal Code, Country, State).
  • contact_address (OPTIONAL To be used only if the customer's current address is younger than two years.)
  • mobile_number The mobile number will be verified during the identification process.
  • iban (Only if the customer will be identified using the Bankident KYC method)- employment_status
  • marital_status (Check the appendix for possible enums)
  • employment_status (Check the appendix for possible enums)
  • data_terms_signed_at (UTC timestamp)
  • terms_conditions_signed_at (UTC timestamp)
  • own_economic_interest_signed_at (UTC timestamp)
  • business_trading_name: The name of the freelancer business
  • Business Address The business address (Street, Number, City, Postal Code, Country, State).
  • business_purpose
  • nace_code
  • website_social_media (if available)
  • expected_monthly_revenue_cents
  • vat_number (becomes mandatory for self-employed persons with expected annual revenue of more than 17.500€)

Request URL

Copy
Copied
POST /v1/persons

Response example

The API returns a person object with a unique id, which is the person_id. You will need this id to append the person resource with additional information in the remaining steps of this guide.

Copy
Copied
{
    "id": "dca1b705ed9c05c134bba62f829c85a8cper",
    "salutation": "MR",
    "title": null,
    "first_name": "X-MANUALTEST-HAPPYPATH",
    "last_name": "Sebastian",
    "address": {
        "line_1": "Musterstraße 1",
        "line_2": null,
        "postal_code": "12345",
        "city": "Musterstadt",
        "country": "DE",
        "state": "BE"
    },
    "contact_address": {
        "line_1": null,
        "line_2": null,
        "postal_code": null,
        "city": null,
        "country": null,
        "state": null
    },
    "email": "person@example.com",
    "mobile_number": "+49301234567",
    "birth_name": null,
    "birth_date": "1976-12-14",
    "birth_city": "Berlin",
    "birth_country": "DE",
    "nationality": "DE",
    "employment_status": "FREELANCER",
    "job_title": null,
    "tax_information": {
        "tax_assessment": null,
        "marital_status": "SINGLE"
    },
    "business_purpose": "Banking as a Service",
    "industry": "HOLDING_COMPANIES",
    "industry_key": "ACTIVITIES_OF_HEAD_OFFICES",
    "terms_conditions_signed_at": "2021-01-01T00:00:00.000Z",
    "own_economic_interest_signed_at": "2021-01-01T00:00:00.000Z",
    "aml_follow_up_date": "2028-08-04",
    "aml_confirmed_on": "2022-02-07",
    "flagged_by_compliance": false,
    "expected_monthly_revenue_cents": 1000000,
    "vat_number": "12345678",
    "website_social_media": "www.solarisbank.de",
    "business_trading_name": "ABC Freelancer",
    "nace_code": "M 70.10",
    "business_address_line_1": "Musterstr. 8",
    "business_address_line_2": "Line 2",
    "business_postal_code": "10178",
    "business_city": "Berlin",
    "business_country": "DE",
    "screening_progress": "NOT_SCREENED",
    "risk_classification_status": "NOT_SCORED",
    "customer_vetting_status": "NOT_VETTED",
    "annual_income_range": null,
    "data_terms_signed_at": null,
    "branch": null,
    "birth_province": null,
    "birth_post_code": null,
    "socioprofessional_category": null,
    "purpose_of_account_opening": null,
    "main_income_source": null,
    "work_country": null,
    "work_province": null,
    "self_declared_as_pep": null,
    "international_operativity_expectation": [],
    "registration_number": null
}

Click here to view the full API reference


Step 2: Create freelancer credit line application

After collecting the mandatory personal information from the customer and creating a person resource, you must collect the required data fields for the credit line application and pass them to Solaris using the following endpoint.

POST Create freelancer credit line application

This endpoint creates a freelancer credit line application and assigns it to the person with the person_id included in the request URL. The payload of this endpoint contains all the required financial information and account data about the applicant, which the credit scorer uses to initiate a series of credit checks. You must include the following mandatory properties in the request body:

  • annual_turnover: The total annual income generated by the freelancer's business before deducting any expenses.
  • corporate_name: The corporate name of the freelancer's business.
  • foundation_date: The date when the freelancer's business was founded.
  • legal_form: The legal form of the freelancer's business. Possible values are FREE_OCCUPATION and COMMERCIAL_ENTERPRISE.
  • monthly_net_profit: The monthly net profit generated by the freelancer's business after deducting all recurring business expenses.
  • monthly_non_mortgage_credit_expense: The total monthly amount of credit expenses incurred by the freelancer, excluding mortgage-related expenses.
  • monthly_private_fixed_cost: The total monthly amount of private fixed costs for the freelancer. Private costs include expenses not related to the business activities, such as rent or health insurance.
  • recipient_iban: The IBAN of the beneficiary's account.
  • tax_id: The tax ID associated with the freelancer's legal entity.

Request example

Copy
Copied
POST /v1/freelancers/persons/{person_id}}/credit_line_applications
{
  "annual_turnover": { 
    "currency": "EUR",
    "unit": "cents",
    "value": 6000000
  },
  "corporate_name": "string", 
  "foundation_date": "2019-08-24", 
  "legal_form": "FREE_OCCUPATION", 
  "monthly_net_profit": {
    "currency": "EUR",
    "unit": "cents",
    "value": 500000
  },
  "monthly_non_mortgage_credit_expense": { 
    "currency": "EUR",
    "unit": "cents",
    "value": 1000
  },
  "monthly_private_fixed_cost": {
    "currency": "EUR",
    "unit": "cents",
    "value": 1000
  },
  "recipient_iban": "DE13110101014386274299", 
  "tax_id": "string"
}

Response example

The API call returns an object with a unique ID, the application_id for the freelancer credit line application, including the application status and the remaining attributes, which will be populated during the application lifecycle.

Additionally, the API call triggers the freelancer credit scoring system, which initiates a pre-check based on the self-declared information passed in the payload, and rejects applications that don't meet the minimum credit eligibility criteria.

Rejected application payload

Copy
Copied
201 Created
{
    "status_description": null,
    "status": "rejected",
    "recipient_iban": "DE13110101014386274299",
    "reason": "rejected by scorer",
    "person_id": "bb909167b48218dca2d7241c6c92bbf3cper",
    "offered_limit": null,
    "offered_interest_rate": 0.01,
    "net_disposable_income": null,
    "mandate_reference_number": null,
    "identification_id": null,
    "id": "ae316977bbb948ab8a2774f16101ead4fcla",
    "decision": "REJECTED",
    "credit_line_id": null
}

Accepted application payload

If the application passes the pre-check, the application status changes to credit_record_pending, and you must create a credit record and link it to the application as described in the following step to

Copy
Copied
{
    "status_description": null,
    "status": "credit_record_pending",
    "recipient_iban": "DE13110101014386274299",
    "reason": null,
    "person_id": "bb909167b48218dca2d7241c6c92bbf3cper",
    "offered_limit": null,
    "offered_interest_rate": 0.01,
    "net_disposable_income": null,
    "mandate_reference_number": null,
    "identification_id": null,
    "id": "6cc34a3d67a545e78039b7466bc6354efcla",
    "decision": "PENDING",
    "credit_line_id": null
}

Click here to view the full API reference

GET Retrieve freelancer credit line application

This endpoint returns the current status and details of an existing freelancer credit line application. For a list of possible values of the application status and their descriptions, check the appendix.

Alternatively, you can subscribe to the webhook event FREELANCER_CREDIT_LINE_APPLICATION to receive status updates on the application.

Request URL

Copy
Copied
GET /v1/freelancers/persons/{person_id}/credit_line_applications/{application_id}

Response example

Copy
Copied
{
  "credit_line_id": null,
  "decision": "PENDING",
  "id": "6cc34a3d67a545e78039b7466bc6354efcla",
  "identification_id": null,
  "mandate_reference_number": null,
  "net_disposable_income": null,
  "offered_interest_rate": 0.01,
  "person_id": "ad8f5cefdc73035f17973fecb4fa2ebccper",
  "reason": "string",
  "recipient_iban": "DE13110101014386274299",
  "status": "credit_record_pending",
  "status_description": "string"
}

Click here to view the full API reference


Step 3: Create freelancer credit record

If the application passes the initial pre-check, the application status changes to credit_record_pending, which means you must create a credit record for the customer and link it to the credit line application by integrating the endpoints in this step.

What is a credit record?

The credit record contains the customer's credit data and history. Creating a credit record is usually required in lending products integrations as it's used for credit scoring to determine the customer's creditworthiness and eligibility.

Important
  • The credit record is only valid for onboardings in Germany since the information is retrieved from SCHUFA, which is a German credit bureau.
  • For lending onboardings in other countries, such as France, Italy, and Spain, creating a tax identification for the customer substitutes a credit record.

Integrate the following endpoints to create credit records for freelancers.

API reference

Visit the following link to find all the endpoints related to the credit record resource, including related properties and examples.

POST Create a credit record for a freelancer

This endpoint creates a credit record for the customer with the person_id specified in the request URL. You can collect this information manually through SCHUFA or other third-party service providers or via Solaris. You must add the following attributes in the request body:

  • source: The source of the file. Possible values are partner or solarisBank.
  • file: The file of the credit record Base64-encoded. Only required If source is set to partner.

Request URL

Copy
Copied
POST /v1/freelancers/persons/{person_id}/credit_records
  { 
  "source": "SolarisBank",
  "file": null
  }

Response example

The API call returns an object with a unique ID, which is the credit_record_id and the status of the credit record, set initially to available.

Copy
Copied
  { 
  "status": "available",
  "person_id": "dc1a6812a14f6cc338cd084208535bcdcper",
  "id": "fbb7d15fa4c54ba0b077592665ef04a4ccrd",
  "created_at": "2020-20-03T18:01:48.000Z"
  }

GET Retrieve freelancer credit record

This endpoint returns the information about a customer's existing credit record, including the status and validity of the credit record. Add the person_id and the credit_record_id in the request URL. If the status of the credit record is expired, you must create a new one for the customer.

Additionally, subscribe to the webhook event PERSON_CREDIT_RECORD to receive notifications when the status of a credit record changes.

Request URL

Copy
Copied
GET /v1/persons/{person_id}/credit_records/{credit_record_id}

Response example

Copy
Copied
  {
  "status": "available",
  "person_id": "dc1a6812a14f6cc338cd084208535bcdcper",
  "id": "fbb7d15fa4c54ba0b077592665ef04a4ccrd",
  "created_at": "2020-20-03T18:01:48.000Z"
  }

PUT Link credit record to freelancer credit line application

This endpoint links the credit record you created for the customer to their existing credit line application. You must add the credit_record_id in the payload of this endpoint.

Request example

Copy
Copied
PUT /v1/freelancers/persons/{person_id}/credit_line_applications/{application_id}/credit_record
{
  "credit_record_id": "fbb7d15fa4c54ba0b077592665ef04a4ccrd"
}

Click here to view the full API reference

After linking the credit record to the application, the application status changes to initial_scoring_pending, triggering the credit scoring system to start the credit checks.

note

Please note that the application could be rejected at this stage if it did not pass the credit scoring check.


Step 4: Create account snapshot and link it to the application

After the application passes the initial scoring, the application status could change directly to offered, which means the verification step is not required.

If the application status changes to account_snapshot_pending, then the final verification step is required to complete the credit scoring process. In this case, you must create an account snapshot for the customer and link it to their credit line application by using the endpoints in this step.

What is an account snapshot?

The account snapshot contains a breakdown of the customer's account information, such as balance, transactions, bookings, and recurrent repayment amounts over a certain period of time. Creating an account snapshot is usually required in lending products integrations as it's used for credit scoring to verify the customer's financial data.

Integrate the following endpoints to create account snapshots for your customers.

API reference

Visit the following link to find all the endpoints related to the account snapshot resource, including related properties and examples.

POST Create an account snapshot for a customer

This endpoint creates an account snapshot for the customer with the person_id specified in the request URL. You can create an account snapshot in different ways by specifying the source of the account snapshot.

1. Account snapshot via FinTech systems

You can create an account snapshot via FIN_TECH_SYSTEMS by completing the following steps:

  1. Integrate the FIN_TECH_SYSTEMS wizard container in your solution by following their documentation.
  2. Call the following endpoint and add the following properties in the request body:

    • source: FIN_TECH_SYSTEMS
    • iban: (Optional) you can add the IBAN of the customer's account.
  3. The API call will return a wizard_session_key, which you must enter in the FIN_TECH_SYSTEMS wizard container to start the account snapshot session.
  4. The customer enters their bank credentials to initiate the account snapshot.

Request example

Copy
Copied
POST /v1/persons/{person_id}/account_snapshots
{
    "source": "FIN_TECH_SYSTEMS"
}

Response example

The API call returns a resource with a unique ID, the account_snapshot_id, as well as the wizard_session_key.

Copy
Copied
{
    "wizard_session_key": "Hm7jUSC7XU2nQjPqJO8dl39eDkdjtOdCtywcmv3x",
    "location": null,
    "id": "8df2a8ba713c43dc9cb481b9cceed487snap",
    "account_id": null
}

2. Account snapshot via Finreach

You can create an account snapshot via FinX by completing the following steps:

  1. Integrate the FinX widget in your solution by following their documentation.
  2. Call the following endpoint and add the following properties in the request body:

    • source: FINREACH
  3. The API call will return a location, which is a URL to which you must redirect your customer to enter their bank credentials to initiate the account snapshot.

Request example

Copy
Copied
POST /v1/persons/{person_id}/account_snapshots
{
  "source": "FINREACH"
}

Response example

The API call returns a resource with a unique ID, the account_snapshot_id, as well as URL to which you must redirect the customer.

Copy
Copied
{
    "wizard_session_key": null,
    "location": "https://ui.solaris-i.prod.finleap.cloud?token=xxxxxx",
    "id": "8df2a8ba713c43dc9cb481b9cceed487snap",
    "account_id": null
}

3. Account snapshot via partner

If you want to upload the details of an account snapshot you've created (e.g., if you already have your own connection with FIN_TECH_SYSTEMS or FINREACH), specify the source of the account snapshot file as partner and add the account snapshot data in the snapshot_data field.

Request example

Copy
Copied
POST /v1/persons/{person_id}/account_snapshots
{
    "source": "PARTNER",
    "snapshot_data": {
    "account": {
        "bank_name": "",
        "bic": "",
        "country_id": "",
        "description": "",
        "holder": "John Smith",
        "iban": "DE92370601930002130041",
        "joint_account": false
    },
    "balance": {
        "balance": 3720.20,
        "currency": "EUR",
        "date": "2022-02-03",
        "limit": 0
    },
    "date": "2022-02-03",
    "days": 90,
    "turnovers": [
        {
            "amount": 4000.05,
            "booking_date": "2022-02-01",
            "counter_bic": "",
            "counter_holder": "Salary company",
            "counter_iban": "DE89500105177323343587",
            "currency": "EUR",
            "purpose": [
                "LOHN / GEHALT 01/22"
            ],
            "tags": [],
            "CrifCategory": "RE_05"
        },
        {
            "amount": 4000.05,
            "booking_date": "2022-01-02",
            "counter_bic": "",
            "counter_holder": "Salary company",
            "counter_iban": "DE89500105177323343587",
            "currency": "EUR",
            "purpose": [
                "LOHN / GEHALT 12/21"
            ],
            "tags": [],
            "CrifCategory": "RE_05"
        },
        {
            "amount": 4000.05,
            "booking_date": "2021-12-01",
            "counter_bic": "",
            "counter_holder": "Salary company",
            "counter_iban": "DE89500105177323343587",
            "currency": "EUR",
            "purpose": [
                "LOHN / GEHALT 11/21"
            ],
            "tags": [],
            "CrifCategory": "RE_05"
        },
              {
            "amount": 4000.05,
            "booking_date": "2021-11-05",
            "counter_bic": "",
            "counter_holder": "Salary company",
            "counter_iban": "DE89500105177323343587",
            "currency": "EUR",
            "purpose": [
                "LOHN / GEHALT 10/21"
            ],
            "tags": [],
            "CrifCategory": "RE_05"
        }
    ]
}
}

Response example

The API call returns a resource with a unique ID, the account_snapshot_id.

Copy
Copied
{
  "wizard_session_key": null,
  "location": null,
  "id": "0a3f28733f9a4842842aae2804f80eb4snap",
  "account_id": null
}

4. Account snapshot via Solaris

You can create an account snapshot via Solaris for internal accounts by specifying the source as SOLARISBANK and adding the customer's account_id in the request body.

Request example

Copy
Copied
{
  "source": "SOLARISBANK",
  "account_id": "adc123a45d6d7cf8fbfeed537ba919d5cacc"
}

Response example

The API call returns a resource with a unique ID, the account_snapshot_id.

Copy
Copied
POST /v1/persons/{person_id}/account_snapshots
{
  "wizard_session_key": null,
  "location": null,
  "id": "0a3f28733f9a4842842aae2804f80eb4snap",
  "account_id": "adc123a45d6d7cf8fbfeed537ba919d5cacc"
}

GET Retrieve a customer's account snapshot

This endpoint returns the information about a customer's existing account snapshot, including the status and validity of the account snapshot. Add the person_id and the account_snapshot_id in the request URL. If the status of the account snapshot is expired, you must create a new one for the customer.

Additionally, subscribe to the webhook event ACCOUNT_SNAPSHOT to receive notifications when the status of an account snapshot changes.

Request URL

Copy
Copied
GET /v1/persons/{person_id}/account_snapshots/{account_snapshot_id}

PUT Link account snapshot to freelancer credit line application

This endpoint links a freelancer account snapshot to their existing credit line application. You must add the account_snapshot_id in the request body.

The credit scorer uses the account snapshot for the final verification check to verify the financial information shared about the customer. After the final verification is completed, the credit scorer gives the final decision on the credit line application.

Request example

Copy
Copied
PUT /v1/freelancers/persons/{person_id}/credit_line_applications/{application_id}/account_snapshot
{
  "account_snapshot_id": "6c8f81a234df4052a9cde197577347b7snap"
}

Click here to view the full API reference

After linking the account snapshot to the application, the application status changes to account_snapshot_verification_pending, triggering the final verification step in the credit scoring process.

note

Please note that the application could be rejected at this stage if it did not pass the final verification check.


Step 5: Create contract agreement and complete the video identification

After the credit line application passes the credit scoring process, you must collect the customer's consent on the credit line contract and terms and conditions and direct the customer to complete the video identification through our provider IDnow.

PUT Set contract agreement date for freelancer credit line application

This endpoint creates the credit line contract agreement. After a credit line application passes the credit checks and the status changes to offered, call this endpoint and collect the customer's consent on the credit line contract and terms and conditions.

This endpoint also triggers the identification process automatically. Therefore, you don't need to initiate the identification process manually for the customer.

Request URL

Copy
Copied
PUT /v1/freelancers/persons/{person_id}/credit_line_applications/{freelancer_application_id}/contract_agreement

Response example

The API call returns the same credit line application object with additional properties being populated. The status should change to identification_creation_pending, which means the identification creation process has been triggered, but the resource has not been created yet.

Copy
Copied
200 OK
{
    "status_description": null,
    "status": "identification_creation_pending",
    "recipient_iban": "DE13110101014386274299",
    "reason": null,
    "person_id": "201f438a4ba4494ba24489615275f745cper",
    "offered_limit": null,
    "offered_interest_rate": 0.01,
    "net_disposable_income": null,
    "mandate_reference_number": "LXD3RGLRTP6HHM",
    "identification_id": null,
    "id": "3446b6f09c024086a9066b87e970b1d3fcla",
    "decision": "OFFERED",
    "credit_line_id": null
}

Click here to view the full API reference

GET Retrieve the identification ID

Call the same GET freelancer credit line application method to check for updates about the identification process. Once the identification resource has been created, the application status changes to identification_pending, and the payload includes the identification_id.

Request URL

Copy
Copied
GET /v1/freelancers/persons/{person_id}/credit_line_applications/{application_id}

Response example

Copy
Copied
200 OK
{
    "status_description": null,
    "status": "identification_pending",
    "recipient_iban": "DE13110101014386274299",
    "reason": null,
    "person_id": "201f438a4ba4494ba24489615275f745cper",
    "offered_limit": {
        "value": 2230000,
        "unit": "cents",
        "currency": "EUR"
    },
    "offered_interest_rate": 0.01,
    "net_disposable_income": {
        "value": 345194,
        "unit": "cents",
        "currency": "EUR"
    },
    "mandate_reference_number": "LXD3RGLRTP6HHM",
    "identification_id": "0e4c3a799068c0636e3b01eeda07fbfccidt",
    "id": "3446b6f09c024086a9066b87e970b1d3fcla",
    "decision": "OFFERED",
    "credit_line_id": null
}

GET Retrieve the identification details

This endpoint retrieves the identification details created for the relevant customer. The identification details include the identification reference and URL, to which you need to redirect your customer to complete the video identification process with IDnow.

Request URL

Copy
Copied
GET /v1/persons/{person_id}/identifications/{identification_id}

Response example

The API call returns the identification object, including identification reference and URL. You must redirect your customer to complete the process with IDnow.

The payload includes the identification status, which you can track by calling this endpoint or subscribing to the webhook event IDENTIFICATION. For a list of possible values for IDnow status and their descriptions, check the appendix.

Copy
Copied
200 OK
{
    "id": "0e4c3a799068c0636e3b01eeda07fbfccidt",
    "reference": "TST-MFSKK",
    "url": "https://go.test.idnow.de/solarisbankvideoidentsandbox/identifications/0e4c3a799068c0636e3b01eeda07fbfccidt",
    "status": "pending",
    "completed_at": null,
    "method": "idnow",
    "proof_of_address_type": null,
    "proof_of_address_issued_at": null,
    "language": null,
    "address": null,
    "documents": [],
    "iban": null,
    "terms_and_conditions_signed_at": null,
    "authorization_expires_at": null,
    "confirmation_expires_at": null
}

After the customer completes the identification, the credit line application status changes to identification_completed.

note

Please note that the credit line application will also be rejected in case of a failed identification.

GET Retrieve the credit line ID

Once the video identification process has been completed successfully, Solaris creates the credit line. You can track the credit line creation process by calling the same GET freelancer credit line application method.

Request URL

Copy
Copied
GET /v1/freelancers/persons/{person_id}/credit_line_applications/{application_id}

Response example

Once the credit line has been created, the application status changes to credit_line_created, and the credit_line_id will be included in the payload, as well as the full credit line details such as the amount and interest rates.

Copy
Copied
200 OK
{
    "status_description": null,
    "status": "credit_line_created",
    "recipient_iban": "DE13110101014386274299",
    "reason": null,
    "person_id": "201f438a4ba4494ba24489615275f745cper",
    "offered_limit": {
        "value": 2230000,
        "unit": "cents",
        "currency": "EUR"
    },
    "offered_interest_rate": 0.01,
    "net_disposable_income": {
        "value": 345194,
        "unit": "cents",
        "currency": "EUR"
    },
    "mandate_reference_number": "LXD3RGLRTP6HHM",
    "identification_id": "0e4c3a799068c0636e3b01eeda07fbfccidt",
    "id": "3446b6f09c024086a9066b87e970b1d3fcla",
    "decision": "OFFERED",
    "credit_line_id": "04d041ee16a5484db9a98a9faa3067e7ccln"
}

Step 6: Credit line usage and servicing

This step includes all the relevant endpoints you need to integrate into your solution to use and service credit lines.

Credit line usage

After a customer is granted a credit line, they can use the limit in the form of single installment loans.

For example, if Solrisbank offers a customer a 5,000 EURO credit line limit, they can choose to use 3,000 EURO to pay back the principal and interests in monthly installments over the course of 24 months. An installment loan for this amount and term will be created and serviced separately, leaving the customer with a remaining credit line limit of 2,000, which they can use in

note

A credit line must be created.

POST Generate available installment plans

This endpoint generates possible installment plans for a given amount. Once a customer is granted a credit line, they can convert previous transactions into installments.

You must generate possible installment plans and terms for the given amount and share them with the customer.

Request example:

Copy
Copied
POST /v1/persons/{person_id}/credit_lines/{credit_line_id}/available_installment_plans
{
  "amount": {
    "currency": "EUR",
    "unit": "cents",
    "value": 1000
  },
  "interest_rate": 0.11 //optional, only if a specific interest rate should be calculated otherwise normal interest rate applies
}

Response example:

The API call returns an array of possible installment plans for the given amount, including the term, monthly installment amount, and applicable interest rate.

Copy
Copied
{
    "installment_plans": [
        {
            "total": {
                "value": 314718,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 8,
            "monthly_installment": {
                "value": 39340,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 316135,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 9,
            "monthly_installment": {
                "value": 35126,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 317566,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 10,
            "monthly_installment": {
                "value": 31757,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 318992,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 11,
            "monthly_installment": {
                "value": 28999,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 320423,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 12,
            "monthly_installment": {
                "value": 26702,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 321872,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 13,
            "monthly_installment": {
                "value": 24759,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 323315,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 14,
            "monthly_installment": {
                "value": 23094,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 324758,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 15,
            "monthly_installment": {
                "value": 21650,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 326216,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 16,
            "monthly_installment": {
                "value": 20389,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 327670,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 17,
            "monthly_installment": {
                "value": 19275,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 329122,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 18,
            "monthly_installment": {
                "value": 18285,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 330590,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 19,
            "monthly_installment": {
                "value": 17399,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 332052,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 20,
            "monthly_installment": {
                "value": 16603,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 333520,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 21,
            "monthly_installment": {
                "value": 15882,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 335001,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 22,
            "monthly_installment": {
                "value": 15227,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 336477,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 23,
            "monthly_installment": {
                "value": 14629,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        },
        {
            "total": {
                "value": 337960,
                "unit": "cents",
                "currency": "EUR"
            },
            "term": 24,
            "monthly_installment": {
                "value": 14082,
                "unit": "cents",
                "currency": "EUR"
            },
            "interest_rate": 0.11,
            "effective_interest_rate": 0.1157
        }
    ]
}

Click here to view the full API reference

POST Create a credit line loan

This endpoint creates a loan resource based on an installment plan. The loan is used for bank statements and should shortly describe the purpose of the loan. Additionally, you should assign a reference for the loan and indicate whether a loan for a specific transaction was already created.

Field interest_rate is only required if a particular interest rate applies to the loan.

Request example

Copy
Copied
POST /v1/persons/{person_id}/credit_lines/{credit_line_id}/loans
{
  "amount": {
    "currency": "EUR",
    "unit": "cents",
    "value": 1000
  },
  "interest_rate": 0.11, // optional, only if a specific interest rate should be calculated otherwise normal interest rate applies
  "reference": "string", //Your reference number for the loan
  "purpose": "string", //Purpose of the credit line loan 
  "term": 3
}

Response example

The API call returns an object with a unique ID, the loan_id, and the loan status.

For a list of possible values of the credit line loan status and their descriptions, check the appendices section. Additionally, subscribe to the webhook event LOAN to receive status updates about the loan.

Copy
Copied
{
    "status": "payout_pending",
    "id": "f8930e8d3dfa48e4a898d7a97c0d78b4cloa",
  	"interest_rate": 0.1,
}

Click here to view the full API reference

GET Retrieve a credit line

This endpoint returns the details of the credit line, such as the used amount, active loans, available limit, etc.

Request URL

Copy
Copied
GET /v1/persons/{person_id/}credit_lines/{credit_line_id}

Response example

Copy
Copied
{
    "utilized_amount": {
        "value": 1100,
        "unit": "cents",
        "currency": "EUR"
    },
    "status": "open",
    "recipient_iban": "DE85110101010987654321",
    "person_id": "c77044e6a8e35e3a4deaf7c9a4cc2476cper",
    "mandate_reference_number": "L0123456789ABCD",
    "locking_status": "BLOCK",
    "limit": {
        "value": 50000,
        "unit": "cents",
        "currency": "EUR"
    },
    "latest_disposable_income": {
        "value": 9661,
        "unit": "cents",
        "currency": "EUR"
    },
    "interest_rate": 0.12,
    "id": "d968824ecf0c490fa4e1302705bd677dccln",
    "disposable_income": {
        "value": 10000,
        "unit": "cents",
        "currency": "EUR"
    },
    "created_at": "2019-12-11T17:24:10",
    "annual_percentage_rate": 0.12,
    "active_loans": [
        {
            "id": "36078f1c3e034f6cbf8202da23590e64cloa"
        }
    ],
    "account_id": "01880934bd1531530e2d20a210e4006bcacc",
    "account_iban": "DE25110101002910133758"
}

Click here to view the full API reference


Credit line servicing

This section includes the different endpoints you need to integrate in your solution for servicing and maintaining credit lines for your customers.

PATCH Update the payout account tied to a credit line

This endpoint updates the payout account used for a credit line loan payout. The payout account is an internal account.

Request example

Copy
Copied
PATCH /v1/persons/{person_id}/credit_lines/{credit_line_id}/payout_account
{
  "account_id": "adc123a45d6d7cf8fbfeed537ba919d5cacc"
}

Click here to view the full API reference

PUT Terminate a credit line

This endpoint terminates a created credit line for a person's account. Terminating a credit line can be initiated from the customer or Solaris.

You must include the person_id and credit_line_id in the request URL and add the following property in the request body:

  • requested_at: The date when the credit line termination becomes effective.

Request example

Copy
Copied
PUT /v1/persons/dc1a6812a14f6cc338cd084208535bcdcper/credit_lines/c5f22b00baa845869ceb3a7d90d59bffccln/terminate
{
  "requested_at": "2021-08-24"
}

Click here to view the full API reference

PUT Revoke a credit line

The customer can revoke an offered credit line within 14 days from the issuance date. The following endpoint revokes a created credit line for a customer.

Request URL

Copy
Copied
PUT /v1/persons/{person_id}/credit_lines/{credit_line_id}/revoke

Click here to view the full API reference


Loan servicing

This section includes the different endpoints you need to integrate in your solution for servicing and maintaining loans for your customers.

API reference

Visit the following link to find all the endpoints related to servicing and maintaining loans, including related properties and examples.

GET Retrieve a loan schedule

This endpoint retrieves the latest repayment schedule of the loan specified in the request URL. The call will return information about two components:

  • Loan balance
  • Loan installments

For detail descriptions about each field, check the API reference.

Request URL

Copy
Copied
GET /v1/loans/{loan_id}/repayment_schedule

Click here to view the full API reference.

GET Retrieve the repayment history of a loan

This endpoint retrieves the repayment history of the loan specified in the request URL. The call will return information about two components:

  • All SEPA Direct Debits (SDD) that were pulled from the customer's reference account tied to the loan.
  • All SEPA Credit Transfers (SCT) for any partial or full early repayments the customer have made (If applicable).

Request URL

Copy
Copied
GET /v1/loans/{loan_id}/repayment_history

Response example

Copy
Copied
{
  "repayment_history": [
    {
      "amount": {
        "currency": "EUR",
        "unit": "cents",
        "value": 1000
      },
      "date": "2020-07-03",
      "interest_amount": {
        "currency": "EUR",
        "unit": "cents",
        "value": 1000
      },
      "payout_amount": {
        "currency": "EUR",
        "unit": "cents",
        "value": 1000
      }
    }
  ]
}

Click here to view the full API reference.


What's next?

Congratulations! You've successfully integrated Solaris' Freelancer Splitpay solution.

Check the following appendices section for additional information on enums and testing data.

For an overview of Solaris' lending products, check the lending products overview page.

Useful resources

Check the following links for additional related guides and API reference documentation:


Appendix I: Enums

Freelancer credit line application status

These are the possible values for the field status in the freelancer credit line application resource.

Enum Description
credit_record_pending The credit line application is successfully submitted and passed the pre-check. However, a credit record is needed to continue the credit scoring process. You must create a credit record for the applicant and attach it to the application to continue the process.
initial_scoring_pending A credit record has been linked to the credit line application. The credit record triggers the initial scoring step, in which the credit scoring system checks the provided credit record to assess the customer's credit risk and eligibility.
account_snapshot_pending The credit line application passed the initial scoring step, and an account snapshot is needed for the final verification step. You must create an account snapshot for the applicant and attach it to the application to continue the process.
account_snapshot_verification_pending An account snapshot has been linked to the credit line application. The account snapshot triggers the final verification step, in which the credit scoring system checks the account history to verify the self-declared financial information.
offered The credit line application has passed the final verification check and is accepted.
identification_creation_pending The credit line application has passed all credit checks successfully, and the identification process is yet to be created. Solaris creates the relevant identification resource.
identification_pending The identification resource has been created for the relevant customer. The identification_id should be available in the payload of the GET Retrieve freelancer credit line application method.
identification_completed The customer has completed the identification process.
credit_line_creation_pending The identification was completed successfully, but the credit line creation process is still in progress.
credit_line_created The credit line has been created and assigned to the person resource of the customer.
expired Either the credit record or the account snapshot is expired. New ones must be created and linked to the credit line application to resume the process.
rejected The credit line application has been rejected. Rejection could be due to failed pre-check, initial scoring, account snapshot verification, or identification.

Freelancer credit line status

These are the possible values for the field status in the freelancer credit line resource.

Enum Description
partner_approval_pending You must authorize the creation of the credit line. This is not a mandatory stage for all use cases but only happens if you have an internal authorization workflow.
account_creation_pending The customer's account creation is still in progress. The account is required for the loan payout.
schufa_report_pending You must send the customer's report reflecting the credit line to SCHUFA service.
open The account and mandate have been created and linked to the customer's credit line. The credit line is now open and can be utilized by the customer. Please note that the credit line locking status must be NO_BLOCK for the customer to be able to use the credit line.
closed The credit line has expired and is no longer active.

Credit line loan status

These are the possible values for the field status in the credit line loan resource.

Enum Description
payout_pending The loan payout is still in progress.
payout_triggered The loan payout has been triggered.
created The loan payout has been created and can be used by the customer.

Document types

The following table includes the possible values for the field document_type and their descriptions.

Enum Description
ANNUAL_FINANCIAL_STATEMENT A business or a company's annual financial statement.
KYC_REPORT The KYC report generate after a successful customer identification.
ID_DOCUMENT An person's identification document, such as passport or ID.
SIGNATURE A signature example.
PICTURE A picture or a scanned document of any other type.
QES_DOCUMENT A document related to a Qualified Electronic Signature (QES).
SIGNED_CONTRACT A signed contract of any kind.
SIGNED_QES_DOCUMENT A document signed by a Qualified Electronic Signature (QES).
REGISTER_CHECK A register check.
REGISTER_EXTRACT A business or a company's commercial register excerpt or a similar document.
FOUNDATION_DOCUMENT The foundation document of a company or business.
SCHUFA_COMPACT_REPORT A compact SCHUFA report.
SCHUFA_GWG_REPORT A GWG SCHUFA report.
SCHUFA_FULL_REPORT A full SCHUFA report about a person.
SCHUFA_SHORT_REPORT A short SCHUFA report about a person.
CREDIT_AGENCY_REPORT A report issued by a credit agency.
SHARE_HOLDERS_AGREEMENT A business or a company's shareholders agreement.
SHAREHOLDERS_LIST A business or a company's shareholders list.
TRADING_LICENSE A business or a company's trading license.
TRANSPARENCY_REGISTER_EXTRACT An extract of a transparency register.
INVOICE An invoice of any kind.
OTHER Any other type of document.
VIDEO A video of any kind.
VAT_CERTIFICATE VAT registration certificate

Idnow status

The following table includes the possible values for the field status for the video identification process carried out by IDnow and the related description of each status.

Status Description
created The identification resource has been created for the customer.
pending The identification process has been triggered and the video identification URL and reference are generated. You must redirect the customer to the URL to complete the identification process with IDnow.
pending_successful The video identification was successful, but will be reviewed by the identification provider. You can already offer banking services to the customer at this stage. Once reviewed by the provider, the identification will be marked either as resolved positively (successful) or negatively (failed or canceled). A bank account will be automatically blocked if the identification is eventually marked as failed or canceled.
pending_failed The identification is currently under review. You cannot offer banking services to the customer at this stage. The identification might eventually turn to successful, but it is unlikely.
successful The video identification was successful. The customer can be onboarded. Please note that the customer's data might have been updated during the identification session.
aborted The customer aborted the identification process. The customer can still video-identify using the same URL.
canceled The provider canceled the video identification. The customer should video-identify again using the same URL.
failed The identification was unsuccessful. You *cannot onboard the customer or offer any banking services to them.

IDnow provides a reason for the canceled and aborted status. No reason can be disclosed for the final failed status.

Identification documents

  1. List of the accepted passports for videoIdent: here
  2. List of accepted passports for postIdent: here
  3. Search for a identification document: here

List of passports with address

The following table shows the list of documents, that has the address included in the identification document, and allows you to perform identification without the proof of address document.

Document Issuer Country Type (ID/PP)
MLT-BO-02001 Malta ID
MLT-BO-03001 Malta ID
SVK-BO-02001 Slovakia ID
SVK-BO-05001 Slovakia ID
SVK-BO-04001 Slovakia ID
ITA-BO-04003 Italy ID
ITA-BO-03004 Italy ID
ITA-BO-03002 Italy ID
ITA-BO-03001 Italy ID
ITA-BO-03003 Italy ID
DEU-BO-01003 Germany ID
DEU-BO-02001 Germany ID
SGP-BO-01001-A Singapore ID
SGP-BO-01001 Singapore ID
CZE-BO-04001 Czech Republic ID
CZE-BO-04002 Czech Republic ID
IND-AO-01001 India Passport
CHN-AO-04003 China Passport
BGR-AO-01005 Bulgaria Passport
SVN-AO-02001-02003 Slovenia Passport
SVN-AO-02004 Slovenia Passport
SVN-BO-02001 Slovenia ID
SVN-AO-01004 Slovenia Passport
POL-BO-02001-02003 Poland ID
ESP-BO-03001 Spain ID
ESP-BO-05001 Spain ID
HRV-BO-02001 Croatia ID
HRV-AO-02001 Croatia Passport
FRA-BO-02002 France ID
FRA-AO-03001-03003 France Passport
MAR-AO-02001 Morocco Passport