Create a Mandate Directly at the Bank
You already know the customer's bank and account; get the bank approval link right away
Use this when you already have your customer's ID number and bank account, and you want to send them straight to their bank to approve.
Step 1: Create Token
Endpoint: POST https://api.open-finance.ai/oauth/token
{
"userId": "your-user-id",
"clientId": "your-client-id",
"clientSecret": "your-client-secret"
}Step 2: Create the Mandate at the Bank
Endpoint: POST https://api.open-finance.ai/v2/mandates
Security: Bearer token with create:mandates scope
Request Example
{
"providerId": "leumi",
"psuId": "123456782",
"mandateInformation": {
"creditorInstitutionCode": "23954",
"maxAmount": 1000,
"endDate": "2027-10-19",
"debtorAccountType": "bban",
"debtorAccountNumber": "10-800-123456"
}
}Request Fields
| Field | Required | Description |
|---|---|---|
psuId | Yes | ID number of the account owner who approves. |
mandateInformation.creditorInstitutionCode | Yes | Your institution code (קוד מוסד) at Masav. |
mandateInformation.debtorAccountType | Yes | bban (bank-branch-account, e.g. 12-134-064543) or iban. |
mandateInformation.debtorAccountNumber | Yes | The account to charge. |
providerId | No | The bank, e.g. leumi. Detected from the account number when omitted. |
psuCorporateId | No | Company number, for a business account. |
mandateInformation.maxAmount | No | Limit per charge. Omit it for a mandate without a limit. |
mandateInformation.frequency, startDate | No | Hapoalim and Mizrahi only. |
mandateInformation.endDate | No | Expiry date, YYYY-MM-DD, after today. |
mandateInformation.mandateReference | No | Your reference (מספר אסמכתא), up to 35 characters. |
Response (200)
{
"mandateId": "01J9ZK3Q8T5W2X7Y4N6M1B0C9D",
"mandateStatus": "INACTIVE",
"scaOAuth": "https://..."
}Step 3: Send the Customer to the Bank
Redirect the customer to scaOAuth. They log in to their bank and approve the mandate. The ID number they log in with must belong to an owner of the account.
Step 4: Track the Mandate
You receive a webhook when the status changes. You can also call GET https://api.open-finance.ai/v2/mandates/{mandateId}/status, which reads the status from the bank:
{
"id": "01J9ZK3Q8T5W2X7Y4N6M1B0C9D",
"status": "ACTIVE",
"providerId": "leumi",
"providerIdentifier": "3f2c9a1e-7b41-4c0d-9e55-0a8d2b6c1f74",
"psuId": "123456782",
"creditorInstitutionCode": "23954",
"debtorAccountType": "bban",
"debtorAccountNumber": "10-800-123456",
"maxAmount": 1000,
"currency": "ILS",
"endDate": "2027-10-19",
"createdAt": "2026-10-19T12:30:04.311Z"
}Expiry Date at Each Bank
Send one endDate. Open Finance passes it to each bank in the field that bank accepts:
| Bank | Sent as |
|---|---|
| Hapoalim, Mizrahi-Tefahot, Beinleumi | occurrences.duration.toDate |
| Leumi, Discount | occurrences.finalCollectionDate |
Common Errors
| Message | What to do |
|---|---|
mandateInformation.frequency is not supported for provider leumi. Supported providers: hapoalim, mizrahi. | Remove frequency and startDate, or use a supporting bank. |
mandateInformation.frequency SemiAnnual is not supported for provider hapoalim. … | Use one of the listed frequencies. |
mandateInformation.endDate must be after today (YYYY-MM-DD). | Send a future date. |
mandateInformation.endDate must be after mandateInformation.startDate (YYYY-MM-DD). | The expiry must come after the first charge. |
Mandates are not supported for provider … | This bank does not offer mandates yet. |
Updated about 9 hours ago
