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.succeeded4
The mandate expires
A mandate becomes
EXPIRED when either of two limits is reached:- the validity period has ended (today is past the
end_datethe customer consented to), or - the maximum number of successful collections has been used.
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.
- If it passes, the payment runs and the mandate is updated.
- If the consented limit has just been reached, the mandate is marked
EXPIREDin the same flow. - If it fails, the collection is rejected and no payment is taken.

