2 min read
What it means
The payment mandate had been cancelled. The customer or their bank cancelled the Direct Debit before collection.
Where you see it
It arrives in the webhook payload:
{
"data": {
"object": {
"id": "pay_7M3X1",
"loan_id": "loan_2K9P4",
"status": "failed",
"failure_code": "mandate_cancelled"
}
}
}
How to handle it
Prompt the customer to set up a new mandate before the next due date.
Reconcile against live state, since webhooks are unordered and a later event may supersede this one.
In practice
Treat mandate_cancelled as one branch of your failure_code handling, not the whole story. For payments, the value tells you why a collection failed so you can respond proportionately — a technical failure needs no customer contact, whereas an insufficient-funds failure is a moment for supportive, hardship-aware messaging. Always confirm current state before acting, because a later success event (a retry that cleared) may already have superseded this failure, and webhook delivery is unordered.
Frequently asked questions
Is mandate_cancelled final?
Not necessarily — for payments, a later retry may succeed. Reconcile against live loan state before acting.
Should I show this reason to the customer verbatim?
Map it to your own clear, humane copy rather than surfacing the raw code. See Map errors to user-facing messages.
Where does mandate_cancelled appear in the payload?
Under data.object.failure_code in the payment.failed webhook. Verify the signature, then branch on it.
Related reading
Funding for UK limited companies
Credicorp lends to your company, not to you personally — short-term working capital with no personal guarantee. See what your business could access.
