Digital Wallet
Digital Wallet - Overview
The digital wallet enables a business to manage its payment processing funds within the system, without transferring them to an external bank account.
Instead of the regular process in which funds are processed -> transferred to the bank -> paid to suppliers,
the system creates an available balance within the "Digital Wallet", from which actions can be performed directly.
Key capabilities:
- Accumulating funds from payment processing into an internal balance
- Real-time balance management
- Payments to suppliers / subcontractors from the digital wallet
- Saving time and reducing bank transfers
- Full control and monitoring of cash flow
Key value:
The money “stays in the system” and continues working—instead of being transferred to the bank and then returned.
🎯 Who is it for?
The solution is especially suitable for businesses that manage ongoing payments to other parties:
Businesses with subcontractors
- Marketplaces
- Service platforms (couriers, service providers, freelancers)
- Companies managing a network of suppliers
Businesses with complex cash flow
- Businesses with many incoming and outgoing payments
- Those seeking to reduce their dependence on banks and external transfers
Logistics / delivery companies
- Paying couriers from funds received on the same day
Agencies / brokers
- Collecting money from customers and transferring it to suppliers/partners
Startups and financial platforms
- That want to create a “bank within the product” experience
Steps for setting up a digital wallet:
Step 1: Open a digital wallet for an existing supplier
To open a digital wallet, call the following endpoint:
POST /api/v11/CompanyOperations/OpenDigitalBankToAnExistingSapak
Required parameters
Certification
The business's interface certificate.
You can create the certificate through the CardCom website:
Settings → Company and User Settings → Interface Certificate
After clicking "Create Certificate", a PFX file is downloaded to your computer. Convert the file to a Base64 string and enter the resulting value in the Certification parameter.
Guide for converting a PFX file to Base64:
https://www.techfabric.com/blog/convert-pfx-certificate-to-base64-string
We recommend storing the string in a secure location.
Login details
"Certification": "YOUR_CERTIFICATION_KEY" "UserName": "your_username", "UserPassword": "your_password"
Supplier details
"SapakNumberId": 12345, "IsModifyExistingSapak": true
SapakNumberId – The supplier number of the business that you want to connect to the digital wallet.
IsModifyExistingSapak – A Boolean value that must be sent as true to link the supplier to the digital wallet.
Digital wallet details
"DigitalBankInfo": {
"SubSupplierAdditionalFeePerTransactionPercentage": 0.5,
"SubSupplierAdditionalFeePerTransactionFixed": 0.10,
"MaxAmount": 50000.00,
"MaxMonthlyAmount": 200000,
"MaxTransactionsDaily": 10,
"Document": "BASE64_ENCODED_DOCUMENT_HERE"
}Parameter descriptions:
| Parameter | Description |
|---|---|
| SubSupplierAdditionalFeePerTransactionPercentage | Transfer fee as a percentage |
| SubSupplierAdditionalFeePerTransactionFixed | Fixed transfer fee in ILS |
| MaxAmount | Maximum amount for a single transfer |
| MaxMonthlyAmount | Maximum monthly transfer amount |
| MaxTransactionsDaily | Maximum number of transfers per day |
| Document | Account management confirmation, encoded as Base64 |
Request example:
// Open a digital wallet for an existing supplier
var openDigitalBankRequest = new OpenDigitalBankToAnExistingSapakRequest
{
Certification = "YOUR_CERT",
UserName = "user@example.com",
UserPassword = "password123",
SapakNumberId = 12345,
// Pass true to link the supplier to the digital wallet
IsModifyExistingSapak = true,
DigitalBankInfo = new DigitalBankInfo
{
// Transfer fee as a percentage
SubSupplierAdditionalFeePerTransactionPercentage = 0.5m,
// Fixed transfer fee in ILS
SubSupplierAdditionalFeePerTransactionFixed = 0.10m,
// Maximum amount for a single transfer
MaxAmount = 50000m,
// Maximum monthly transfer amount
MaxMonthlyAmount = 200000,
// Maximum number of transfers per day
MaxTransactionsDaily = 10,
}
};
// POST /api/v11/CompanyOperations/OpenDigitalBankToAnExistingSapak
Step 2: Make a transfer from the digital wallet
After setting up the digital wallet, you can transfer funds using the following call:
POST /api/v11/Financial/TransferFromDigitalBank
Required parameters
"Certification": "YOUR_CERTIFICATION_KEY", "UserName": "your_username", "UserPassword": "your_password", "WithdrawSapak": 12345, "BankNumber": 10, "BankBranch": 123, "BankAccount": "123456789", "BankHolderName": "John Doe", "Amount": 1000.50, "Description": "Monthly withdrawal", "ExternalAsmachta": "UNIQUE-REF-2024-001"
Parameter descriptions
| Parameter | Description |
|---|---|
| WithdrawSapak | Supplier number of the digital wallet from which the transfer is made |
| BankNumber | Code of the bank to which the funds are transferred (for example: Bank Leumi – 10) |
| BankBranch | Branch number |
| BankAccount | Bank account number |
| BankHolderName | Account holder's name |
| Amount | Transfer amount |
| Description | Transfer description |
| ExternalAsmachta | A unique identifier defined by the integrating system for the transfer |
Request example:
// Make a transfer from the digital wallet
var transferRequest = new MoneyTransferRequest
{
Certification = "YOUR_CERT",
UserName = "user@example.com",
UserPassword = "password123",
// Supplier number of the digital wallet from which the transfer will be made
WithdrawSapak = 12345,
// Destination account details
BankNumber = 10,
BankBranch = 123,
BankAccount = "123456789",
BankHolderName = "John Doe",
// Transfer amount
Amount = 1000.50m,
// Transfer description (optional)
Description = "Monthly withdrawal",
// Unique identifier defined in the business's system
ExternalAsmachta = "UNIQUE-REF-2024-001"
};
// POST /api/v11/Financial/TransferFromDigitalBank
// Response:
// {
// "response": true
// }
Note: We recommend sending a unique value in the
ExternalAsmachtaparameter for each transfer. This identifier enables tracking, reconciliation, and cancellation of transfers when necessary.
Step 3: Cancel a transfer from the digital wallet
A transfer can be canceled as long as it has not yet been processed by the system. In most cases, the cancellation window is approximately 24 hours (this may vary depending on the transfer status).
To cancel a transfer, call the following endpoint:
POST /api/v11/Financial/CancelDigitalBankTransfer
Required parameters
"Certification": "YOUR_CERTIFICATION_KEY", "UserName": "your_username", "UserPassword": "your_password", "WithdrawSapak": 12345, "ExternalAsmachta": "UNIQUE-REF-2024-001"
Request example:
// Cancel a transfer from the digital wallet
var cancelRequest = new MoneyTransferCancelRequest
{
Certification = "YOUR_CERT",
UserName = "user@example.com",
UserPassword = "password123",
// Supplier number of the digital wallet from which the transfer was made
WithdrawSapak = 12345,
// Original transfer identifier sent when the transfer was made
ExternalAsmachta = "UNIQUE-REF-2024-001"
};
// POST /api/v11/Financial/CancelDigitalBankTransfer
// Response:
// {
// "response": true
// }
Step 4: Retrieve information about transfers made through the digital wallet
You can retrieve information about transfers made through the digital wallet by date range.
To do so, call the following endpoint:
POST /api/v11/Financial/GetMoneyTransfers
Required parameters
"Certification": "YOUR_CERTIFICATION_KEY", "UserName": "your_username", "UserPassword": "your_password", "WithdrawsSapakId": 12345, "ExternalAsmachta": "UNIQUE-REF-2024-001", "FromDate": "2024-01-01T00:00:00", "ToDate": "2024-12-31T23:59:59", "IsValid": true
Parameter descriptions
| Parameter | Description |
|---|---|
| WithdrawsSapakId | Supplier number of the digital wallet |
| ExternalAsmachta | Unique external identifier (optional for filtering) |
| FromDate | Start date for the search range |
| ToDate | End date for the search range |
| IsValid | Filter for valid transfers only (true) |
Request example:
// Retrieve transfers from the digital wallet by date range
var getTransfersRequest = new GetMoneyTransfersRequest
{
Certification = "YOUR_CERT",
UserName = "user@example.com",
UserPassword = "password123",
// Supplier number of the digital wallet
WithdrawsSapakId = 12345,
// Search date range
FromDate = new DateTime(2024, 1, 1),
ToDate = new DateTime(2024, 12, 31),
// null = return all transfers (valid and invalid)
IsValid = null
};
// POST /api/v11/Financial/GetMoneyTransfers
Note: You can use the
IsValidparameter to filter the results:
true– Return valid transfers only.false– Return only transfers that failed or were canceled.null– Return all transfers without filtering.
Summary
Working with a digital wallet through the API includes four main operations:
- Opening a digital wallet for an existing supplier.
- Making fund transfers from the digital wallet.
- Canceling transfers that have not yet been processed.
- Retrieving information and reports about completed transfers.
We recommend storing the interface certificate and login details securely and using unique ExternalAsmachta identifiers for each transfer for tracking and monitoring purposes.