Recurring
Payment method properties
| Markets (consumer) | DE |
| Processing currencies | EUR |
| Consumer currencies | EUR |
| Authentication methods | REDIRECT |
| Authentication timeout | 1 Hour |
Create the payment agreement
To create a Wero payment agreement, provide the following information when calling our payment agreements endpoint:
| Field | Description |
|---|---|
paymentMethod | WERO |
amount.value | The recurring charge amount in the smallest currency unit. This becomes the authorised amount for all subsequent charges. |
amount.currency | EUR |
amount.type | EXACT |
consumer.country | The consumer country |
frequency.type | The type of frequency between consecutive payment charges. Allowed: WEEKLY, MONTHLY or YEARLY. |
frequency.interval | The interval between consecutive payment charges. |
startDate | The date when the subscription mandate begins. |
authenticationSettings: REDIRECT settings.returnUrl | Specify the URL to which the consumer should be redirected after completing the payment. This is required for the REDIRECT payment flow. |
Optional Fields
| Field | Description |
|---|---|
endDate | The date when the subscription ends. If omitted, the mandate is open-ended until revoked. |
description | The description of the agreement. |
You can also include the initialPaymentCharge object in this agreement creation call to immediately initiate the first payment without making a separate call.
If you don't include an initialPaymentChargeduring agreement creation, you may make a separate API call to /v1/payment-agreements/{agreement_id}/payment-charges to create the charges.
First Charge Timing RestrictionIf you separate the first charge from the agreement creation, then the first payment request cannot be triggered on the same calendar day as the agreement startDate. A minimum gap of 1 day is required between startDate and the first charge, as enforced by Wero.
Request
POST /v1/payment-agreements
{
"paymentMethod": "WERO",
"amount": {
"value": 1000,
"currency": "EUR"
},
"amountType": "EXACT",
"frequency": {
"interval": 1,
"type": "MONTHLY"
},
"consumer": {
"country": "DE"
},
"authenticationSettings": [
{
"type": "REDIRECT",
"settings": {
"returnUrl": "https://www.ppro.com/"
}
}
],
"instrument": {
"type": "PASSTHROUGH_WALLET",
"details": {}
}
}{
"paymentMethod": "WERO",
"description": "Wero description",
"amountType": "EXACT",
"frequency": {
"interval": 1,
"type": "WEEKLY"
},
"amount": {
"value": "1000",
"currency": "EUR"
},
"consumer": {
"name": "John Smith",
"country": "DE",
}
},
"initialPaymentCharge": {
"amount": {
"value": 1000,
"currency": "EUR"
}
},
"instrument": {
"type": "PASSTHROUGH_WALLET",
"details": {}
},
"authenticationSettings": [
{
"type": "REDIRECT",
"settings": {
"returnUrl": "https://merchant.com/wero/return"
}
}
]
}
Response
You'll receive our standard payment agreement response:
{
"id": "agr_2A8UGcOCRM2V8IKY640ti",
"status": "AUTHENTICATION_PENDING",
"paymentMethod": "WERO",
"frequency": {
"type": "MONTHLY",
"interval": 1
},
"startDate": "2026-10-20T14:03:58.200Z",
"amount": {
"value": 1000,
"currency": "EUR"
},
"instrumentId": "instr_YuTd3QaGNPVoczP5lRkqz",
"amountType": "EXACT",
"consumer": {
"country": "DE"
},
"authenticationMethods": [
{
"details": {
"requestUrl": "https://redirect.ppro.com/redirections/forward?redirection_token=samplepayment",
"requestMethod": "GET"
},
"type": "REDIRECT"
}
],
"history": [
{
"id": "ahist_3zyXRPXJZmBjy6vRCmJTp",
"status": "AUTHENTICATION_PENDING",
"createdAt": "2026-10-20T14:03:58.570Z"
}
],
"revocations": [],
"createdAt": "2026-10-20T14:03:58.570Z",
"updatedAt": "2026-10-20T14:03:58.570Z"
}Pick the desired authentication method
REDIRECT
Redirect your consumer to the returned $.authenticationMethods[?(@.type == "REDIRECT")].details.requestUrl
For example, with the value of https://redirect.ppro.com/ using the returned $.authenticationMethods[?(@.type == "REDIRECT")].details.requestMethod HTTP method.
Handling the payment result
- After the consumer completes the payment, they are redirected back to the returnUrl specified by you in the payment charge creation request.
- Upon redirect back to your checkout page, retrieve the latest payment status by performing a GET operation on the payment agreement, use the returned status attribute to determine the payment outcome and display it to the consumer.
- Additionally, webhooks are triggered to notify you of the payment result. This ensures you receive the outcome even if the consumer closes their browser or fails to return to your website.
Create a recurring payment
To initiate a subsequent recurring payment, send a request against an active agreement using our payment agreements API.
Request
POST /v1/payment-agreements/agrId/payment-charges
{
"amount": {
"value": 1000,
"currency": "EUR"
}Response
{
"id": "charge_bP3r2Xxdy02fF3lfVhnNg",
"paymentMethod": "WERO",
"currency": "EUR",
"country": "DE",
"paymentDescriptor": "Payment Descriptor",
"instrumentId": "instr_a1eqs9w5upxXgq5iTgbmz",
"status": "CAPTURED",
"consumer": {
"name": "John Smith",
"email": "[email protected]",
"country": "DE",
}
},
"order": {
"orderItems": [
{
"name": "Product Name 1",
"quantity": 1,
"amount": 1000
}
],
"industryData": []
},
"authorizations": [
{
"id": "authz_RvwG9SEaxe51Ku72QFirt",
"amount": 1000,
"status": "AUTHORIZED",
"merchantPaymentChargeReference": "60502e33-3007-4e11-a38c-cf7c8bd80d41",
"createdAt": "2026-09-07T20:27:42.248Z",
"updatedAt": "2026-09-07T20:27:42.248Z"
}
],
"captures": [
{
"id": "capture_1ADkmpX3v4nSCsw9EPxan",
"amount": 1000,
"status": "CAPTURED",
"merchantCaptureReference": "60502e33-3007-4e11-a38c-cf7c8bd80d41",
"createdAt": "2026-09-07T20:27:42.654Z",
"updatedAt": "2026-09-07T20:27:42.654Z"
}
],
"refunds": [],
"voids": [],
"createdAt": "2026-09-07T20:27:41.023Z",
"updatedAt": "2026-09-07T20:27:42.654Z"
}
Price Changes
Under the same active agreement, Wero allows a maximum of one price change per semester (every 6 months), according to the conditions below. The new price requires a 10-day advance notice to the consumer. Compliance with this communication is mandatory for the merchant.
Price increase below the original consented agreement amount
Charging an amount below the original consent limit does not require a new agreement, as long as it adheres to the established frequency and mandatory communication rules outlined above. You can process this directly by updating the amount in your subsequent payment-charges request.
Price increase above the original consented agreement amount
It is possible to change the price above the consent amount while maintaining the existing agreement, as long as the MaxAmount specified by the EPI is not inflicted. Adjustments below the MaxAmount can maintain the same active agreement, provided the communication rules mentioned above are followed.
As defined by Wero, the default MaxAmount per billing cycle are the following:
| Frequency | Max Amount |
|---|---|
| WEEKLY | €150 |
| MONTHLY | €500 |
| YEARLY | €5000 |
New consent required for price increases above original amountCharging above the MaxAmount will trigger a scheme rejection failing the payment with PROVIDER_DECLINE. To proceed, the current agreement must be revoked and a new one needs to be created and authorized by the consumer again.
Revoking an agreement
Consumer-initiated revocation
Consumers can revoke the consent at any time from the Wero app. When such a consumer initiated revocation iccurs, PPRO sends a webhook notification to you. A revoked agreement cannot process further charges. If the consumer wants to resubscribe, you can simply create a new agreement again.
Merchant-initiated revocation
Consumers can also cancel the subscription on a merchant provided surface (i.e. app or website), in this scenario you as a merchant can also initiate the revocation by calling the Agreements revoke endpoint as belowL
Request
POST /v1/payment-agreements/agrId/revocations
{}Response
{
"id": "agr_wRk9mXtYpQzLvN3cJbD7F",
"status": "REVOKED_BY_MERCHANT",
"updatedAt": "2026-10-15T14:30:00.000Z"
}Updated 5 days ago