Account management for persons and businesses.
Covers: account CRUD, balances, bookings, reservations, seizures, bank statements, trusted IBANs, virtual IBANs, fee collection, savings accounts (Tagesgeld), and IBAN validation.
Summary
Functions
Adds a trusted IBAN to an account.
Closes a tax exemption order.
Creates a statement of account.
Generates a bank statement for a date range (idempotent by range).
Creates a reference account for a business.
Creates an account closure request.
Debits a fee from a customer's account. Solaris pays out to partner monthly.
Creates an on-demand fee summary statement for an account.
Adds a reference account (external IBAN) to a person's account.
Creates a tax exemption order (Freistellungsauftrag) for a person.
Creates a virtual IBAN for an account.
Deletes a trusted IBAN (triggers change request).
Disables a virtual IBAN.
Enables a virtual IBAN.
Retrieves a specific account by ID.
Returns the average daily balance for an account over a date range.
Retrieves the balance for an account.
Retrieves a specific account for a business.
Returns interest details for a business savings account.
Retrieves a specific closure request.
Retrieves a specific account for a person.
Returns interest details for a person's savings account.
Retrieves a specific message for a person.
Retrieves the current tax exemption for a person.
Lists all accounts across the partner.
Lists bookings within a specific bank statement.
Lists bank statements for an account.
Lists all bookings for an account.
Lists all accounts for a business.
Lists reference accounts for a business account.
Lists all closure requests.
Lists fee summary statements for an account.
Lists fee transactions for an account.
Lists all accounts for a person.
Lists messages for a person.
Lists reference accounts for a person's account.
Lists rejected/returned incoming transactions for an account.
Lists outstanding reservations for an account.
Lists seizures for an account. Amount reflects total, not outstanding.
Lists trusted IBANs for an account.
Lists virtual IBANs for an account.
Maps a savings account to a main current account.
Requests utilization data asynchronously (triggers TAX_EXEMPTION_UTILIZATION webhook).
Transfers funds from current account to savings account (pay-in).
Transfers funds from savings account back to current account (pay-out).
Streams all bookings for an account across all pages.
Updates a person's account.
Updates a tax exemption.
Validates an IBAN and returns associated bank details.
Functions
@spec add_trusted_iban(String.t(), String.t(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Adds a trusted IBAN to an account.
Trusted IBANs bypass 2FA for transfers. Triggers a change request.
Examples
{:ok, result} = Solaris.Banking.Accounts.add_trusted_iban("cacc_123",
"DE89370400440532013000",
name: "Max Mustermann"
)
@spec close_tax_exemption(String.t(), String.t(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Closes a tax exemption order.
@spec create_account_statement(String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Creates a statement of account.
Examples
{:ok, statement} = Solaris.Banking.Accounts.create_account_statement("cacc_123", %{
interval: "monthly",
year: 2024,
period: 1
})
@spec create_bank_statement(String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Generates a bank statement for a date range (idempotent by range).
Examples
{:ok, statement} = Solaris.Banking.Accounts.create_bank_statement("cacc_123", %{
from_date: "2024-01-01",
to_date: "2024-01-31"
})
@spec create_business_reference_account(String.t(), String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Creates a reference account for a business.
@spec create_closure_request(String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Creates an account closure request.
@spec create_fee(String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Debits a fee from a customer's account. Solaris pays out to partner monthly.
Examples
{:ok, fee} = Solaris.Banking.Accounts.create_fee("cacc_123", %{
amount: 299,
currency: "EUR",
note: "Monthly subscription fee"
})
@spec create_fee_summary_statement(String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Creates an on-demand fee summary statement for an account.
Triggers the POSTBOX_ITEM_CREATED webhook when the statement is ready.
Examples
{:ok, statement} = Solaris.Banking.Accounts.create_fee_summary_statement("cacc_123", %{
year: 2024
})
@spec create_person_reference_account(String.t(), String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Adds a reference account (external IBAN) to a person's account.
A signed SDD mandate must exist before adding a reference account.
Examples
{:ok, ref} = Solaris.Banking.Accounts.create_person_reference_account(
"cper_123",
"cacc_456",
%{iban: "DE89370400440532013000", name: "Max Mustermann"}
)
@spec create_tax_exemption(String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Creates a tax exemption order (Freistellungsauftrag) for a person.
Examples
{:ok, exemption} = Solaris.Banking.Accounts.create_tax_exemption(
"cper_123",
%{
amount_cents: 100_100,
valid_from: "2024-01-01",
valid_until: "2024-12-31"
}
)
@spec create_virtual_iban(String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Creates a virtual IBAN for an account.
@spec delete_trusted_iban(String.t(), String.t(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Deletes a trusted IBAN (triggers change request).
@spec disable_virtual_iban(String.t(), String.t(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Disables a virtual IBAN.
@spec enable_virtual_iban(String.t(), String.t(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Enables a virtual IBAN.
@spec get( String.t(), keyword() ) :: {:ok, map()} | {:error, Solaris.Error.t()}
Retrieves a specific account by ID.
@spec get_average_daily_balance( String.t(), keyword() ) :: {:ok, map()} | {:error, Solaris.Error.t()}
Returns the average daily balance for an account over a date range.
Range can be up to 1 year. Future dates use the latest known balance.
Examples
{:ok, result} = Solaris.Banking.Accounts.get_average_daily_balance("cacc_123",
from: "2024-01-01", to: "2024-12-31"
)
@spec get_balance( String.t(), keyword() ) :: {:ok, map()} | {:error, Solaris.Error.t()}
Retrieves the balance for an account.
Returns both balance (booked) and available_balance (after reservations).
Examples
{:ok, %{"balance" => bal, "available_balance" => avail}} =
Solaris.Banking.Accounts.get_balance("cacc_123")
IO.puts("Available: #{avail["amount"]} #{avail["currency"]}")
@spec get_business_account(String.t(), String.t(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Retrieves a specific account for a business.
@spec get_business_interest_details(String.t(), String.t(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Returns interest details for a business savings account.
Examples
{:ok, interest} = Solaris.Banking.Accounts.get_business_interest_details(
"cbac_123",
"cacc_456"
)
@spec get_closure_request( String.t(), keyword() ) :: {:ok, map()} | {:error, Solaris.Error.t()}
Retrieves a specific closure request.
@spec get_person_account(String.t(), String.t(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Retrieves a specific account for a person.
@spec get_person_interest_details(String.t(), String.t(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Returns interest details for a person's savings account.
Includes accrued interest, interest rate history, and next payment date.
Examples
{:ok, interest} = Solaris.Banking.Accounts.get_person_interest_details(
"cper_123",
"cacc_456"
)
@spec get_person_message(String.t(), String.t(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Retrieves a specific message for a person.
@spec get_tax_exemption(String.t(), String.t(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Retrieves the current tax exemption for a person.
@spec list(keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Lists all accounts across the partner.
@spec list_bank_statement_bookings(String.t(), String.t(), keyword()) :: {:ok, [map()]} | {:error, Solaris.Error.t()}
Lists bookings within a specific bank statement.
@spec list_bank_statements( String.t(), keyword() ) :: {:ok, [map()]} | {:error, Solaris.Error.t()}
Lists bank statements for an account.
@spec list_bookings( String.t(), keyword() ) :: {:ok, map()} | {:error, Solaris.Error.t()}
Lists all bookings for an account.
Options
:from_booking_date— Filter from date (ISO 8601):to_booking_date— Filter to date:transaction_type— Filter by type:page,:per_page,:after,:before
@spec list_business_accounts( String.t(), keyword() ) :: {:ok, [map()]} | {:error, Solaris.Error.t()}
Lists all accounts for a business.
@spec list_business_reference_accounts(String.t(), String.t(), keyword()) :: {:ok, [map()]} | {:error, Solaris.Error.t()}
Lists reference accounts for a business account.
@spec list_closure_requests(keyword()) :: {:ok, [map()]} | {:error, Solaris.Error.t()}
Lists all closure requests.
@spec list_fee_summary_statements( String.t(), keyword() ) :: {:ok, [map()]} | {:error, Solaris.Error.t()}
Lists fee summary statements for an account.
@spec list_fees( String.t(), keyword() ) :: {:ok, [map()]} | {:error, Solaris.Error.t()}
Lists fee transactions for an account.
@spec list_person_accounts( String.t(), keyword() ) :: {:ok, [map()]} | {:error, Solaris.Error.t()}
Lists all accounts for a person.
@spec list_person_messages( String.t(), keyword() ) :: {:ok, [map()]} | {:error, Solaris.Error.t()}
Lists messages for a person.
@spec list_person_reference_accounts(String.t(), String.t(), keyword()) :: {:ok, [map()]} | {:error, Solaris.Error.t()}
Lists reference accounts for a person's account.
@spec list_rejected_incoming_transactions( String.t(), keyword() ) :: {:ok, [map()]} | {:error, Solaris.Error.t()}
Lists rejected/returned incoming transactions for an account.
@spec list_reservations( String.t(), keyword() ) :: {:ok, map()} | {:error, Solaris.Error.t()}
Lists outstanding reservations for an account.
Use API version 2022-07-18 for the new reservation format:
Solaris.Banking.Accounts.list_reservations("cacc_123", api_version: "2022-07-18")
@spec list_seizures( String.t(), keyword() ) :: {:ok, [map()]} | {:error, Solaris.Error.t()}
Lists seizures for an account. Amount reflects total, not outstanding.
@spec list_trusted_ibans( String.t(), keyword() ) :: {:ok, [map()]} | {:error, Solaris.Error.t()}
Lists trusted IBANs for an account.
@spec list_virtual_ibans( String.t(), keyword() ) :: {:ok, [map()]} | {:error, Solaris.Error.t()}
Lists virtual IBANs for an account.
@spec map_savings_account(String.t(), String.t(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Maps a savings account to a main current account.
This removes the credit block on the savings account and registers it with the tax service.
Examples
{:ok, mapping} = Solaris.Banking.Accounts.map_savings_account(
"cacc_main_123",
"cacc_savings_456"
)
@spec request_tax_exemption_utilization(String.t(), String.t(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Requests utilization data asynchronously (triggers TAX_EXEMPTION_UTILIZATION webhook).
@spec savings_pay_in(String.t(), String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Transfers funds from current account to savings account (pay-in).
Examples
{:ok, tx} = Solaris.Banking.Accounts.savings_pay_in(
"cacc_main_123",
"cacc_savings_456",
%{amount: 10_000_00, currency: "EUR"}
)
@spec savings_pay_out(String.t(), String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Transfers funds from savings account back to current account (pay-out).
@spec stream_bookings( String.t(), keyword() ) :: Enumerable.t()
Streams all bookings for an account across all pages.
@spec update_person_account(String.t(), String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Updates a person's account.
@spec update_tax_exemption(String.t(), String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Updates a tax exemption.
@spec validate_iban( String.t(), keyword() ) :: {:ok, map()} | {:error, Solaris.Error.t()}
Validates an IBAN and returns associated bank details.
Examples
{:ok, result} = Solaris.Banking.Accounts.validate_iban("DE89370400440532013000")
IO.inspect(result["bank_name"])