first_in_series payment session, when the customer authorises the saving of their payment method for future use. Subsequent payments are then initiated programmatically via next_in_series sessions, relying on the existing mandate.
When creating a first_in_series session, you can pass a mandate_options object to define the boundaries and constraints of the mandate, specifying what the customer is consenting to.
Providing
mandate_options is optional. Omitting it entirely creates an unconstrained mandate: valid indefinitely, for any amount, any number of times, with no declared intent.For
installment mandates, total_amount and terms replace amount, recurrence, and max_occurrences as the primary consent fields. See Installment mandates below.Amount
Defines the amount the customer consents to in future payments. Fixed amount: the exact amount that may be collected each time:amount from the originating first_in_series session is used as the consent ceiling and applies to all subsequent next_in_series payments under the mandate.
Recurrence
Defines the consented payment cadence: how frequently the customer has agreed to be charged. Required fortype: scheduled. Optional for type: on_demand, where it can be included if the merchant intends to collect on a consistent cadence or wants providers to derive the implicit period window from it.
This is used by the platform to schedule payments automatically when subscription_options is provided, and by providers to derive the implicit period window when no explicit period_limits are set.
Payments every month on the 1st:
Validity Period
Restricts the mandate to a specific date range. Payments outside this range will be rejected. A mandate valid throughout 2026:start_date is omitted, the mandate is active immediately from the date of creation. If end_date is omitted, the mandate does not expire.
Max Occurrences
Caps the total number of successful payments allowed under the mandate. A mandate limited to 12 successful payments in total:Mandate Type
Thetype field declares the kind of mandate the customer is consenting to. It is the first field to set when configuring mandate_options.
Scheduled mandates
The customer consents to recurring payments on an explicit cadence.recurrence is required and forms part of the consent declaration. Use this for subscriptions and regular billing cycles where the merchant commits to a defined payment schedule.
On-demand mandates
The customer consents to merchant-initiated collections where recurrence is not a required part of the consent. Use this for variable recurring payments (VRP), wallet top-ups, and usage-based billing.recurrence and subscription_options are both available and may be used if the merchant wants to automate collections on a consistent cadence.
Setting type: on_demand with no other fields is equivalent to omitting mandate_options entirely, but explicitly records the merchant’s intent. Setting type is recommended in all cases.
Installment mandates
The customer consents to a fixed payment plan: a defined number of payments totallingtotal_amount. Unlike scheduled mandates, the consent is structured around the plan as a whole rather than an open-ended cadence.
The payment structure is defined in terms, which is polymorphic:
terms.type: periodic: equal payments on a regular cadence.recurrenceandmax_occurrencesare both required insideterms, fully defining the schedule at consent time.terms.type: fixed: an explicit schedule with specific amounts and due dates per installment. Use when payment amounts vary or dates are irregular.
periodic and fixed terms, subscription_options may be provided to automate collections. When omitted, each payment must be initiated via next_in_series sessions.
Subscription automation for
fixed terms is coming soon. Currently, each installment must be initiated via next_in_series sessions on the due dates defined in items. Subscription support is available today for periodic terms.fixed terms, add a recurrence hint to terms to satisfy this requirement. It has no scheduling role: payment dates are defined by items. The platform derives amount.max for provider registration from the largest amount across the installment items.

