Direct Debit Mandate - הקמת הרשאה לחיוב חשבון

Create a direct debit mandate link and receive status updates by webhook.

Create a digital authorization link so the debtor can approve future recurring charges against their bank account. Once approved, you can charge the debtor account on demand without further approval required by the debtor.

🏦

Supported Banks

Payment ProviderPrivate accountsBusiness account
Leumi/Pepper - 10
Poalim - 12
Discount/Mercantile - 11,17BETA
Mizrahi - 20BETA
FIBI group - 14,26,31,46,52BETA

Prerequisites

Before you create a mandate authorization link:

  • Register your organization to Masav to get your creditor organization code. Since charges are executed on Masav Rails, a Masav creditor account is mandatory.

How it Works?


The Mandate product digitizes the direct-debit authorization form. Your backend creates a signed JWT with, sends it to Feezback’s /link endpoint, and receives a link that you send to the debtor. The debtor confirms the mandate and Feezback update you on status changes.


Every Feezback Mandate Link follows the same underlying pattern:

  1. You sign a JWT (RS512) describing the details of the requested mandate:
    1. Creditor organization code
    2. Debtor details (optional)
    3. UI flow configurations (optional).
  2. You POST it to Feezback's Link Generation Service (LGS), which validates it and returns a link.
  3. You redirect the user to the link (from your app/website) or send that link to the detor via offline channels (email, SMS, in-app, a QR code, wherever makes sense for your product).
  4. The debtor opens the link and gets redirected for authentication and approval at their bank portal/app .
  5. You receive a webhook with the final mandate status, plus the debtor ID and account details.
  6. Feezback keeps monitoring the Mandate status and updates you with any change.

Environments

EnvironmentDomain prefixLink endpoint
Integrationlgs-integ01https://lgs-integ01.feezback.cloud/link
Productionlgs-prodhttps://lgs-prod.feezback.cloud/link

Creating a link - step by step

  1. Build a JWT with srv: "mandate/user" and the mandate configuration.
  2. Sign the JWT with your private key using RS512.
  3. Send the signed JWT to Feezback’s /link endpoint.
  4. Send the returned link to the debtor.
  5. The debtor confirms his account details in Feezback’s UI.
  6. Feezback forwards the request to the debtor's bank for approval.
  7. Feezback sends a MandateStatusChanged webhook with the outcome.

1. Create the JWT payload

Configure the JWT payload according to the configuration guide.

Example payload:

{
  "iss": "tpp/987654",
  "srv": "mandate/user",
  "sub": "user-00112233",
  "flow": {
    "userWasAuthenticated": true,
    "context": "tx-20250113001",
    "userIdentifier": {
      "type": "ID",
      "value": "200200202",
      "editable": true
    },
    "mandate": {
      "creditor": {
        "name": "Electric Company Ltd",
        "organizationCode": "24562"
      },
      "debtor": {
        "account": "IL710110950000102188000",
        "accountType": "iban",
        "editable": true
      },
      "redirects": {
        "success": "https://merchant.com/success",
        "failure": "https://merchant.com/failure",
        "notComplete": "https://merchant.com/notComplete",
        "ttlExpired": "https://merchant.com/session-expired"
      }
    }
  }
}

2. Send the JWT to Feezback

Send the signed JWT to the /link endpoint for the selected environment.

curl --location --request POST 'https://{ENVIRONMENT}.feezback.cloud/link' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "token": "{GENERATED_JWT_TOKEN}"
  }'

Replace {ENVIRONMENT} with one of these values:

EnvironmentURL
Integrationhttps://lgs-integ01.feezback.cloud/link
Productionhttps://lgs-prod.feezback.cloud/link

Use the returned link to send the debtor into the mandate authorization flow.

The user may be redirected to your relevant web page according to the redirect link you configured in the request.

Mandate statuses

Feezback sends mandate status updates by webhook.

StatusMeaning
receivedRequest received by the bank.
validMandate is active. Charges may be run against it through Masav.
partiallyAuthorizedApproved by one signatory; awaiting an additional co-signer.
rejectedDeclined by the bank or payer.
expiredvalidUntil was reached.
suspendedSuspended by the bank or the payer.
terminatedByTppCancelled by you.
revokedByPsuRevoked by the payer.
revokedByAspspRevoked by the bank.

Webhook events

Your webhook endpoint must return HTTP 200 within 3 seconds.

EventFires whenPayload notes
MandateStatusChangedAny mandate status transition occurs.Includes fields such as mandateId, psuId, accountNumber, previousStatus, currentStatus, and validUntil.
MandateDataChangedUnderlying mandate data changes.Includes data and updatedData.
MandateAboutToExpireThe mandate is approaching validUntil.May fire up to 30 days before expiry.

Payload example

{
  "timestamp": "2021-03-04T12:26:32.212913+00:00",
  "event": "MandateStatusChanged",
  "payload": {
    "user": "user-00112233",
    "mandateId": "7fh64-fjue749-fn378hr004",
    "psuId": "222222222",
    "psuCorporateId": "519999999",
    "accountNumber": "10-123-1234567",
    "context": "tx-20250113001",
    "previousStatus": "received",
    "currentStatus": "valid",
    "validUntil": "null",
    "lastActionDate": "2025-03-04T12:26:32.212913+00:00",
  }
}

Testing mandate outcomes

Use the 5-digit test account 12345 with the following PSU IDs to test mandate outcomes.

Test PSU IDResult
200200202Valid
669029530Valid after a 15-second delay
222822538Rejected
200200301Partially authorized
200200707Partially authorized, then valid after 5 minutes

##



Did this page help you?