We’ve migrated our documentation to a new site, which means some URLs have changed. If you hit a broken link, submit a support ticket.
Subscriptions

Non-Stripe Providers (BYOP)

Non-Stripe Providers (BYOP)

BYOP (Bring Your Own Processor) enables clients to continue using their existing non-Stripe payment processor, such as Braintree or Datatrans, while Piano manages the full subscription lifecycle through Stripe Billing. In this model, Stripe acts as the subscription engine (schedules, invoices, renewal logic), while your processor handles the actual charge.

This means you get Stripe Billing's invoice and subscription scheduling combined with your existing payment infrastructure. Note: Stripe Smart Retries only support Stripe-native payment methods. For BYOP subscriptions, the grace period and retry logic configured in Passive Churn Prevention apply instead. Retries continue to be managed in Piano and by your processor, as specified by your PSP integration in Piano.

BYOP renewal flow

The key difference in BYOP is which Stripe webhook event triggers subscription renewal in Piano. With Stripe-native payments, the invoice.paid event signals successful collection. With BYOP, the invoice.finalized event is used instead, since the actual payment is collected "out-of-band" by your processor.

Event

Stripe-native

BYOP

invoice.finalized

Ignored for synchronous payments. For asynchronous payments (SEPA, Bacs, ACH) it initiates the renewal and sets the payment to PENDING.

Triggers Piano subscription renewal, including the payment request to your processor and access extension

invoice.paid

Triggers renewal + access extension

Confirms payment (informational)

invoice.payment_failed

Starts Smart Retry grace period

Starts grace period; your processor retries out-of-band

customer.subscription.deleted

Expires Piano subscription

Expires Piano subscription

BYOP vs Stripe-native comparison

Capability

Stripe-native

BYOP

Payment processing

Stripe handles charge

Your processor handles charge, reflected as out-of-band in Stripe

Subscription lifecycle

Stripe Billing

Stripe Billing

Renewal trigger

invoice.paid

invoice.finalized

Smart Retries

Fully supported

Grace period only; retries managed by Passive Churn Prevention and your processor

Invoice emails

Optional (Stripe sends)

Must be disabled to avoid a double charge. A Stripe invoice cannot be paid directly on a BYOP subscription.

Multi-currency

1 customer per currency

1 customer per currency (same rule applies)

Payment method management

Via Piano/Stripe

Via Piano/managed by your processor; Piano stores token reference

Subscription Payment method changes

Clients can switch a subscriber's payment method between Stripe-native and BYOP within Piano. When switching, Piano updates the subscription's billing context and ensures the correct renewal trigger (invoice.paid vs invoice.finalized) is applied going forward. This transition is handled transparently without interrupting the subscriber's access.

Grace period

For BYOP subscriptions, the grace period is managed by Piano rather than Stripe Smart Retries. When invoice.finalized is received and your processor has not yet confirmed payment, Piano extends subscriber access for the configured grace period while your processor retries the charge. If the charge is not collected within the grace period, Piano expires the subscription.

Where the grace period is configured: grace period length is set per term under Manage → Terms. When Passive Churn Prevention is enabled, the length comes from a churn prevention logic under Management → Churn Prevention, which overrides term-level values with a 15-day default.

Your grace period settings continue to apply to BYOP subscriptions, because Piano still runs the retries. For Stripe-native subscriptions they are ignored: Stripe determines the retry schedule, and the grace period equals the billing period.

Payment method management

Non-Stripe payment methods are stored as references in Piano. When a subscriber updates their payment method in MyAccount, the token is updated in your processor and the reference is updated in Piano. Stripe does not hold the actual payment method for BYOP subscribers.

Multi-currency and multi-customer support

Piano fully supports subscribers transacting in multiple currencies. Because Stripe requires a separate customer object per currency, Piano automatically creates and manages additional Stripe customer records where needed. This happens transparently. From your perspective, there is one subscriber, and Piano handles the Stripe-side customer mapping.

This applies equally to both Stripe-native and BYOP subscribers. Your existing multi-currency business rules continue to operate as configured in Piano. In case of multiple concurrently active subscriptions in different currencies on a single subscriber, user will be asked to select currency in the MyAccount to ensure the payment method is properly associated with customer and currency in Stripe.

BYOP subscription operations

All standard Piano subscription management operations are available for BYOP subscriptions:

  • Auto-renew toggle on/off

  • Immediate cancellation (with or without refund)

  • Changing next billing date

  • Payment method update (updating token reference in your processor)

  • Subscription switching between BYOP and Stripe-native (in case you use both)

Upgrade operations for BYOP

Upgrade and downgrade operations for BYOP subscriptions follow the same 2:1 mapping as Stripe-native upgrades: Piano cancels the existing subscription and creates a new one with the target term and a proration credit applied, while in Stripe Billing subscription remains the same and a result of upgrade or downgrade is represented as an updated subscription Schedule period only, effectively retaining the same subscription. Piano calculates the proration amount, which is applied as net amount to the specified subscription schedule phase in Stripe.

Last updated: