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 journeyDirectly at the bank
FlaguseJourney: trueuseJourney: false (default)
You sendYour institution code and the termsThe terms, the customer's ID and account
You get backmandateUrl, a link you send to the customerscaOAuth, the bank approval link
The customerPicks the bank, enters the account, approves at the bankApproves at the bank

What each bank supports

Verified against each bank's production API on 2026-10-19.

BankNo charge limitCharge limit (maxAmount)Frequency and first charge dateExpiry 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

StatusMeaning
INACTIVECreated, waiting for the customer: either to open the journey link or to approve at the bank.
ACTIVEApproved at the bank. You can charge the account.
PARTIALLY_AUTHORIZEDSome of the required approvers approved (for example a joint account).
REJECTEDThe customer or the bank refused it.
REVOKEDThe customer cancelled it at the bank.
TERMINATED_BY_USERCancelled through DELETE /v2/mandates/{mandateId}.
EXPIREDIt passed its expiry date.
SUSPENDED_BY_PROVIDERThe bank suspended it.

Following a mandate

  • Webhook: every status change is sent to your webhook (success URL, or fail URL for REJECTED, REVOKED, EXPIRED and TERMINATED_BY_USER) with mandateId, mandateStatus, bankName, userId and orgId.
  • GET /v2/mandates/{mandateId} returns the mandate as saved by Open Finance. It does not call the bank.
  • GET /v2/mandates/{mandateId}/status returns 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:

psuIdResult
888000007, 888000015ACTIVE, with a bank reference SBX-…
888000023REJECTED

Did this page help you?