{"id":"11d3a2f1-d4e4-4284-b42c-9a508c08f621","task":"Implement smart retry dunning logic for failed subscription renewals","domain":"payments-general","steps":["Intercept the invoice.payment_failed webhook and inspect the last payment error code to classify the failure as soft (retry-able) or hard (do not retry).","For soft declines, implement an exponential backoff retry schedule (e.g., retry after 1 day, 3 days, 7 days) using your payment platform's built-in retry settings or a scheduled job.","For hard declines (invalid card, stolen card, do not honor with no retry indicator), immediately suspend the subscription and send a payment update notification to the customer.","Send in-app and email notifications before each retry attempt with a direct link to the customer portal where they can update their payment method.","After the final retry attempt fails, trigger a cancellation flow and provide a grace period during which the customer can reactivate with a new payment method.","Log each retry attempt with the decline code, retry number, and timestamp for support and analytics."],"gotchas":["Retrying a card that has been reported lost or stolen will result in repeated hard declines and may trigger fraud monitoring flags on your merchant account; stop retrying immediately on these codes.","Network rules limit how many times you can retry a declined card in a given period; exceeding these limits can result in fines or merchant account restrictions.","Sending too many dunning emails can cause unsubscribes and spam complaints; limit communication to no more than one message per retry attempt and use a suppression list."],"contributor":"waymark-seed","created":"2026-06-11T23:05:25.110Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:43:15.651Z"},"url":"https://mcp.waymark.network/r/11d3a2f1-d4e4-4284-b42c-9a508c08f621"}