Configuring Retail Fees
Recovery of fees is an important aspect of any fintech proposition: what a tenant charges their customer can differentiate their services. Eclipse has a highly flexible fees engine that supports a range of fee options.
Common fees
The tables below list the fees most tenants configure, grouped by mechanism. Example values are illustrative — set your own for each fee. Some fees are configured with the simple fees.amount.config string syntax; others need a small piece of custom Java logic attached to a wallet type or a retail billing event. The See column links to the section that explains the relevant mechanism.
Wallet funding fees
| Common fee | Configuration | Example | See |
|---|---|---|---|
| Cash deposit (retail) | fees.amount.config.Pay.ZA_PNP_DEPOSIT | 6A | Self service simple fee configuration |
| Wallet top-up by card | fees.amount.config.Pay.ZA_MASTERPASS_IN.CARD.SERVER | 2.5P | Self service simple fee configuration |
| Wallet top-up by EFT/bank deposit (Nedbank) | fees.amount.config.Pay.GLOBAL_BANK.EFT.SERVER.ZA_Nedbank | 0A | Self service simple fee configuration |
| Wallet top-up by EFT/bank deposit (Standard Bank, normal EFT) | fees.amount.config.Pay.GLOBAL_BANK.EFT.SERVER.ZA_Standardbank | 10A | Self service simple fee configuration |
| Wallet top-up by EFT/bank deposit (Standard Bank, instant/RTC) | fees.amount.config.Pay.ZA_SBSA_RTC | 0A | Self service simple fee configuration |
Wallet withdrawal fees
| Common fee | Configuration | Example | See |
|---|---|---|---|
| Cash withdrawal (retail cash-out) | fees.amount.config.Wdr.ZA_PNP.CASH | 5A | Self service simple fee configuration |
| Bank/EFT withdrawal payout (Nedbank) | fees.amount.config.Wdr.ZA_NEDBANK_EFT.EFT | 5A | Self service simple fee configuration |
| Immediate EFT withdrawal payout (Nedbank) | fees.amount.config.Wdr.ZA_NEDBANK_EFT_IMMEDIATE.EFT | 10A | Self service simple fee configuration |
| Bank/EFT withdrawal payout (Standard Bank) | fees.amount.config.Wdr.ZA_SB_EFT | 10A | Self service simple fee configuration |
| Immediate EFT withdrawal payout (Standard Bank) | fees.amount.config.Wdr.ZA_SB_EFT_IMMEDIATE | 15A | Self service simple fee configuration |
| PayShap withdrawal payout (Standard Bank) | fees.amount.config.Wdr.ZA_SBSA_PAYSHAP | 2A | Self service simple fee configuration |
Card transaction fees
| Common fee | Configuration | Example | See |
|---|---|---|---|
| Card ATM withdrawal | fees.amount.config.cwd.{domestic/foreign} | 5A | Card specific fees |
| Card POS/e-commerce purchase | fees.amount.config.pur.{domestic/foreign} | 2P | Card specific fees |
| Card purchase with cashback | fees.amount.config.pwc.{domestic/foreign} | 5A | Card specific fees |
| Card cashback (no purchase) | fees.amount.config.chb.{domestic/foreign} | 2A | Card specific fees |
| Card pre-authorisation | fees.amount.config.pra.{domestic/foreign} | 0A | Card specific fees |
| Card cash advance | fees.amount.config.cad.{domestic/foreign} | 10A | Card specific fees |
| ATM balance enquiry | fees.amount.config.bai.{domestic/foreign} | 1A | Card specific fees |
| Declined transaction fee | debit.decline.transaction.fee | PUR-401=2A | Card specific fees |
| FX markup on foreign card transactions | internationalMarkUpFees | 3P | FX markup fee |
Recurring & lifecycle fees
These are configured with a small piece of custom Java logic attached to a wallet type, rather than the fees.amount.config string syntax.
| Common fee | Configuration | Mechanism | See |
|---|---|---|---|
| Inactive/dormant wallet fee | dormancyNotificationGracePeriodInDays / dormancyFeeEnforcementGracePeriodInDays | grace periods (days) + custom Java dormancy logic | Advanced fee configuration |
| Tiered or conditional pricing (for any fee above) | the same fees.amount.config.* key as the fee it replaces | custom Java logic in place of the DSL string | Advanced fee configuration |
| Monthly wallet fee | monthlyFeeLogicSetId | custom Java logic (monthlyFeesLogic) | Advanced fee configuration |
| Peer-to-peer / cross-tenant wallet transfer fee | sendTransferLogicSetId / receiveTransferLogicSetId | custom Java logic (postTransferLogic) | Advanced fee configuration |
| KYC fee on a wallet's first transaction | sendTransferLogicSetId / receiveTransferLogicSetId | custom Java logic (postTransferLogic) | Advanced fee configuration |
| Fee augmentation / split across wallets (e.g. tax) | sendTransferAugmentationLogicSetId / receiveTransferAugmentationLogicSetId | custom Java logic | Advanced fee configuration |
Note:Several rows share the same configuration attribute (
sendTransferLogicSetId/receiveTransferLogicSetId) — the attribute only attaches a wallet logic set to a wallet type. What that logic set actually does (charge a P2P fee, a cross-tenant fee, a KYC fee, or something else) is determined entirely by the custom Java logic written into it.
Card lifecycle & notification fees
These are triggered by a retail billing event rather than a transaction.
| Common fee | Configuration | Mechanism | See |
|---|---|---|---|
| Card issuance fee | Retail billing event ISSUANCE_CARD | custom Java logic | Advanced fee configuration |
| Card replacement fee | Retail billing event REPLACE_CARD | custom Java logic | Advanced fee configuration |
| Card PIN reset fee | Retail billing event RESET_CARD_PIN | custom Java logic | Advanced fee configuration |
| SMS notification fee | Retail billing event SMS | custom Java logic | Advanced fee configuration |
Self service simple fee configuration
Eclipse supports a range of simple to configure fees for all withdrawal, payment and top up services. Tenant configs related to fees that can be configured through the admin portal are:
fees.wallet.config.{Wdr|Pay}.{TransactionType} - this is the wallet ID where the fees should be collected
fees.amount.config.{Wdr|Pay}.{TransactionType} - this determines the fee logic
Self service fee logic covers:
- Fixed cost fee - e.g. 5A
- Fee based on % of base amount e.g 2P
- A combination of fixed cost + % fee e.g. 2A,0.3P
Fees can also be rounded UP, DOWN or Bankers Round (round half-even). To specify rounding, add| where Mode is D for down, U for up and B for Bankers. E.g. 2A,0.3P|2U would mean 2 + 0.3 percent rounded up to 2 decimal places.
These can be configured directly in the admin portal or with the assistance of the EFT Corporation technical team. See the Tenant Config Reference, for full details of each fee configuration.
self service fees can also be configured based on any event generated by Eclipse with similar logic above.
fees.wallet.config.{EventType} - this is the wallet ID where the fees should be collected
fees.amount.config.{EventType} - this determines the fee logic
Note:To use event type fees, a matching entry must be created in the retail billing config for each event type. Contact your EFT Corporation account manager to configure event-based fee entries.
Card specific fees
Fees and limits can be configured for a range of transaction types:
- pur: Purchase
- cwd: ATM
- pra: Pre-Auth
- pwc: Purchase with Cashback
- chb: Cashback
- cad: Cash Advanced
- bai: ATM Balance Enquiry
The following attributes can be set as tenant attributes, wallet type or wallet level.
| Attributes | Description |
|---|---|
| fees.amount.config.{transaction_type}.{domestic/foreign} | Fees charged for different transaction types, for domestic and foreign (international) transactions |
| debit.decline.transaction.fee | Fees are charged for different transaction types when a decline occurs |
Note:Per-transaction-type limits (monthly, per-transaction, daily, and daily velocity) are also configurable for these card transaction types — see Limit Configuration for the
postilion.{transaction_type}.domestic.debitCard*Limitattributes.
All corresponding transaction types require a configuration to be set for the destination wallet and fees wallet to credit when transactions are successful:
| Attributes | Description |
|---|---|
| source.wallet.config.postilion.ref | Wallet to debit when a refund (REF) is done |
| destination.wallet.config.postilion.{transaction_type} | Wallet to credit when a transaction is successful |
| fees.wallet.config.postilion.{transaction_type} | Wallet to credit with fees when a transaction is done |
FX markup fee
For card transactions where the transaction currency differs from the wallet's currency, Eclipse can apply an additional FX markup fee on top of any standard transaction fee. This is configured with the wallet type attribute:
internationalMarkUpFees - the fee logic (using the same fixed/percentage/combined syntax as other fees) applied to cross-currency card transactions
This is a separate mechanism from fees.amount.config, and only applies when the transaction is identified as international and the transaction currency differs from both the wallet currency and the settlement currency.
Fees on reversed transactions
By default, a fee charged on a transaction is not automatically reversed if the transaction itself is reversed. To allow fee reversal, set the following wallet type attribute:
feesReversalAllowed=true
Advanced fee configuration
In addition to this, custom fee models can be configured including:
- tiered models
- Inter tenant and cross tenant transfers dependent on wallet types – e.g. a tenant want to charge to transfer from digital to card wallets, but not from digital to digital wallets.
- Monthly wallet fees and activation or KYC fees.
- Complex fee augmentation – e.g. once a fee is determined a tenant want to split it across different wallets for transaction fees and tax fees.
- Event based charging for ad hoc events
For more details on advanced fee configuration please refer here.
Fee hierarchy
Fees can be set on the following levels:
- Wallet
- Wallet Type
- Tenant
Fee Priority
When determining which fee configuration applies, Eclipse follows a priority order:
Wallet → Wallet Type → Tenant. The table below outlines the logic.
| Tenant | Wallet Type | Wallet | Fee Based On |
|---|---|---|---|
| Yes | No | No | Tenant |
| Yes | Yes | No | Wallet Type |
| Yes | Yes | Yes | Wallet |
Permissions Required
| Permission | Description |
|---|---|
WalletFees | Required to create or update any wallet-level attribute starting with fees. on a wallet directly (e.g. via the admin portal or API). |
Updated 3 days ago
