Overview
Let your customer authorize charges to their bank account (הרשאה לחיוב חשבון) through open banking
A direct debit mandate (הרשאה לחיוב חשבון) lets you, the creditor, charge your customer's bank account through Masav (מס״ב). With Open Finance the customer approves the mandate at their own bank, online, with no forms and no branch visit.
A mandate is not a payment: approving it moves no money. It gives you the right to charge the account later, within the terms the customer approved.
Two ways to create a mandate
Both use POST https://api.open-finance.ai/v2/mandates.
| Through the Open Finance journey | Directly at the bank | |
|---|---|---|
| Flag | useJourney: true | useJourney: false (default) |
| You send | Your institution code and the terms | The terms, the customer's ID and account |
| You get back | mandateUrl, a link you send to the customer | scaOAuth, the bank approval link |
| The customer | Picks the bank, enters the account, approves at the bank | Approves at the bank |
What each bank supports
Verified against each bank's production API on 2026-10-19.
| Bank | No charge limit | Charge limit (maxAmount) | Frequency and first charge date | Expiry date (endDate) |
|---|---|---|---|---|
| Hapoalim | ✅ | ✅ | ✅ all except SemiAnnual | ✅ |
| Mizrahi-Tefahot | ✅ | ✅ | ✅ | ✅ |
| Leumi | ✅ | ✅ | ❌ | ✅ |
| Discount | ✅ | ✅ | ❌ | ✅ |
| Beinleumi | ✅ | ✅ | ❌ | ✅ |
| Other banks | ❌ mandates are not available yet |
Frequencies: Weekly, EveryTwoWeeks, Monthly, EveryTwoMonths, Quarterly, SemiAnnual, Annual.
A term a bank does not support is refused before the bank is called, with 400 and a message that names what is supported, for example:
{
"type": "PARAMETER_NOT_SUPPORTED",
"message": "mandateInformation.frequency is not supported for provider leumi. Supported providers: hapoalim, mizrahi."
}Mandate statuses
| Status | Meaning |
|---|---|
INACTIVE | Created, waiting for the customer: either to open the journey link or to approve at the bank. |
ACTIVE | Approved at the bank. You can charge the account. |
PARTIALLY_AUTHORIZED | Some of the required approvers approved (for example a joint account). |
REJECTED | The customer or the bank refused it. |
REVOKED | The customer cancelled it at the bank. |
TERMINATED_BY_USER | Cancelled through DELETE /v2/mandates/{mandateId}. |
EXPIRED | It passed its expiry date. |
SUSPENDED_BY_PROVIDER | The bank suspended it. |
Following a mandate
- Webhook: every status change is sent to your webhook (success URL, or fail URL for
REJECTED,REVOKED,EXPIREDandTERMINATED_BY_USER) withmandateId,mandateStatus,bankName,userIdandorgId. GET /v2/mandates/{mandateId}returns the mandate as saved by Open Finance. It does not call the bank.GET /v2/mandates/{mandateId}/statusreturns the same mandate with its status read live from the bank, and saves it.
The bank's reference for the mandate is returned as providerIdentifier once the mandate was created at the bank.
Sandbox
Use providerId: "open-finance-sandbox" (or includeFakeProviders: true on a journey link) with these ID numbers:
psuId | Result |
|---|---|
888000007, 888000015 | ACTIVE, with a bank reference SBX-… |
888000023 | REJECTED |
Updated about 9 hours ago
