Paddle Billing
Search

Subscription past due

Where payment for an automatically-collected subscription fails, it becomes past due. Paddle Retain works to automatically recover the payment for you. This is called dunning.

A subscription becomes past due where payment for a renewal isn't collected successfully. If successful, a subscription renews.

Paddle Retain automatically handles payment recovery for subscription renewals.

How it works

When payment fails for an automatically-collected subscription, the subscription status changes to past_due and it enters dunning. This is the process where Paddle Retain works to automatically recover the payment for you.

With Paddle Retain, you can:

  • Automatically reattempt to collect for payment using the previously declined payment method. Collection attempts happen over about a week.
  • Send optimized payment recovery emails, SMS, an in-app notifications that prompt customers to update their details.

When all payment recovery attempts are exhausted, Paddle Retain automatically pauses or cancels a subscription for you. You can choose whether subscriptions should pause or cancel when configuring Retain.

How to configure payment recovery

Events

This guide is overview of events that typically occur. Depending on your customer journey and how you build your workflows, not all events listed may occur, or additional events may occur.

We can't guarantee the order of delivery for webhooks. Store and check the occurred_at date against a webhook before making changes.

Payment recovered successfully

  1. Subscription renews

    subscription.updatedThe subscription and its items are updated with new previously_billed_at and next_billed_at dates, and the current_billing_period is updated.
    transaction.createdPaddle creates a transaction for recurring items on the subscription, as well as any prorated or one-time charges that were set to be billed on the next billing period. Its status is billed, meaning no changes can be made to the transaction. Its origin is subscription_recurring.
    transaction.billedOccurs because the transaction status changes to billed.
  2. Payment collection fails

    transaction.updatedPayment fails using payment method on file. The transaction is updated with information about the unsuccessful payment attempt. Its status changes to past_due.
    transaction.payment_failedOccurs because payment fails using payment method on file.
    transaction.past_dueOccurs because the transaction status changes to past_due.
    subscription.updatedThe subscription status changes to past_due.
    subscription.past_dueOccurs because the subscription status changes to past_due.
  3. Unsuccessful retry attempt using Paddle Retain

    Paddle Retain works with live data for your billing platform. This means you can't integrate with test or sandbox accounts.

    Paddle Retain attempts to automatically recover this payment for you. Depending on how you've configured payment recovery, Retain automatically retries payments at the best time for success.

     

    For each recovery attempt where payment is unsuccessful, the following events occur:

    transaction.payment_failedPayment fails using payment method on file. The transaction is updated with information about the unsuccessful payment attempt.

    If a retry attempt is successful, events for payment collection for a successful renewal occur.

  4. Customer updates payment method successfully

    Payment recovery emails, SMS, and in-app notifications sent by Paddle Retain prompt customers to update their payment method.

     

    If a customer updates their payment method using Paddle Retain, the following events occur:

    transaction.updatedThe transaction status changes to paid now that the customer has paid successfully. The transaction is updated with information about the successful payment.
    transaction.paidOccurs because the transaction status changes to paid.
    subscription.updatedThe subscription status is updated to active.
    subscription.activatedOccurs because the subscription status changes to active.
    transaction.updatedAn invoice number is assigned to the transaction. Its status changes to completed as Paddle has finished processing it.
    transaction.completedOccurs because the transaction status changes to completed.

Payment not recovered

When all payment recovery attempts are exhausted, Paddle Retain automatically pauses or cancels a subscription for you.

Events for subscription paused immediately or subscription canceled immediately occur.

Emails

Paddle Retain takes care of dunning for you. Our team of experts send millions of messages, testing and optimizing the content and cadence across hundreds of thousands of transactions. We're constantly improving emails for the best chance of payment recovery, so we haven't included full previews here.

For compliance reasons, Paddle sends emails for subscription lifecycle events.

When a subscription renews, Paddle sends:

Screenshot of an email from Retain. It is off-center, so the full text isn't displayed. Retain optimizes the content of the emails for the best chance of payment recovery.

Collection attempt 1

Your 💳 payment for [company] failed

A short, personal email that lets customers know their subscription payment was unsuccessful. It includes a link to update the payment method.

Screenshot of an email from Retain. It is off-center, so the full text isn't displayed. Retain optimizes the content of the emails for the best chance of payment recovery.

Collection attempt 2

2nd notice: Another unsuccessful payment for your [company] account

A short, personal email that lets customers know their subscription payment was unsuccessful. It includes a link to update the payment method, highlighted in yellow.

Screenshot of an email from Retain. It is off-center, so the full text isn't displayed. Retain optimizes the content of the emails for the best chance of payment recovery.

Collection attempt 3

3rd attempt: Unsuccessful payment for [company]

A short, personal email that lets customers know their subscription payment was unsuccessful. It emphasizes that it's easy to update payment method, with no need to log in. It includes a link to update the payment method, highlighted in yellow.

Screenshot of an email from Retain. It is off-center, so the full text isn't displayed. Retain optimizes the content of the emails for the best chance of payment recovery.

Collection attempt 4

Final notice: Need updated [company] billing information

A short, personal email that lets customers know their subscription payment was unsuccessful, and that if payment fails again then their subscription will be paused or canceled. It includes a link to update the payment method, highlighted in yellow.

Recommended workflow

  1. Listen for events

    We recommend that you listen for:

    subscription.updatedGet notified when a subscription is updated.
    subscription.past_dueGet notified when a subscription is past due. This means automatic collection failed, or an invoice is unpaid and its payment terms have elapsed.
    transaction.createdGet notified when a transaction is created. Transactions with the origin of subscription_recurring are for renewals.
    transaction.completedGet notified when a transaction is completed. This means it is fully paid and Paddle has completed processing.
    subscription.activatedGet notified when a past due subscription becomes active. The subscription status is updated to active. This means that payment method was updated successfully for a past due subscription.
  2. Update information in your database

    Update the record for a subscription in your database for the renewal based on webhooks received. As well as checking and storing the occurred_at date against notifications, you'll typically need to update:

    DescriptionField nameReason to store
    Subscription statussubscription.statusUsed to determine if a renewal was successful. Status is past_due where automatic collection fails, or where an invoice is unpaid and its payment terms have elapsed.
    Next billing datesubscription.next_billed_atUsed to determine when a subscription renews if active.

    You may like to store and update other fields if you'd like to build a more complete billing and subscription management experience, see: Handle provisioning and fulfillment

  3. Update your frontend

    You can't make changes to items on a past due subscription. Build logic in your frontend to prevent changes to subscriptions that are in dunning.

     

    We recommend providing a way for customers to update their payment method. You can use Paddle Retain to display in-app notifications to your customer to prompt them to update their payment method.

  4. Provision

    Provision so that a customer has the correct level of access to your app.

     

    Use the subscription.status field to determine whether a subscription should have access to your app. Where status is active or past_due, customers should have full access to your app. Where payment recovery attempts fail, follow the recommended workflow for subscription paused or subscription canceled.

Related pages