Release Notes for Direct Debits: 07/10/2026
This release introduces Direct Debit for payer accounts, along with a new Direct Debit API Guide and API Reference documentation. A creditor can collect funds from a client or organization account under a standing authorisation (a mandate). The IF Platform represents each collection as a Direct Debit Payment and charges the account through a linked Outgoing Transfer.
Direct Debit is supported for the following schemes:
| Scheme | Currency | Service Providers |
|---|---|---|
bacs | GBP | ClearBank, Banking Circle |
sepa | EUR | Banking Circle |
Direct Debit Mandate API changes:
Direct Debit Mandates are supported through the new Direct Debit Mandate API. See the Direct Debit API Guide Direct Debit Mandate for workflows, status transitions and payload examples.
New Direct Debit Mandate API endpoints
- Added Create a Direct Debit Mandate endpoint Create Direct Debit Mandate · API Reference — supports the
client.directandorganization.directworkflows - Added Update a Direct Debit Mandate endpoint Update Direct Debit Mandate · API Reference — supports the
client.directandorganization.directworkflows for cancelling or rejecting a mandate - Added Get a Direct Debit Mandate endpoint Get Direct Debit Mandate · API Reference
- Added List Direct Debit Mandates endpoint List Direct Debit Mandates · API Reference — filters by
status,clientId,accountIdandowner
Supported workflows for Direct Debit Mandates:
client.direct— create or update a mandate owned by a client;clientIdis required on createorganization.direct— create or update a mandate owned by the organization
Status updates:
- A mandate is created as
pendingand becomesactiveonce the service provider activates it. Apendingmandate cannot be updated through the API. - An
activemandate can be updated to:cancelled, with acancellationReason:user-requested,account-closedororganization-actionrejected, with arejectionReason:user-requested,account-closedorother
cancelledandrejectedare final.- A collection that arrives for a mandate that is not
activeis returned automatically with the reasonmandate-not-active.
Webhooks: Direct Debit Mandate webhooks are sent with the module direct-debits. Direct Debit Mandate Webhooks
direct-debit-mandate-createddirect-debit-mandate-activateddirect-debit-mandate-cancelleddirect-debit-mandate-rejected
Changes of the mandate's connection at the service provider are sent as connection-created and connection-updated.
Direct Debit Payment API changes:
Direct Debit Payments are created from the service provider's collections; they cannot be created through the API. Each payment is linked to its mandate through mandateId. It is also linked through outgoingTransferId to the Outgoing Transfer that charges the payer account. See the Direct Debit API Guide Direct Debit Payment for the payment lifecycle and payload examples.
New Direct Debit Payment API endpoints
- Added Update a Direct Debit Payment endpoint Update Direct Debit Payment · API Reference — supports the
client.directanddirectworkflows for returning or refunding a collection - Added Get a Direct Debit Payment endpoint Get Direct Debit Payment · API Reference
- Added List Direct Debit Payments endpoint List Direct Debit Payments · API Reference — filters by
statuses,clientId,accountId,mandateIdandowner
Supported update workflows for Direct Debit Payments:
client.direct— return a payment owned by a clientdirect— return a payment owned by the organization
Payment statuses:
pending— the collection has been announced and is waiting for its settlement datecompleted— the collection settled and the payer account was chargedfailed— the payer account was not charged
Webhooks: Direct Debit Payment webhooks are sent with the module direct-debits. Direct Debit Payment Webhooks
direct-debit-payment-createddirect-debit-payment-completeddirect-debit-payment-faileddirect-debit-payment-returned
Changes of the payment's connection at the service provider are sent as connection-created and connection-updated.
Direct Debit Return Flow
Key Highlights
- Added the
returnContextobject to the Direct Debit Payment response model. - Returns and refunds are triggered by
PATCH /direct-debit-payments/{id}, by setting:returnContext.status = processingreturnContext.reason = {valid_reason}
- Returns raised by the service provider (for example
insufficient-balance) are reflected on the same object. - When a return completes on a payment that charged the payer account, an Incoming Transfer credits the funds back. The Incoming Transfer is linked to the payment through
incomingTransferId.
Return Context Fields
The returnContext object includes:
enabled– Indicates whether the service provider accepts a return at this stage (read-only).cutOffDateTime– Last date-time (UTC) when a return can be initiated, according to the scheme rules (read-only).status– Current return lifecycle status (processing,completed,failed). Afailedreturn can be initiated again.reason– Mandatory reason code for initiating a return.
Eligibility Conditions
A return can be initiated only when:
returnContext.enabled = truecutOffDateTimehas not passed- No return is
processingorcompleted - Direct Debit Payment status is
pendingorcompleted, orfailedafter afailedreturn - A valid return reason is provided
Return Reasons
Supported return reason codes:
account-closedadvance-notice-disputedamount-not-matchedamount-not-yet-dueinsufficient-balancemandate-not-activeno-accountno-mandatepresentation-overdueservice-user-not-match
For the full integration flow, see the Initiate a Return / Refund
Example Request for a Direct Debit Payment return:
{
"workflow": {
"code": "client.direct"
},
"data": {
"directDebitPayment": {
"returnContext": {
"status": "processing",
"reason": "advance-notice-disputed"
}
}
},
"connect": {},
"metadata": {}
}Documentation updates:
- Added the Direct Debit API Guide, covering mandate and payment lifecycles, workflows, the return flow, webhooks and payload examples
- Added the Direct Debit Mandates and Direct Debit Payments operations to the Outgoing Transfer API Reference, with request and response schemas