Skip to main content
Yuno’s Smart Retries help recover declined recurring credit card payments by retrying them on an optimized schedule. By retrying at the right moments, Smart Retries increase the likelihood of payment success, ensuring a consistent revenue stream and reducing involuntary subscriber churn.

Key advantages

Yuno’s Smart Retries offer several benefits that enhance payment processes and revenue recovery:
  • Data-driven decision-making: Uses a proven retry schedule, or machine-learning-based retry timing via the SMART strategy.
  • Enhanced revenue retrieval: Increases the chances of successfully collecting payments.
  • Decreased subscriber turnover: Minimizes disruptions and involuntary subscriber departures.
  • Flexible logic: Allows customization of retry schedules to maximize success opportunities.
  • Comprehensive approach: Works in conjunction with other revenue recovery strategies.

Retry schedule

By default, Yuno applies the fixed retry schedule below. Each delay is measured from the previous attempt, not cumulatively from the first attempt. You can also switch to machine-learning-based retry timing, which adapts the moment of each retry per transaction, by setting strategy to SMART — see Machine-learning retry timing. The last retry is attempted roughly 9.2 days after the initial failed charge.

Customization

Every business model is unique, so we allow merchants to define specific rules to enhance the flexibility of our retry schedule. You can set the retries structure when creating the subscription, and change it later on an existing subscription with Update Subscription — every field except cancel_on_exhausted_retries, which is create-only:
Updating retries on an existing subscriptionUpdate Subscription accepts the same retries object (a sent schedule replaces the stored one as a whole). The change applies the next time retries are scheduled: a billing cycle already running its retries finishes on the configuration it started with, and the new configuration takes effect from the next cycle.
The maximum number of retries equals your environment’s configured retry schedule length: 6 in production. Sandbox is currently limited to 5 and is being aligned to match production.
strategy: DEFAULT applies the fixed schedule above. Use SMART for machine-learning-based retry timing, or CUSTOM_SCHEDULE together with the schedule array to define your own delays.

Machine-learning retry timing

Set strategy to SMART to have Yuno’s machine-learning model choose when each retry is attempted, instead of using the fixed schedule. The model weighs signals such as the decline reason, the country, the card issuer and the payment provider to pick the moment most likely to succeed.
SMART changes retry timing only. It does not change how many retries you get: amount still controls that, and the same per-environment maximum applies. Any schedule array sent alongside strategy: SMART is ignored.
Machine-learning timing is applied from the second retry onward. The first retry always uses the standard delay from the fixed schedule above.
If a timing decision is not available in time, the retry falls back to the fixed schedule above. Retries are never skipped or dropped because of this — only their timing changes.
SMART is available to all accounts.

Subscriptions awaiting recovery

Where the PAST_DUE status is enabled for the account, a failed recurring charge moves the subscription from ACTIVE — or from TRIALING — to PAST_DUE and emits a subscription.past_due webhook. The subscription keeps billing and can still be canceled while it is there; the next successful charge returns it to the status it came from and emits the matching subscription.active or subscription.trialing event. Where the status is not enabled, a failed charge leaves the subscription in ACTIVE while the retries run, and only the payment.purchase webhook reports the decline. Contact your Yuno representative to have PAST_DUE enabled.

Canceling a subscription when retries run out

By default, when every retry for a billing cycle has been attempted and none succeeded, the subscription stays in its current status and billing rolls forward to the next cycle. A subscription backed by a permanently dead card therefore keeps generating failed charges indefinitely. Set cancel_on_exhausted_retries to true at creation to change that:
When retries for a cycle end without a successful payment, Yuno then:
  1. Sets the subscription status to CANCELED.
  2. Sets cancellation_source to RETRIES_EXHAUSTED.
  3. Stops all future scheduled billing for the subscription.
  4. Sends one SUBSCRIPTION.CANCEL webhook.
This applies whichever way the retries ended — the schedule running to its last attempt, or stop_on_hard_decline ending the cycle early after a hard decline. In both cases cancellation_source is RETRIES_EXHAUSTED.
cancel_on_exhausted_retries defaults to false. If you omit it, subscriptions behave exactly as they do today. No existing subscription changes behavior.
This cancellation is final. A canceled subscription is no longer billable, so Retry Subscription is rejected for it. Without this flag you can manually rescue a subscription whose retries were exhausted; with it enabled, that option is gone once the cancellation happens. Enable it only if an exhausted retry schedule should genuinely end the customer’s subscription.
cancel_on_exhausted_retries can only be set at creation. Update Subscription rejects a value different from the stored one with 400 (The field 'retries.cancel_on_exhausted_retries' can only be set when the subscription is created); the rest of the retries object stays updatable.
This flag applies to renewal cycles. Subscriptions created with initial_payment_validation: true already cancel themselves when their first payment fails, and that path reports cancellation_source as SYSTEM rather than RETRIES_EXHAUSTED.