Variable Recurring Payments#
What are Variable Recurring Payments?#
Collect real-time recurring payments of varying amounts from a single customer authorisation. The customer consents once via their banking app; you can then collect multiple payments within agreed parameters - no re-authorisations required for each charge.
When to use Variable Recurring Payments#
| Commercial VRP (cVRP) | Sweeping VRP (sVRP) | |
|---|---|---|
| Transfer type | Me-to-Business | Me-to-me |
| When to use | Usage-based billing where amounts vary each period (metered services, such as electricity, gas, water and telecoms providers) Local and central government Rail fares Charitable donations | Lending repayments Savings automation and round-ups Automated investment contributions |
| Who initiates | Business | Customer's bank |
| Payer account types support | Personal | Personal and business |
Comparison between other recurring payment options#
| Subscriptions | Instalments | Variable Recurring Payments | Instant Bank Pay + Direct Debit | |
|---|---|---|---|---|
| Mandate required | Yes | Yes | Yes (consent) | Yes |
| Customer authorisation | Once | Once | Once (with agreed limits and frequency) | Once |
| Payment amounts | Fixed (per subscription) | Fixed per instalment, can vary across schedule | Variable within agreed constraints | First payment fixed; subsequent payments flexible |
| Payment schedule | Merchant-defined recurring (weekly, monthly, yearly) | Merchant-defined schedule with a defined end | Flexible - merchant triggers payments as needed | Flexible after first payment |
| Confirmation speed | 2-x business days | 2-x business days | Seconds | First payment: minutes; subsequent: 2-x business days |
| Chargeback risk | Yes | Yes | None | First payment: none; subsequent: yes |
| Missed payment retries | Yes (with Success+) | Yes (with Success+) | Yes | Subsequent payments: yes |
| Best for | SaaS, memberships, gym fees, insurance | Payment plans, tuition, professional services | Usage-based regulated billing and utilities, financial services, government services | Subscription services needing immediate, initial payment |
| Availability | All schemes | All schemes | GBP only | GBP and EUR |
How it works#
- The customer authorised a VRP consent via their banking app, setting agreed payment parameters (maximum amount, frequency)
- You collect payments within those parameters via GoCardless API - no further customer action needed per payment
- Payment is confirmed within seconds
- You receive a webhook confirming the payment status
- Funds arrive same day or next business day
cVRP: Step-by-step guide#
Create a billing request#
Response
Confirm the mandate#
After creating the Billing Request, direct the customer to authorise the consent. How you do this depends on your integration type:
- Hosted Pages - Create a Billing Request Flow and redirect the customer to the authorisation_url. See Hosted Payment Pages.
- Custom API - Collect customer details and bank account via Billing Request actions, then confirm. See Custom Payment Pages.
Handle the outcome#
Listen for webhooks to confirm the mandate status:
| Event | Meaning |
|---|---|
| billing_request_fulfilled | Customer authorised the mandate |
| mandates_created | Mandate created and ready to use |
| mandates_active | Mandate active |
Collect a variable payment#
You can collect a payment with the customer not present (recurring billing etc.):
Or when the customer is present for top-ups and one-off purchases:
To cancel a future-dated payment (off-session only): POST /payments/{id}/actions/cancel. In-session payments cannot be cancelled once submitted.
Listen for webhooks to confirm the variable payment status:
| Event | Meaning |
|---|---|
| payments_confirmed | Payment confirmed and settled |
| payments_failed | Payment failed |
Handle the consent being cancelled#
Listen for webhooks to confirm the consent status:
| Event | Meaning |
|---|---|
| mandates_cancelled | Consent cancelled (by you or the customer via their banking app) |
sVRP: Step-by-step guide#
Create a Billing Request#
Response:
Confirm the consent#
After creating the Billing Request, direct the customer to authorise the consent. How you do this depends on your integration type:
- Hosted Pages - Create a Billing Request Flow and redirect the customer to the authorisation_url. See Hosted Payment Pages.
- Custom API - Collect customer details and bank account via Billing Request actions, then confirm. See Custom Payment Pages.
Handle the outcome#
Listen for webhooks to confirm the mandate status:
| Event | Meaning |
|---|---|
| billing_request_fulfilled | Customer authorised the mandate |
| mandates_created | Mandate created and ready to use |
| mandates_active | Mandate active |
Collect a variable payment#
Retrieve the mandate ID from:
Response:
And collect a variable payment from the consent within the agreed constraints:
Response:
Handle the consent being cancelled#
Listen for webhooks to confirm the consent status:
| Event | Meaning |
|---|---|
| mandates_cancelled | Consent cancelled (by you or the customer via their banking app) |