--- title: "Manage mandates for direct debits in the UK" description: "Learn about the API requests for managing mandates for direct debits in the UK." url: "https://docs.adyen.com/business-accounts/accept-direct-debits-uk/manage-mandates-uk" source_url: "https://docs.adyen.com/business-accounts/accept-direct-debits-uk/manage-mandates-uk.md" canonical: "https://docs.adyen.com/business-accounts/accept-direct-debits-uk/manage-mandates-uk" last_modified: "2019-12-06T14:44:00+01:00" language: "en" --- # Manage mandates for direct debits in the UK Learn about the API requests for managing mandates for direct debits in the UK. [View source](/business-accounts/accept-direct-debits-uk/manage-mandates-uk.md) **Limited availability**\ Direct debits in the UK are in pilot phase. Some of the processes and documentation may change as the feature evolves. *** A mandate is an authorization that your user gives for allowing a counterparty to debit funds from the user's business account. When your user authorizes a one-time or recurring direct debit, the counterparty's bank notifies Adyen, and a mandate is created. After a mandate is created, you can view, amend, or cancel the mandate using Adyen's APIs. This page explains how to make API requests related to mandates and how to get updates about the result of these requests. ## Requirements Before you begin, make sure that you fulfill the following requirements: | Requirement | Description | | ----------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | | **Integration type** | You must have an [Adyen for Platforms](/adyen-for-platforms-model) integration that includes business accounts. | | **[API credential roles](/business-accounts/manage-access#manage-api-credentials)** | Make sure that your web service API key has the following role:- **Manage Direct Debit Mandates role** | | **Capabilities** | Make sure that you enabled the following capability for your user:- **sendToThirdParty** | | **Webhooks** | In your Customer Area, subscribe to the following webhook:- **Mandate Webhooks** | | **Limitations** | Currently, these endpoints only support mandates created for accounts in the UK. | | **Setup steps** | Reach out to your Adyen contact to enable direct debits in the UK. | ## View a list of mandates You can view a list of all mandates created for a business account, regardless of the status. To get this list: 1. Make a GET `/mandates` request, specifying *at least one* of following parameters: | Parameter name | Parameter type | Required | Description | | --------------------- | -------------- | -------- | ------------------------------------------------------------------------------------ | | `balanceAccountId` | Query | | The unique identifier of the balance account linked to your user's business account. | | `paymentInstrumentId` | Query | | The unique identifier of your user's business account. | The following code example shows a GET `/mandates` request for a balance account with ID **BA000000000000000000000001**, linked to a business account with ID **PI000000000000000000000001**. **Example request for getting a list of mandates** ```bash curl https://balanceplatform-api-test.adyen.com/bcl/v2/mandates?balanceAccountId=BA000000000000000000000001&paymentInstrumentId=PI000000000000000000000001 \ -H 'x-api-key: ADYEN_BALANCE_PLATFORM_API_KEY' \ -H 'content-type: application/json' \ -X GET \ ``` A successful request returns an **HTTP 200** response. 2. In the **HTTP 200** response, verify that you received the following parameters: | Response parameter | Description | | ------------------ | ---------------------------------------------------------------------------- | | `mandates` | An array that contains all mandates that match the query parameters. | | `link` | An object that contains links to the next or previous page, when applicable. | **Example response for getting a list of mandates** ```json { "mandates": [ { "id": "MNDT000000000000000000000001", "type": "bacs", "balanceAccountId": "BA000000000000000000000001", "paymentInstrumentId": "PI000000000000000000000001", "status": "approved", "counterparty": { "accountIdentification": { "type": "ukLocal", "accountNumber": "10809699", "sortCode": "405081" }, "accountHolder": { "fullName": "Albert Klassens" } }, "createdAt": "2025-09-03T10:30:14.674Z", "updatedAt": "2025-09-03T10:30:14.674Z" }, { "id": "MNDT000000000000000000000002", "type": "bacs", "balanceAccountId": "BA000000000000000000000001", "paymentInstrumentId": "PI000000000000000000000001", "status": "approved", "counterparty": { "accountIdentification": { "type": "ukLocal", "accountNumber": "12345678", "sortCode": "405081" }, "accountHolder": { "fullName": "Acme Ltd." } }, "createdAt": "2025-09-03T10:22:19.660Z", "updatedAt": "2025-09-03T10:22:19.660Z" }, { "id": "MNDT000000000000000000000003", "type": "bacs", "balanceAccountId": "BA000000000000000000000001", "paymentInstrumentId": "PI000000000000000000000001", "status": "cancelled", "counterparty": { "accountIdentification": { "type": "ukLocal", "accountNumber": "10203040", "sortCode": "405081" }, "accountHolder": { "fullName": "Jane Query" } }, "createdAt": "2025-09-01T16:48:59.681Z", "updatedAt": "2025-09-03T10:11:46.672Z" } ], "link": { "next": { "href": "https://balanceplatform-api-test.adyen.com/bcl/api/v2/mandates?balanceAccountId=BA000000000000000000000001&paymentInstrumentId=PI000000000000000000000001&cursor=S2B-YlVcNkU0aSZwK32hMTjhbRUNdLkNKd1ltNg" } } } ``` ## View a specific mandate To view the details of a specific mandate: 1. Make a GET `/mandates/{mandateId}` request, specifying the `mandateId` in the path. The following example shows how to get the details of a mandate with ID **MNDT000000000000000000000001**. **Example request for getting a specific mandate** ```bash curl https://balanceplatform-api-test.adyen.com/bcl/v2/mandates/MNDT000000000000000000000001 \ -H 'x-api-key: ADYEN_BALANCE_PLATFORM_API_KEY' \ -H 'content-type: application/json' \ -X GET \ ``` A successful request returns an **HTTP 200** response. 2. In the **HTTP 200** response, verify that you received an object with the following parameters: | Response parameter | Description | | --------------------- | -------------------------------------------------------------------------------------------------- | | `balanceAccountId` | The unique identifier of the balance account to which the mandate applies. | | `counterparty` | An object that contains information about the party that receives the funds from the direct debit. | | `createdAt` | The date when the mandate was created. | | `id` | The unique identifier of the mandate. | | `paymentInstrumentId` | The unique identifier of your user's business account. | | `status` | The current status of the mandate. Possible values: **pending**, **approved**, or **cancelled**. | | `type` | The type of mandate. Possible value: **bacs**. | | `updatedAt` | The date when the mandate was updated, if applicable. | **Example response for getting a specific mandate** ```json { "id": "MNDT000000000000000000000001", "type": "bacs", "balanceAccountId": "BA000000000000000000000001", "paymentInstrumentId": "PI000000000000000000000001", "status": "approved", "counterparty": { "accountIdentification": { "type": "ukLocal", "accountNumber": "10809699", "sortCode": "405081" }, "accountHolder": { "fullName": "Albert Klassens" } }, "createdAt": "2025-09-03T10:30:14.674Z", "updatedAt": "2025-09-03T10:30:14.674Z" } ``` ## Amend a mandate You can amend a mandate to change what business account the mandate applies to. For example, consider a user that opens a second business account in your platform, exclusively to handle monthly expenses. Instead of creating a new mandate, your user can amend the ID of the business account. To amend a mandate: 1. Make a PATCH `/mandates/{mandateId}` request, specifying the following parameters: | Parameter name | Parameter type | Required | Description | | --------------------- | -------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------ | | `mandateId` | Path | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The unique identifier of the mandate. | | `paymentInstrumentId` | Request | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The unique identifier of your user's business account. | The following example shows how to make a PATCH `/mandates/{mandateId}` request for updating the payment instrument ID to which the mandate corresponds. **Example request for updating a mandate** ```bash curl https://balanceplatform-api-test.adyen.com/bcl/v2/mandates/MNDT000000000000000000000001 \ -H 'x-api-key: ADYEN_BALANCE_PLATFORM_API_KEY' \ -H 'content-type: application/json' \ -X PATCH \ -d ' { "paymentInstrumentId": "PI000000000000000000000002" }' ``` 2. Verify that you receive an **HTTP 202 — Accepted** response with no content. This means that the request was correct.\ After this, Adyen processes the request asynchronously. 3. To be informed about the result of the request, listen to the [webhooks](#get-updates) that Adyen sends to your server. ## Cancel a mandate To cancel an existing mandate: 1. Make a POST `/mandates/{mandateId}/cancel` request, specifying the `mandateId` in the path. The following example shows how to cancel a mandate with ID **MNDT000000000000000000000001**. **Example request for canceling a mandate** ```bash curl https://balanceplatform-api-test.adyen.com/bcl/v2/mandates/MNDT000000000000000000000001/cancel \ -H 'x-api-key: ADYEN_BALANCE_PLATFORM_API_KEY' \ -H 'content-type: application/json' \ -X POST \ ``` 2. Verify that you receive an **HTTP 202 — Accepted** response with no content. This means that the request was correct.\ After this, Adyen processes the request asynchronously. 3. To be informed about the result of the request, listen to the [webhooks](#get-updates) that Adyen sends to your server. ## Get updates about requests Adyen sends webhooks to your server to inform you when a mandate is created, updated, or canceled. Using these webhooks, you can track information such as: * The date of creation * The current status * The date of update, if applicable The following tabs show examples of the webhooks that Adyen sends. ### Tab: Mandate created After your user authorizes a mandate, Adyen creates the mandate and sends a `balancePlatform.mandate.created` webhook to your server. The webhook provides information about the mandate, such as: * The `id` of the mandate. * The `paymentInstrumentId` of the business account to which the mandate applies. * The `balanceAccountId` linked to the business account. * The `counterparty` that receives the funds from the direct debits. * The `status` of the mandate, which is **approved**. **Webhook example for a created mandate** ```json { "data": { "balancePlatform": "YOUR_BALANCE_PLATFORM", "creationDate": "2025-09-04T15:40:41+02:00", "mandate": { "balanceAccountId": "BA000000000000000000000001", "counterparty": { "accountHolder": { "fullName": "Albert Klassens" }, "accountIdentification": { "accountNumber": "10809699", "sortCode": "405081", "type": "ukLocal" } }, "createdAt": "2025-09-04T13:40:41.581Z", "id": "MNDT000000000000000000000001", "paymentInstrumentId": "PI000000000000000000000001", "status": "approved", "type": "bacs", "updatedAt": "2025-09-04T13:40:41.581Z" } }, "environment": "test", "type": "balancePlatform.mandate.created" } ``` ### Tab: Mandate updated When your user changes the business account to which the mandate applies, Adyen sends a `balancePlatform.mandate.updated` webhook to your server. The webhook includes: * The `paymentInstrumentId` of the new business account to which the mandate now applies. * The `balanceAccountId` linked to the new business account. **Webhook example for an updated mandate** ```json { "data": { "balancePlatform": "YOUR_BALANCE_PLATFORM", "creationDate": "2025-09-04T15:40:41+02:00", "mandate": { "balanceAccountId": "BA000000000000000000000002", "counterparty": { "accountHolder": { "fullName": "Albert Klassens" }, "accountIdentification": { "accountNumber": "10809699", "sortCode": "405081", "type": "ukLocal" } }, "createdAt": "2025-09-04T13:40:41.581Z", "id": "MNDT000000000000000000000001", "paymentInstrumentId": "PI000000000000000000000002", "status": "approved", "type": "bacs", "updatedAt": "2025-09-04T13:49:36.239Z" } }, "environment": "test", "type": "balancePlatform.mandate.updated" } ``` ### Tab: Mandate canceled When your user cancels a mandate, Adyen sends a `balancePlatform.mandate.updated` webhook to your server. The webhook includes the new `status` of the mandate, which is now **cancelled**. **Webhook example for a canceled mandate** ```json { "data": { "balancePlatform": "YOUR_BALANCE_PLATFORM", "creationDate": "2025-09-04T15:40:41+02:00", "mandate": { "balanceAccountId": "BA000000000000000000000002", "counterparty": { "accountHolder": { "fullName": "Albert Klassens" }, "accountIdentification": { "accountNumber": "10809699", "sortCode": "405081", "type": "ukLocal" } }, "createdAt": "2025-09-04T13:40:41.581Z", "id": "MNDT000000000000000000000001", "paymentInstrumentId": "PI000000000000000000000002", "status": "cancelled", "type": "bacs", "updatedAt": "2025-09-04T13:55:21.914Z" } }, "environment": "test", "type": "balancePlatform.mandate.updated" } ``` ## See also * [Transfer funds internally](/business-accounts/transfer-funds-internally)