Skip to main content
A mandate is the merchant’s standing permission to collect from a customer. Like any consent, it has a beginning, a middle, and an end.

Stages

1

The merchant offers the consent (first_in_series)

The merchant initiates the recurring consent by creating a payment session with mandate_options describing what the customer is consenting to: how much, how often, until when, and up to how many times. The customer is shown those terms during checkout.At this point the mandate exists in the system but is DRAFT — it cannot be collected against yet. This is also the only step where the customer is involved; every collection from here on runs in the background.See Quickstart: Recurring Payments for the full request and response, and Consent for the full set of mandate_options fields.
2

The customer authorises the consent

The customer is taken to the hosted checkout, reviews the consent, and authorises it. The first payment runs as part of the same checkout flow, and the customer’s payment method is saved for future use.Once both succeed, the mandate becomes ACTIVE and is ready to be used for future collections.
3

The merchant collects (next_in_series)

Every subsequent collection is initiated by the merchant against the existing mandate, with no involvement from the customer. Before any money moves, the platform checks that the collection falls within everything the customer originally consented to — the right amount, within the validity window, and not over the consented number of collections.See Use Cases for the most common configurations and the non-obvious behaviours each one can exhibit (weekends, short months, leap years).If the check passes, the payment runs and the mandate is updated to record it. If that update reveals the mandate has reached its cap or its time window has just closed, the mandate is marked as EXPIRED in the same flow.If the check fails, the collection is rejected and no payment is taken.Webhook fired (per successful collection): payment.succeeded
4

The mandate expires

A mandate becomes EXPIRED when either of two limits is reached:
  • the validity period has ended (today is past the end_date the customer consented to), or
  • the maximum number of successful collections has been used.
Once EXPIRED, no further collections are allowed against it. The customer keeps control: they can never be charged more than they originally consented to, in time or in count.
5

The customer revokes the consent

A mandate becomes REVOKED when the customer cancels their consent outside of the platform — for example, by revoking it directly in their bank app (such as the Capitec app for VRP mandates).Once REVOKED, any further collection attempt is rejected. This transition is initiated by the customer, not the merchant.

How the constraints are enforced during payment collection

Every payment collection (next_in_series ) is checked against everything the customer consented to.
  1. If it passes, the payment runs and the mandate is updated.
  2. If the consented limit has just been reached, the mandate is marked EXPIRED in the same flow.
  3. If it fails, the collection is rejected and no payment is taken.

Why a collection might be rejected

Every collection is checked against the consent the customer authorised. If something is off, the collection is rejected with one of the error codes below. The merchant sees the code in the API response; the customer never sees a failed charge on their statement because nothing was attempted at the bank.