Recurring Payment Mandate (TS12)
The Recurring Payment Mandate extension enables an organisation to obtain consent for recurring or merchant-initiated payments using an e-mandate SCA Attestation presented from the customer's EUDI Wallet. The flow uses the urn:eudi:sca:emandate:1 transaction data type defined in the TS12 Electronic Payments SCA Implementation with Wallet specification.
How it works
- The organisation enables the Recurring Payment Mandate extension from the dashboard.
- An administrator configures the mandate details (creditor identity, purpose, validity window, recurrence).
- When a customer sets up a recurring payment, a presentation request with an
urn:eudi:sca:emandate:1transaction data payload is triggered using the configured presentation definition. - The customer reviews the mandate in their EUDI Wallet and presents an SCA Attestation to grant consent.
- The system verifies the presentation, stores the signed mandate and returns the PSD2 Authentication Code that anchors subsequent recurring charges.
Configuration
Supported SCA Attestation types
Select which SCA Attestation is accepted to anchor the mandate. Only the account and card attestations are supported:
Payment Account Credential
| Attribute | Description |
|---|---|
iban | International Bank Account Number |
bic | Bank Identifier Code |
currency | Account currency |
Payment Card Credential
| Attribute | Description |
|---|---|
pan_last_four | Last four digits of the card's Primary Account Number |
scheme | Card scheme (e.g. Visa, Mastercard) |
scheme_logo | Logo of the card scheme |
Transaction data
The verification request carries an urn:eudi:sca:emandate:1 transaction data object describing the mandate and the payment payload it anchors:
| Field | Type | Description |
|---|---|---|
transaction_id | String | Unique identifier for the mandate transaction |
date_time | DateTime | Timestamp of the mandate request |
start_date | DateTime | First date the mandate is valid |
end_date | DateTime | Last date the mandate is valid |
reference_number | String | Mandate reference number |
creditor_id | String | SEPA Creditor Identifier or equivalent |
purpose | String | Short description of what the mandate covers |
payment_payload | Object | The anchored payment |
├─ transaction_id | String | Identifier of the anchored payment |
├─ date_time | DateTime | Timestamp of the anchored payment |
├─ payee | Object | Recipient of the payment |
│ ├─ name | String | Name of the recipient |
│ ├─ id | String | Identifier of the recipient |
│ ├─ logo | String | Logo of the recipient |
│ └─ website | String | Website of the recipient |
├─ pisp | Object | Payment Initiation Service Provider |
│ ├─ legal_name | String | Legal name of the PISP |
│ ├─ brand_name | String | Brand name of the PISP |
│ └─ domain_name | String | Domain of the PISP |
├─ execution_date | DateTime | Requested execution date |
├─ currency | String | ISO 4217 currency code |
├─ amount | Number | Payment amount |
├─ amount_estimated | Boolean | True if the amount is an estimate |
├─ amount_earmarked | Boolean | True if funds are earmarked |
└─ sct_inst | Boolean | True if SEPA Instant Credit Transfer |
recurrence | Object (optional) | Fixed-schedule charges |
├─ start_date | DateTime | First date the recurrence is valid |
├─ end_date | DateTime | Last date the recurrence is valid |
├─ number | Number | Number of occurrences |
└─ frequency | String | Frequency of the recurrence |
mit_options | Object (optional) | Merchant-Initiated Transaction parameters |
├─ amount_variable | Boolean | True if the charged amount can vary between occurrences |
├─ min_amount | Number | Minimum amount per charge |
├─ max_amount | Number | Maximum amount per charge |
├─ total_amount | Number | Total amount across all charges |
├─ initial_amount | Number | Amount of the first charge |
├─ initial_amount_number | Number | Number of initial charges at initial_amount |
└─ apr | Number | Annual percentage rate |
Integration
Once configured, the system automatically generates a Presentation Definition bound to the urn:eudi:sca:emandate:1 transaction data type. This presentation definition can be viewed from the extension configuration page and is used when initiating mandate requests via the API.
API endpoints:
- GET
/v3/config/extension/recurring-payment-mandate- Retrieve current configuration - PUT
/v3/config/extension/recurring-payment-mandate- Update mandate settings