Manual Retry re-attempts a failed subscription renewal payment the moment you ask, from the payment’s detail page or through the API. It charges the payment method saved on the subscription, and it runs independently of the automatic Payment Retries schedule.
What Is Manual Retry?
When a renewal payment fails, the subscription moves toon_hold and Payment Retries re-attempt the charge on a back-off schedule. Sometimes you know the payment will go through now: a customer has confirmed they topped up their account, or your support team is on a call with them. Manual Retry lets you send one attempt immediately instead of waiting hours or days for the next scheduled one.
- Renewal payments only: Manual Retry applies to subscription renewal invoices while the subscription is
on_hold. First payments, one-time payments, plan-change charges, and on-demand charges are not eligible. - No customer action: The charge goes to the payment method already saved on the subscription.
- Independent of automatic retries: A manual retry does not consume an attempt from the automatic schedule, does not move the next scheduled retry, and works even when Payment Retries are turned off.
- Retries the invoice, not the payment: A failed payment is only the entry point. Dodo Payments looks up the open renewal invoice behind it and charges that debt, so it does not matter which failed payment on the invoice you retry from.
Retrying from the Dashboard
1
Open the failed payment
Go to Transactions → Payments and click the failed renewal payment to open its Transaction details page.
2
Click Retry Payment Manually
Click Retry Payment Manually in the top-right corner. The button is available only while the payment is eligible.
3
Check the result
A new payment is created for the attempt and appears in the Activity Log. If the charge succeeds, the subscription returns to
active and the next billing date advances as normal. If the payment processor has not settled the charge yet, the payment shows as in progress until the payment.succeeded or payment.failed webhook reports the outcome.
Retry Payment Manually on the transaction details page of a failed renewal
Eligibility
A manual retry is sent only when every check below passes. The Reason code column is what the API returns: inreason on GET /payments/{payment_id}/retry, and as the error code on POST /payments/{payment_id}/retry.
Manual Retry is narrower than automatic retries in one place: it requires the subscription to be
on_hold. Automatic retries keep running for other non-active statuses; see Subscription Status Transitions.Retry Limits
Each renewal invoice allows 3 manual retries, with a cooldown between them:
The limits apply in both test mode and live mode. When a retry is refused for this reason, the API returns
MANUAL_RETRY_LIMIT_REACHED (HTTP 429). The error body carries only code and message. To learn when the next retry opens, check the retry state and read retry_available_at. It is null once all three are spent.
Automatic retries do not count toward this limit, and manual retries do not count toward the automatic schedule’s 8 attempts.
Manual vs. Automatic Retries
Retrying via the API
Check eligibility first, then send the retry. Both endpoints take the ID of a failed payment.Check Whether a Payment Can Be Retried
GET /payments/{payment_id}/retry never fails on an ineligible payment. It returns can_retry: false with the reason code instead, so your dashboard or support tooling can show the same state the Dodo Payments dashboard shows. It requires the Viewer role.
Response
Send a Manual Retry
POST /payments/{payment_id}/retry creates a new payment and charges the saved payment method. It requires the Editor role.
Response
Error Responses
Every code is described in the Error Codes reference.
Webhooks
A manual retry creates an ordinary payment, so the same webhooks fire as for any renewal attempt:
On the payment object in these events,
retry_attempt is 1 or higher and subscription_id is set, exactly as for an automatic retry. Keep the payment_id from the retry response if you need to tell a manual attempt apart from a scheduled one.
Payment Webhook Payloads
Full payload schemas for payment events.
Related
Subscription Payment Retries
The automatic back-off schedule that runs alongside manual retries.
Subscription Dunning
Email the customer to update their payment method after a hard decline.
Handle Payment Failures
Read decline codes and decide when a retry is worthwhile.
Error Codes
Every
MANUAL_RETRY_* code, its trigger, and its message.