Skip to main content

Recurring charges

A Recurring charge is a scheduled payment that happens at regular intervals (e.g., daily, weekly, monthly, yearly) as part of an active payment agreement.

Key features​

🦾 Flexible retries​

If a charge fails, the system can automatically retryβ€”leading to up to 12% better conversion (i.e., more successful payments).

🎯 High conversion​

With retries, charge success rates can be as high as 96% or more.

🫢🏼 Better user experience​

  1. Overview: Users can see all upcoming charges in their Vipps/MobilePay app. The charge will be visible in the app when it goes into the DUE state.
  2. Management: Users can manage payment sources before a charge happens.
  3. πŸ—οΈ Work in progress: Merchants can add extra information (order lines) or attachments to charges for transparency.

Recurring charge failure in Vipps

✨ Bulk charging​

You can process up to 2,000 charges in a single API request.

🚦 Rate limits​

Up to 500 requests per minute. Bulk charge creation is recommended if this rate limit is too low.

πŸ—“οΈ Lead time​

Charges are created by the merchant with a 2-day lead time and are processed on the requested due date. This gives users time to prepare or update their payment details before the charge is processed. In special cases, merchants are allowed to create the recurring charge with a 1-day lead time (i.e., create the charge today with a due date set as tomorrow).

API request snippet​

  • Merchants are aware of due date and wants Vipps MobilePay to handle the retry logic for failed payments.

    {
    "amount": 49900,
    "transactionType": "DIRECT_CAPTURE",
    "description": "Premium - May 2025",
    "due": "2025-05-01",
    "retryDays": 5,
    "type": "RECURRING"
    }
  • Merchants are aware of due date for a payment but wants to handle retry logic themselves for failed payments.

    {
    "amount": 49900,
    "transactionType": "DIRECT_CAPTURE",
    "description": "Premium - May 2025",
    "due": "2025-05-01",
    "retryDays": 0,
    "type": "RECURRING",
    "processingMode": "SINGLE_ATTEMPT"
    }