Solaris.Banking.Transactions (Solaris v1.0.0)

Copy Markdown View Source

Transaction operations beyond SEPA: cash operations (Viacash), instant top-ups, intra-customer transfers, prepaid accounts, partner remittances, reference account payouts, and transfer requests.

Summary

Functions

Cancels a cash operation. Only possible for PENDING or CREATED status. Triggers CASH_OPERATION_STATUS_CHANGED webhook.

Initiates a payout to a business's reference account.

Creates a cash operation barcode for in/out at Viacash retailers.

Creates a credit clearing transaction.

Creates a debit clearing transaction.

Creates an instant top-up via card acquirer (e.g. Stripe).

Transfers funds between a person's main and sub-account. Does not require a change request.

Creates a partner remittance (requires change request).

Initiates a payout to a person's reference account. Requires a change request / 2FA.

Initiates a reference account payout by account ID (generic).

Creates a reservation and transfer request atomically.

Deletes a stored top-up payment method.

Executes a transfer request (can be partial; remaining amount stays reserved).

Retrieves a specific cash operation.

Retrieves a specific instant top-up.

Retrieves a partner remittance.

Lists cash operations for an account.

Lists clearing profiles.

Lists instant top-ups for an account.

Lists all partner remittances.

Lists saved instant top-up payment methods for a person.

Pays out from a prepaid card.

Tops up a prepaid card from a pooling account.

Transfers between EMONEY_PREPAID_POOLING and EMONEY_PARKING accounts.

Refunds a partner remittance. Status must be COMPLETED. Triggers a BOOKING webhook on success.

Resolves (releases) a transfer request reservation.

Sandbox only. Manually sets a cash operation status for testing.

Functions

cancel_cash_operation(account_id, operation_id, opts \\ [])

@spec cancel_cash_operation(String.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Cancels a cash operation. Only possible for PENDING or CREATED status. Triggers CASH_OPERATION_STATUS_CHANGED webhook.

cancel_instant_top_up(account_id, top_up_id, opts \\ [])

@spec cancel_instant_top_up(String.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Cancels an instant top-up.

create_business_reference_payout(business_id, account_id, attrs, opts \\ [])

@spec create_business_reference_payout(String.t(), String.t(), map(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Initiates a payout to a business's reference account.

create_cash_operation(account_id, attrs, opts \\ [])

@spec create_cash_operation(String.t(), map(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Creates a cash operation barcode for in/out at Viacash retailers.

  • Requires a change request
  • Only one active operation per type per person
  • operation_type: "CASH_IN" | "CASH_OUT"

Examples

{:ok, op} = Solaris.Banking.Transactions.create_cash_operation("cacc_123", %{
  operation_type: "CASH_IN",
  amount: 50_000,
  currency: "EUR"
})

create_clearing_credit(account_id, attrs, opts \\ [])

@spec create_clearing_credit(String.t(), map(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Creates a credit clearing transaction.

create_clearing_debit(account_id, attrs, opts \\ [])

@spec create_clearing_debit(String.t(), map(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Creates a debit clearing transaction.

create_instant_top_up(account_id, attrs, opts \\ [])

@spec create_instant_top_up(String.t(), map(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Creates an instant top-up via card acquirer (e.g. Stripe).

Returns a client_secret for use with Stripe PaymentIntent.

Examples

{:ok, top_up} = Solaris.Banking.Transactions.create_instant_top_up("cacc_123", %{
  amount: 10_000,
  currency: "EUR",
  payment_method_id: "pm_card_visa"
})

# Use top_up["client_secret"] with Stripe.js to confirm

create_intra_customer_transfer(attrs, opts \\ [])

@spec create_intra_customer_transfer(
  map(),
  keyword()
) :: {:ok, map()} | {:error, Solaris.Error.t()}

Transfers funds between a person's main and sub-account. Does not require a change request.

Examples

{:ok, tx} = Solaris.Banking.Transactions.create_intra_customer_transfer(%{
  sender_account_id: "cacc_main",
  receiver_account_id: "cacc_sub",
  amount: 5_000,
  currency: "EUR",
  reference: "Internal move"
})

create_partner_remittance(attrs, opts \\ [])

@spec create_partner_remittance(
  map(),
  keyword()
) :: {:ok, map()} | {:error, Solaris.Error.t()}

Creates a partner remittance (requires change request).

Examples

{:ok, remittance} = Solaris.Banking.Transactions.create_partner_remittance(%{
  account_id: "cacc_123",
  amount: 10_000,
  currency: "EUR",
  description: "Payout"
})

create_person_reference_payout(person_id, account_id, attrs, opts \\ [])

@spec create_person_reference_payout(String.t(), String.t(), map(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Initiates a payout to a person's reference account. Requires a change request / 2FA.

Examples

{:ok, payout} = Solaris.Banking.Transactions.create_person_reference_payout(
  "cper_123",
  "cacc_456",
  %{
    amount: 20_000,
    currency: "EUR",
    reference: "Withdrawal"
  }
)

create_reference_payout(account_id, attrs, opts \\ [])

@spec create_reference_payout(String.t(), map(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Initiates a reference account payout by account ID (generic).

create_transfer_request(attrs, opts \\ [])

@spec create_transfer_request(
  map(),
  keyword()
) :: {:ok, map()} | {:error, Solaris.Error.t()}

Creates a reservation and transfer request atomically.

Examples

{:ok, request} = Solaris.Banking.Transactions.create_transfer_request(%{
  account_id: "cacc_123",
  amount: 10_000,
  currency: "EUR"
})

delete_top_up_payment_method(person_id, method_id, opts \\ [])

@spec delete_top_up_payment_method(String.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Deletes a stored top-up payment method.

execute_transfer_request(request_id, attrs \\ %{}, opts \\ [])

@spec execute_transfer_request(String.t(), map(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Executes a transfer request (can be partial; remaining amount stays reserved).

get_cash_operation(account_id, operation_id, opts \\ [])

@spec get_cash_operation(String.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Retrieves a specific cash operation.

get_instant_top_up(account_id, top_up_id, opts \\ [])

@spec get_instant_top_up(String.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Retrieves a specific instant top-up.

get_partner_remittance(remittance_id, opts \\ [])

@spec get_partner_remittance(
  String.t(),
  keyword()
) :: {:ok, map()} | {:error, Solaris.Error.t()}

Retrieves a partner remittance.

list_cash_operations(account_id, opts \\ [])

@spec list_cash_operations(
  String.t(),
  keyword()
) :: {:ok, [map()]} | {:error, Solaris.Error.t()}

Lists cash operations for an account.

list_clearing_profiles(opts \\ [])

@spec list_clearing_profiles(keyword()) ::
  {:ok, [map()]} | {:error, Solaris.Error.t()}

Lists clearing profiles.

list_instant_top_ups(account_id, opts \\ [])

@spec list_instant_top_ups(
  String.t(),
  keyword()
) :: {:ok, [map()]} | {:error, Solaris.Error.t()}

Lists instant top-ups for an account.

list_partner_remittances(opts \\ [])

@spec list_partner_remittances(keyword()) ::
  {:ok, [map()]} | {:error, Solaris.Error.t()}

Lists all partner remittances.

list_top_up_payment_methods(person_id, opts \\ [])

@spec list_top_up_payment_methods(
  String.t(),
  keyword()
) :: {:ok, [map()]} | {:error, Solaris.Error.t()}

Lists saved instant top-up payment methods for a person.

prepaid_pay_out(account_id, attrs, opts \\ [])

@spec prepaid_pay_out(String.t(), map(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Pays out from a prepaid card.

prepaid_top_up(account_id, attrs, opts \\ [])

@spec prepaid_top_up(String.t(), map(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Tops up a prepaid card from a pooling account.

prepaid_transfer(account_id, attrs, opts \\ [])

@spec prepaid_transfer(String.t(), map(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Transfers between EMONEY_PREPAID_POOLING and EMONEY_PARKING accounts.

refund_partner_remittance(remittance_id, opts \\ [])

@spec refund_partner_remittance(
  String.t(),
  keyword()
) :: {:ok, map()} | {:error, Solaris.Error.t()}

Refunds a partner remittance. Status must be COMPLETED. Triggers a BOOKING webhook on success.

resolve_transfer_request(request_id, opts \\ [])

@spec resolve_transfer_request(
  String.t(),
  keyword()
) :: {:ok, map()} | {:error, Solaris.Error.t()}

Resolves (releases) a transfer request reservation.

sandbox_set_cash_operation_status(account_id, operation_id, status, opts \\ [])

@spec sandbox_set_cash_operation_status(String.t(), String.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Sandbox only. Manually sets a cash operation status for testing.

status: "PAID" | "CANCELED" | "EXPIRED"