If you are managing subscriptions on Braintree , implementing Retain is pretty turn key. However, if Braintree is simply your payment gateway and you are managing subscriptions elsewhere, then we recommend implementing a few additional pieces of Retain to ensure good customer UX.
1. Indicate which charges are recurring vs. one time
Retain is designed to chase recurring transactions. Since (by default) Retain doesn't know which failed transactions belong to a recurring charge vs. one off, we need your help.
1. If you already have a unique identifier for charges that are recurring, you can share that with our team and we'll go after any failed charge with that identifier.
2. If you don't already have a unique identifier, you can use the is_recurring field in BT and we'll use that to determine which ones to chase.
*Note by default, we ignore the first failed transaction we see to ignore checkout charges. If you only started tagging charges recently and want us to go after first time failed transactions, please let us know.
Any customer without that custom field will be ignored.
2. Ensure you're listening to updates in Braintree
ProfitWell Retain will nudge your customers to update their payment information and save it back to their profile in Braintree. However, it's imperative that your application and backend is aware of these updates so that your system can stay in sync with these updates and react accordingly.
You can do this by polling for various information using the Braintree API.
1. When a customer updates their payment information, we first create a payment method with the Payment Method: Create request.
2. We then retry the customer for the amount that failed with the Transaction: Sale request.
3. You can hit the Braintree API to query for transactions with status
processor_declined to find which customers successfully updated their information.
3. Stop Retain for a given customer
Each Retain email will have a unsubscribe link in the footer so that users can tell us to stop reaching out to them. However, you can also have Retain stop all further outreach programmatically via API endpoint. or manually via the UI.