Create a payment on a mandate
Create a payment within the constraints of a VRP or on a Direct Debit mandate.
After you have created a payment mandate and your user has authorised it, you can create a payment on the mandate. Once you create the payment, you can track and monitor it in the same way as a non-recurring payment.
As your user has authorised a mandate, the flow for a payment on a mandate differs from a non-recurring payment. After payment creation, there's no authorisation required, so it executes immediately.
1. Authenticate a payment on a mandate
To create a payment on a mandate, you must authenticate your request. This ensures only you can create payments on the mandate. Authentication requires you to:
- Generate an
access_tokenwith the following scopes:paymentsrecurring_payments:sweeping, if you are creating a sweeping VRP mandate
- Generate public and private keys and set up request signing for the Tl-Signature header
- Include an Idempotency-Key header to safely retry requests without creating duplicate payments
2. Configure a payment on a mandate
To create a payment on a VRP mandate, you must make a POST request to the /v3/payments endpoint with the details of the payment.
A payment on a mandate must include the following fields:
payment_method.type- Must bemandatepayment_method.mandate_id- A UUID which corresponds to the authorised mandateamount_in_minor- The payment amount in minor units (eg pence for GBP)currency- The currency the payment should be made in: eitherGBPorEURreference- A reference for the payment
Additional parameters for wave 1 VRP
When you create a payment on a wave 1 VRP mandate, you must also state whether the user is present for the payment using the user_interaction field inside the payment_method. Do this using the present or not_present values.
Examples of payments where the user is not_present include utility bill payments which get taken automatically out of a user’s account.
Examples of payments where the user is present include ‘topping up’ a utility bill account, where the user chooses to pay a specific amount within the constraints of a mandate which has already been set up.
Below are examples of sweeping and wave 1 VRP.
curl --request POST \
--url https://api.truelayer-sandbox.com/v3/payments \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <UUID>' \
--header 'Tl-Signature: <SIGNATURE>' \
--header 'Authorization: Bearer <ACCESS_TOKEN>' \
--data '{
"payment_method": {
"type": "mandate",
"mandate_id": "e98927aa-6d67-43ee-973a-4666bfa68cc7",
"user_interaction": "not_present"
},
"amount_in_minor": 12500,
"currency": "GBP",
"reference": "UTIL-MAR-2026"
}'curl --request POST \
--url https://api.truelayer-sandbox.com/v3/payments \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <UUID>' \
--header 'Tl-Signature: <SIGNATURE>' \
--header 'Authorization: Bearer <ACCESS_TOKEN>' \
--data '{
"payment_method": {
"type": "mandate",
"mandate_id": "a12345bc-6d67-43ee-973a-4666bfa68cc7"
},
"amount_in_minor": 50000,
"currency": "GBP",
"reference": "savings-transfer"
}'3. Execute the payment
Once you create a payment on an authorised mandate, it executes immediately without requiring further user authorisation. The payment will:
- Validate against the mandate's constraints (amount limits, valid dates, periodic limits)
- Execute immediately if within constraints
- Fail if outside mandate constraints or if mandate is invalid/revoked
4. Monitor the payment
You can track and monitor payments on a mandate in the same way as non-recurring payments:
- Set up webhooks to receive real-time payment status updates
- Use GET /v3/payments/{id} to retrieve payment details
- Optionally, you can check the payment status in Console
Updated about 9 hours ago
