Skip to main content

Apple Pay Recurring Payments (MPAN)

To process recurring payments with Apple Pay using MPAN (Multi-Use Payment Token), include the recurrenceMetadata object in the order creation within paymentDetails. If the data is sent in the order it will also be returned in the payment callback.

All information regarding accepted formats and descriptions of the new fields is in section 6. Field appendix.


General Validation Rules

recurrenceMetadata is optional, but if included:

  • intervalUnit, intervalCount, managementUrl, and subscription are mandatory
  • If both startDate and endDate are provided, startDate must be ≤ endDate
  • managementUrl must begin with https://

MPAN Creation

Important: If recurrenceMetadata is not included in the Apple Pay payment request, the system will attempt to create a DPAN (Dedicated Payment Account Number) instead of an MPAN.

IMPORTANT DISCLAIMER

Regarding recurrenceMetadata for Apple Pay and MPAN creation:

The information provided in the recurrenceMetadata fields is used SOLELY FOR DISPLAY PURPOSES within the Apple Pay interface and for tokenization.

THESE FIELDS DO NOT EXECUTE OR SCHEDULE PAYMENTS.

The recurring payment execution and scheduling must be managed separately through Revup's subscription system or your own recurring payment logic. The MPAN token created through this process can be used for subsequent payments, but the recurrence metadata itself does not trigger automatic billing.

FIELDTYPEREQUIREDMAX LENGHT / ENUMVALIDATION RULESNOTES
startDatestringNoISO-8601 UTCMust be a valid ISO-8601 UTC stringOptional. If provided, must be ≤ endDate
endDatestringNoISO-8601 UTCMust be a valid ISO-8601 UTC string and ≥ startDateOptional. Can be omitted if subscription is indefinite
intervalUnitstringYes (if recurrenceMetadata)"day", "week", "month", "year"Must be one of the enumerated valuesDefines frequency unit
intervalCountintegerYes (if recurrenceMetadata)-Must be ≥ 1Number of units per interval (e.g., every 1 month)
managementUrlstringYes (if recurrenceMetadata)-Must be valid HTTPS URLUsed to manage/cancel subscription. Must begin with https://

FIELDTYPEREQUIREDMAX LENGHT / ENUMVALIDATION RULESNOTES
amountnumberNo-Must be ≥ 0Trial charge (typically 0.00)
currencystringNoISO 4217 (e.g., EUR, USD)Must be valid ISO 4217 codeMatches payment currency
labelstringNo-Optional descriptive labele.g., "trial"
durationintegerNo-Must be ≥ 1Length of trial period
durationUnitstringNo"day", "week", "month", "year"Must be one of the enumerated valuesDefines unit of trial duration (e.g., 7 days)

FIELDTYPEREQUIREDMAX LENGHT / ENUMVALIDATION RULESNOTES
amountnumberYes-Must be ≥ 0Charge per interval
currencystringYesISO 4217 (e.g., EUR, USD)Must be valid ISO 4217 codeMatches system-supported currencies
labelstringYes-Optional descriptive labele.g., "Basic Plan", "Subscription"

Additional General Validations

The recurrenceMetadata field is optional, but if it is included:

  • intervalUnit, intervalCount, managementUrl, and subscription are required.
  • If startDate and endDate are provided, then startDate must be less than or equal to (≤) endDate.
  • managementUrl must begin with https://.

Request Body Example - Apple Pay with Recurrence Metadata

{
"money": {
"amount": 49,
"currency": "USD"
},
"concept": "Test concept",
"userInformation": {
"ip": "61.251.115.6",
"email": "qa@1eqa.net",
"country": "es",
"language": "es",
"phone": "666111222",
"billingAddress": {
"name": "Test",
"street": "Testing St.",
"city": "City",
"postcode": "01101",
"country": "US",
"state": "us-al"
},
"browserInformation": {
"userAgentHeader": "userAgent",
"acceptHeader": "accept",
"screenHeight": 1080,
"screenColorDepth": 24,
"enableJava": true,
"windowSize": "max",
"timeZone": 1,
"enableJavaScript": true,
"screenWidth": 720
}
},
"items": [
{
"name": "Test2",
"quantity": 1,
"unitPrice": 27.01,
"sku": "ABCD100",
"url": "https://www.test.com",
"category": "TestCategory",
"tax": 0.21
}
],
"generateToken": true,
"domain": "https://www.test.com",
"customTag": "custom",
"paymentDetails": {
"type": "credit_card_present",
"recurrenceMetadata": {
"startDate": "2026-01-01T15:00:00.000Z",
"intervalUnit": "month",
"intervalCount": 1,
"endDate": "2027-01-01T15:00:00.000Z",
"managementUrl": "https://www.test.com/es",
"trial": {
"amount": 20,
"currency": "USD",
"label": "Trial payment",
"duration": 7,
"durationUnit": "month"
},
"subscription": {
"amount": 20,
"currency": "USD",
"label": "Subscription"
}
}
},
"redirectUrl": {
"success": "https://api.qai.1eqa.net/callback/success",
"fail": "https://api.qai.1eqa.net/callback/failed",
"threeDSChallengeResult": "https://api.qai.1eqa.net/challenge?v=2&chll=done"
},
"purchaseId": "1763452974328",
"threeDSSupport": "no_3ds"
}