Mandate Webhook

This page covers the webhook events fired for Direct Debit Mandate.

For general webhook mechanics (response requirements, security, IP whitelisting, troubleshooting), see Webhooks - Async Updates or Webhook Security.

ℹ️ Do not validate against a strict schema. Feezback or the bank may add additional fields to any of these events over time — parse only the fields you need.

Event: MandateStatusChanged

Fired on any status transition of a mandate.

Payload fields

Field
Type
Presence
Description
Example
user
String
Fixed
User identifier
"user-00112233"
mandateId
String
Fixed
Unique mandate identifier
"7fh64-fjue749-fn378hr004"
flow
String
Fixed
Flow ID (usually "default")
"default"
context
String
Optional — only if you set one in the original request
Correlates the webhook to your transaction
"tx-20250113001"
psuId
String
Fixed
debtor ID or passport number.
"222222222"
psuCorporateId
String
Optional — corporate mandates only.
Corporate ID (ח.פ.)
"519999999"
accountNumber
String (BBAN)
Fixed
Debtor account number
"10-123-1234567"
previousStatus
String | null
Fixed (nullable) — null if this is the first status update
See status table below
"received"
currentStatus
String
Fixed
See status table below
"valid"
validUntil
ISO date | null
Fixed — nullwhen there's no expiry yet
Mandate expiration date
lastActionDate
ISO datetime
Fixed
Timestamp of the last action on this mandate
"2025-03-04T12:26:32.212913+00:00"
{
  "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"
  }
}

Event: MandateDataChanged

Fired when the mandate's underlying data (amount, expration date, etc.) changes.

Same fields as MandateStatusChanged, plus:

FieldTypePresenceDescription
dataObjectFixedThe mandate's data before the change
updatedDataObjectFixedThe mandate's data after the change

Event: MandateAboutToExpire

Fired up to 30 days before a mandate's validUntil.

Same payload as MandateStatusChanged.

Not included in this event: psuId, psuCorporateId, accountNumber, previousStatus.

Added — only in this event: data (Object, Fixed — the mandate's current data).


Mandate statuses

StatusMeaning
receivedRequest received by the bank
validActive — can be charged
rejectedRejected
partiallyAuthorizedPartially approved — needs further approval (joint account holders / bank)
expiredReached validUntil
suspendedSuspended (by bank or user)
terminatedByTppTerminated by you (the client)
revokedByPsuRevoked by the end user
revokedByAspspRevoked by the bank

Testing (Mock Bank)

  1. Create a Mandate link without a debtor account in the JWT.
  2. Choose MockBank on the Feezback screens.
  3. Enter a 5-digit account number: 12345.
  4. Use one of these test IDs (psuId) to trigger a specific outcome:
Test IDResult
200200202Mandate valid
669029530Valid with a 15-second delay
222822538Rejected
200200301partiallyAuthorized
200200707partiallyAuthorized → valid after 5 minutes

Did this page help you?