Skip to main content
GoCardless · SEPA Core · mandate cancelled or disputed

GoCardless MD01: mandate_cancelled and authorisation_disputed in a SEPA collection

MD01 arrives when the customer has cancelled the mandate at their bank or says they never authorised the collection. In GoCardless it appears in three different payment events, depending on the moment, and in all of them the result for the future is the same: no further collection can be taken with that mandate.

FlexigoTech · Editor in charge: Víctor Gómez · Updated 6 November 2026

Key facts

Versions
Odoo 17, 18, 19 and 20
Checked
in the connector's source code, version 17.0, 18.0, 19.0 and 20.0 · against the sources linked at the end
Reading time
4 min

Three events and four rows, the same code

EventCauseGoCardless text
payments · failedmandate_cancelledThe customer cancelled their mandate at their bank.
payments · charged_backmandate_cancelledThis payment was charged back by the customer's bank, because the customer disputed authorising the transaction.
payments · cancelledauthorisation_disputedThis payment has been cancelled because the payer disputes authorising its mandate.
payments · cancelledmandate_cancelledThis payment has been cancelled because the payer disputes authorising its mandate.

The four rows come from the SEPA Core table in GoCardless's documentation and all carry MD01; the cancelled payment appears with two causes and the same text. The mandate is also cancelled, and GoCardless reports it with its own event: “A payment under this mandate failed, indicating that the mandate has been cancelled at the customer's bank. Any subscriptions and pending payments will also be cancelled.”.

GoCardless mandate_cancelled cause card
The cause, the SEPA Core code MD01 and the GoCardless text for the failed payment.

What changes depending on the moment

If the customer cancels the mandate before the collection is made, the payment fails: the money never arrived. If they dispute it after it has been collected, it is a chargeback: the money arrived and goes back out. And if there were payments waiting to be submitted, GoCardless cancels them before sending them. The connector notes in its code that it saw the cause authorisation_disputed with MD01 on a sandbox test payment, as a chargeback of an already settled payment.

What Odoo does with the connector

The transaction is opened from the invoice, with the “Payment Transaction” button at the top; the transactions menu only appears in developer mode, and in Odoo 20 it does not exist. In all three cases the transaction ends in “Error” with the cause in view. The message depends on the event: “GoCardless could not collect this payment (mandate_cancelled).” for a failure, and “GoCardless reported a chargeback for this payment (mandate_cancelled). The funds have been taken back and will be deducted from a future payout.” for a chargeback. If Odoo already had the invoice marked as paid with that collection, the connector cancels the payment and the invoice becomes outstanding again.

What matters is the mandate. mandate_cancelled and authorisation_disputed are among the four causes with which the connector treats it as dead, so:

  • it archives the customer's payment method, which stops being offered for collections;
  • it writes in the customer's record “The GoCardless direct debit mandate of … is no longer usable (mandate_cancelled). No further collection can be taken against it. Ask the customer to set up a new mandate.”;
  • it creates an activity “GoCardless mandate lost”.

Several events arrive with the same news, the payment one and the mandate one, but the notice is shown only once: the second finds the mandate already archived.

The connector writes all these texts when it applies the event, with nobody in front of it. In an Odoo in English they appear in English, as quoted: “GoCardless could not collect this payment (mandate_cancelled).”, “GoCardless reported a chargeback for this payment (mandate_cancelled). The funds have been taken back and will be deducted from a future payout.”, “The GoCardless direct debit mandate of … is no longer usable (mandate_cancelled). No further collection can be taken against it. Ask the customer to set up a new mandate.” and “GoCardless mandate lost”.

What to do

Before asking for a new mandate, understand why they cancelled it. A customer who stopped wanting the service needs a cancellation, not another signature. If it was their mistake or a change at their bank, ask them to sign again and collect the open invoices with the new mandate. If they say they never authorised the charge, check how the mandate was signed before continuing to charge them.

Is it worth retrying a payment with MD01?

No. The mandate no longer exists for their bank, and with the mandate archived the “Retry collection” button does not appear on the transaction. A new mandate signed by the customer is needed.

Diagram: what GoCardless sends with MD01 and what Odoo does with the connector
Diagram made from the connector's code (17.0, 18.0, 19.0 and 20.0) and from GoCardless's documentation.

With our connector

In Odoo 17, 18, 19 and 20, the connector distinguishes the failure from the chargeback, reopens the invoice if needed, retires the mandate and leaves you the task of talking to the customer on their record. What it does not do is request the new mandate on its own: that conversation is yours.

Keep reading

GoCardless MD06: the customer asks their bank to refund a collectionThe customer asks their bank to refund a GoCardless direct debit: charged_back, refund_requested and MD06. What happens to the invoice and the mandate in Odoo.GoCardless mandate_is_inactive error when creating a collection from OdooGoCardless returns mandate_is_inactive when a payment is created against a cancelled, failed or expired mandate. Why it happens and how Odoo handles it.GoCardless bank_account_closed: AC04 and MD07, the account no longer existsGoCardless bank_account_closed with AC04 (account closed) or MD07 (holder deceased): the mandate is cancelled. What Odoo does with the invoice and customer.
Checked in the connector's source code (version 17.0, 18.0, 19.0 and 20.0) and the linked sources

Sources

  • Module source code: flexigo_payment_gocardless: const.py, line 15 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) and 20.0 (688d86b)
  • Module source code: flexigo_payment_gocardless: models/payment_transaction.py, line 442 in 17.0 (d203ee6), line 442 in 18.0 (e2ab18b), line 441 in 19.0 (ce7f5a3) and line 456 in 20.0 (688d86b)
  • Module source code: flexigo_payment_gocardless: const.py, line 76 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) and 20.0 (688d86b)
  • Module source code: flexigo_payment_gocardless: const.py, line 71 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) and 20.0 (688d86b)
  • Module source code: flexigo_payment_gocardless: models/payment_transaction.py, line 725 in 17.0 (d203ee6), line 725 in 18.0 (e2ab18b), line 724 in 19.0 (ce7f5a3) and line 748 in 20.0 (688d86b)
  • Module source code: flexigo_payment_gocardless: models/payment_transaction.py, line 713 in 17.0 (d203ee6), line 713 in 18.0 (e2ab18b), line 712 in 19.0 (ce7f5a3) and line 736 in 20.0 (688d86b)
  • Module source code: flexigo_payment_gocardless: models/payment_transaction.py, line 754 in 17.0 (d203ee6), line 754 in 18.0 (e2ab18b), line 753 in 19.0 (ce7f5a3) and line 777 in 20.0 (688d86b)
  • Module source code: flexigo_payment_gocardless: models/payment_token.py, line 131 in 17.0 (d203ee6), line 131 in 18.0 (e2ab18b), line 131 in 19.0 (ce7f5a3) and line 130 in 20.0 (688d86b)
  • Module source code: flexigo_payment_gocardless: models/payment_token.py, line 83 in 17.0 (d203ee6), line 83 in 18.0 (e2ab18b), line 83 in 19.0 (ce7f5a3) and line 82 in 20.0 (688d86b)
  • Module source code: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, line 436 in 17.0 (d203ee6), line 436 in 18.0 (e2ab18b), line 436 in 19.0 (ce7f5a3) and line 438 in 20.0 (688d86b)
  • Module source code: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, line 529 in 17.0 (d203ee6), line 529 in 18.0 (e2ab18b), line 529 in 19.0 (ce7f5a3) and line 531 in 20.0 (688d86b)
  • Module source code: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, line 1148 in 17.0 (d203ee6), line 1148 in 18.0 (e2ab18b), line 1148 in 19.0 (ce7f5a3) and line 1155 in 20.0 (688d86b)
  • Module source code: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, line 495 in 17.0 (d203ee6), line 495 in 18.0 (e2ab18b), line 495 in 19.0 (ce7f5a3) and line 497 in 20.0 (688d86b)
  • docs.gocardless.com/docs/api-reference/events/mandate
  • Module source code: flexigo_payment_gocardless: __manifest__.py, line 31 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) and 20.0 (688d86b)
  • docs.gocardless.com/docs/api-reference/events/payment
  • Module source code: flexigo_payment_gocardless: views/payment_transaction_views.xml, line 13 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) and 20.0 (688d86b)
  • Module source code: flexigo_payment_gocardless: models/payment_transaction.py, line 63 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) and 20.0 (688d86b)
  • Module source code: flexigo_payment_gocardless: models/payment_transaction.py, line 418 in 17.0 (d203ee6), line 418 in 18.0 (e2ab18b), line 417 in 19.0 (ce7f5a3) and line 432 in 20.0 (688d86b)
  • Module source code: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, line 1016 in 17.0 (d203ee6), line 1016 in 18.0 (e2ab18b), line 1016 in 19.0 (ce7f5a3) and line 1031 in 20.0 (688d86b)
  • github.com/odoo/odoo/blob/20.0/addons/payment/i18n/payment.pot
  • github.com/odoo/odoo/blob/17.0/odoo/http.py
  • github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml