Skip to content

Account Opening

Opening a bank account is the final step in the customer onboarding journey. After you have collected the required data, identified the customer, and performed necessary compliance checks, you can request a new account.

Asynchronous Process

This guide describes the asynchronous approach (Account Opening Request - AOR). Solaris performs background validation checks after you submit the request. You will not receive an account ID immediately; you must listen for the webhook result.

How it works

The account creation process involves creating an Account Opening Request (AOR). This request acts as an application that triggers Solaris' internal validation engine.

The AOR must include:

  • Customer: The person_id or business_id.
  • Product: The specific Solaris product (e.g., CURRENT_ACCOUNT_CONSUMER_GERMANY).
  • Branch: The target IBAN country (DE, FR, IT, ES).

Solaris will only open the account if all validations (KYC, CDD, Credit Standing, Fraud) are successful.

Supported products

This process applies to the following account types:


Prerequisites

To avoid automatic rejection, ensure the customer meets these criteria before sending the request:

  1. Data Completeness: All mandatory fields in the person or business resource are populated.
  2. Identity: The customer has a successful identification status.
  3. Compliance: The customer has passed all Customer Due Diligence (CDD) checks.

Integration flow

  1. Submit Request: Call POST /v1/accounts/opening_requests with the customer and product details.
  2. Processing: Solaris runs internal rules (Tax ID validation, Age check, Garnishment check, Sanctions screening).
  3. Webhook Notification: Solaris sends an event to your ACCOUNT_OPENING_REQUEST webhook subscription.
  4. Result:
    • Success: The webhook payload contains the new account_id.
    • Failure: The webhook payload contains an error object with the rejection details.
Diagram: Account opening request process flow

Validation logic

Solaris applies specific rule sets based on the Product + Branch + Customer Type combination.

Common validation checks include:

  • Age: Customer must be 18+ (Retail).
  • Account Limit: Customer has not exceeded the maximum allowed number of accounts.
  • Seizures: Customer has no active account seizures or garnishments with any Solaris partner.
  • Data Integrity:
    • Person: first_name, last_name, address, city, country, birth_date, birth_city, nationality.
    • Business: name, sector, legal_form.
User Experience

If an AOR is rejected, display a clear message to the user: "Unfortunately, you did not meet the onboarding criteria. If you believe this is an error, contact Customer Support."

Status lifecycle

The AOR transitions through the following statuses:

StatusDescription
INITIATEDThe request has been received and persisted.
IN_PROGRESSSolaris is running internal validation rules.
COMPLETEDSuccess. The account is open. A webhook notification is triggered.
REJECTEDFailure. The request was denied. A webhook notification is triggered. You may need to restart the onboarding flow.

Testing

You can trigger specific validation failures in the Sandbox environment to test your error handling.

Test case: Missing data

Create a person and omit the birth_city field. Submit an AOR. Expected Result: REJECTED (Validation Error).

Test case: Seizure check

To simulate a rejection due to an existing seizure (Pfändung), use these specific test values:

Person (Retail/Freelance)

{
  "first_name": "Joshua",
  "last_name": "Seized",
  "birth_date": "1972-12-24",
  "birth_city": "Berlin"
}

Business (B2B)

{
  "name": "Seized Company GmbH",
  "legal_form": "GMBH",
  "address": {
    "postal_code": "10409"
  },
  "tax_information": {
    "registration_number": "HRB 12345"
  }
}

API Reference

POST Create request

Initiate the opening process. Ensure your request body handles the dependencies between customer type and product.

FieldLogic & Description
customer_idMandatory. The unique ID of the applicant. Use person_id for Retail/Freelancers or business_id for B2B.
customer_typeMandatory. Person (Retail/Freelancers) or Business (B2B). Must match the ID type above.
product_nameMandatory. The commercial product ID (e.g., CURRENT_ACCOUNT_CONSUMER_GERMANY). See configuration below.
account_typeMandatory. The technical ledger type (e.g., CHECKING_PERSONAL).
account_purposeConditional. Required ONLY if the customer holds multiple accounts. Default is primary.
account_bicMandatory. The BIC of the target branch (DE, FR, IT, ES). See configuration below.
account_currencyMandatory. The 3-letter currency code (e.g., EUR, GBP, USD).
// POST /v1/accounts/opening_requests
{
  "customer_id": "b109ee6f66d2a061e006bd31c6455df2cper",
  "customer_type": "Person",
  "product_name": "CURRENT_ACCOUNT_CONSUMER_GERMANY",
  "account_type": "CHECKING_PERSONAL",
  "account_bic": "SOBKDEB2XXX",
  "account_currency": "EUR"
}

Webhooks

Subscribe to the ACCOUNT_OPENING_REQUEST event to receive the final decision.

Success Payload: Contains account_id and status: "COMPLETED". Failure Payload: Contains an error object.

// Example Failure Payload
{
  "account_opening_request_id": "...",
  "status": "REJECTED",
  "error": {
    "code": "green_person_vetting",
    "detail": "CustomerVettingStatus for person has to be 'green' to open an account."
  }
}

Configuration reference

Your Partner Manager will provide the exact values for your specific product setup. Use the detailed definitions below to construct your API requests.

Diagram: Fields mapping example

Customer Type

The customer_type field defines the legal nature of the applicant.

  • Person: Use for Retail (B2C) and Freelancers.
  • Business: Use for Legal Entities (B2B).

Product Name

The product_name identifies the commercial package. It is typically a concatenation of the product, customer type, and branch.

  • Example: CURRENT_ACCOUNT_CONSUMER_GERMANY

Account Types

The account_type maps to the technical ledger type.

  • Note: Only accounts that can be opened via the API are listed in the reference. Internal Solaris accounts are excluded.

Branch BICs

Use the correct BIC for the target country.

BranchAllowed BICs
GermanySOBKDEBBXXX, SOBKDEB2XXX
FranceSOBKFRP2XXX
ItalySOBKITM2XXX
SpainSOBKESM2XXX