Your ideas, our roadmap!

Your feedback directly influences what we build. Share a feature request, report a rough edge, or tell us what's working well. The more detail (and upvotes), the faster we can act on it.

Open

Customer portal is not brand aware: shows the primary brand's name and mixes billing history across brands

I have two brands under one business. A primary brand (a books store) and a secondary brand (a developer education subscription). Products, payments and subscriptions are correctly tagged with brand_id, and invoice PDFs are correctly branded per brand, which is great. The hosted customer portal is the one place that is not brand aware, and there is no way to work around it from my side. Two problems: 1. The portal always renders under the primary brand's name and logo. So a customer who subscribed on my second brand clicks "manage billing" on that site, and lands on a page titled with my books store. They have never heard of that business. On a billing page this looks like a mis click or a phishing page, which is the worst possible moment to confuse someone about who they are paying. 2. Billing history is not filtered by brand. Dodo reuses one customer record per email across the whole business, so a customer who has bought from both brands sees both sets of payments mixed together in one list. It also quietly reveals that the two sites are the same business, which is not something I want to disclose. Why I cannot fix this myself: customerPortal.create only accepts customer_id, return_url and send_email. There is no brand_id argument, and no business setting to scope it. Compare this to payments.list and subscriptions.list, which both accept brand_id and work perfectly. What I would like: - customerPortal.create to accept an optional brand_id, which scopes both the branding and the billing history to that brand - or the portal to infer the brand from the subscription being managed Related: webhook endpoints have the same shape of problem. I was told on Discord that brand scoped webhook urls are being worked on. The portal feels like the same gap in the same place. For now I have had to rebuild billing history and invoice downloads in my own app using payments.list with brand_id plus invoices.payments.retrieve, and drop the portal link entirely. That works, except payment methods, which have no public API at all, so there is no way to let a customer change their payment method without sending them to a portal branded as a different business.

Amritanshu Rai·16 days ago1
Open

Subscription references a payment method ID missing from the customer’s payment methods list

Hello Dodo Payments Support, We found an apparent inconsistency between a subscription’s payment_method_id and the customer’s saved payment methods in Test Mode. ### Steps to reproduce 1. Create and pay for a subscription using a test card. 2. Cancel the subscription. 3. Create a new subscription for the same customer. 4. Manually enter the same card details again instead of selecting the saved card: - same card number - same expiration date - same CVV 5. Retrieve the new subscription and the customer’s payment methods. It appears Dodo recognizes and deduplicates the same physical card, so it does not create another entry in the customer payment methods list. However, the new subscription receives a different payment_method_id. ### Customer cus_0Nit5PNSWnwbGgdhx4axM ### Subscriptions [ { "subscription_id": "sub_0NjJ5ZzTvDYx0LfQ7g6xI", "status": "active", "payment_method_id": "pm_AGUnSlI1V3f5smOg8vl2", "created_at": "2026-07-16T11:59:54.850786Z", "next_billing_date": "2027-07-16T12:00:09.877212Z", "customer_id": "cus_0Nit5PNSWnwbGgdhx4axM" }, { "subscription_id": "sub_0Nit5dA8lhUEHkRNh72Nn", "status": "cancelled", "payment_method_id": "pm_gPZpWXKk4eSuzuXi9fu5", "created_at": "2026-07-10T14:44:34.167194Z", "next_billing_date": "2027-07-16T06:13:35.337024Z", "customer_id": "cus_0Nit5PNSWnwbGgdhx4axM" }, { "subscription_id": "sub_0Nit5POGOGvsoWzevyVhX", "status": "failed", "payment_method_id": null, "created_at": "2026-07-10T14:43:24.043795Z", "next_billing_date": "2026-07-10T14:43:24.043795Z", "customer_id": "cus_0Nit5PNSWnwbGgdhx4axM" } ] The active subscription references: pm_AGUnSlI1V3f5smOg8vl2 ### Customer payment methods response GET /customers/cus_0Nit5PNSWnwbGgdhx4axM/payment-methods returns: [ { "payment_method_id": "pm_gPZpWXKk4eSuzuXi9fu5", "payment_method": "card", "payment_method_type": "credit", "recurring_enabled": true, "last_used_at": "2026-07-10T14:44:49.850Z", "card": { "card_network": "visa", "card_type": "credit", "last4_digits": "4242", "expiry_month": "12", "expiry_year": "2034" } } ] Therefore, the active subscription references pm_AGUnSlI1V3f5smOg8vl2, but that ID is absent from the customer’s payment methods list. ### Impact Our UI cannot determine which saved payment method is currently used by the active subscription. Comparing payment method IDs produces no match, and Dodo does not expose an endpoint to retrieve payment method details directly by ID. ### Expected behavior We would expect one of the following: 1. The active subscription to reference the existing canonical customer payment method ID, or 2. The new payment method ID to appear in the customer payment methods list, or 3. An API field/endpoint that maps a subscription payment method ID to its canonical customer payment method. Could you confirm whether this behavior is expected and recommend the correct way to identify the customer payment method currently used by a subscription?

Need_To_Check
Andrii Mierlinov·10 days ago