QuickStart Guide
Enabling Stripe Billing
The Stripe Billing integration needs to be enabled on your application by your Piano representative. Clients will be enabled in turn based on their use of Piano features. Contact your Piano representative if you have any questions.
The order of setup
-
Your Piano representative enables the Stripe Billing integration on your application.
-
You create or connect your Stripe account in the Piano Dashboard, and confirm that both the Connected Account ID and the API credentials are present and valid.
-
You apply the Stripe Dashboard settings below.
-
Piano reviews your configuration with you before the Switch.
-
New purchases move to Stripe Billing as soon as your application is activated. Existing subscriptions move at their next renewal.
Steps 2 and 3 are yours. Steps 1 and 4 are coordinated with your Piano team.
Existing Stripe Payments clients
If your Stripe account is already connected to Piano for Payments, it is connected to Piano's Stripe Billing Connect account automatically. Check that your Stripe API keys are configured in the Payment Provider settings and add them if they are not. Nothing else is needed in Piano. Go to the Stripe Dashboard configuration below.
New to Stripe Payments Clients
New Stripe clients need to create a Stripe account before configuration.
-
First create your Stripe Account (you can do this in your Piano Dashboard, under Edit Business → Billing Provider), then configure Stripe Account and Business settings
-
Connect your Stripe Account to Piano as described in Stripe Billing Configuration in Piano (if the Stripe account was created outside Piano)
-
Follow the steps for Stripe Dashboard configurations below
Non-Stripe Payments Clients
You still need a Stripe account for Billing, even though your payments are collected by your own processor. Contact your Piano representative to enable the Stripe Billing integration, then follow Part 2 of the Client Guide Series for BYOP, which covers only the settings that apply to you.
Required Stripe Dashboard Configuration
The Piano-Stripe integration requires a few simple configuration changes in the Stripe Dashboard so that subscriptions can be fully synchronized between the two systems. Below is an overview for both Stripe Payments and BYOP clients.
|
Setting |
Stripe Default |
Piano Guidance on default settings |
Key Risk if Misconfigured |
Client Type Applicability (Stripe Payments vs BYOP) |
|---|---|---|---|---|
|
Revenue recovery |
Smart Retries. Stripe's recommended setting is 8 attempts within 2 weeks, plus local payment method retries as required |
Recommended |
If using a third-party retry tool, contact your Piano representative to validate compatibility |
Stripe Payments only |
|
Invoice finalization grace period |
1 hour |
Recommended |
Do not change. This affects the renewal window and Piano sync logic |
Both |
|
Upcoming renewal events |
7 days before renewal (Stripe's dashboard default on a new account) |
3 days before renewal recommended. The 7-day default is compatible, but it widens the window in which changes can still happen before the renewal invoice is finalized |
Required for Piano-Stripe pre-renewal sync. If the event is not configured at all, the pre-renewal sync does not run and the subscription can go out of sync. Check this on an existing Stripe account, where it may have been turned off |
Both |
|
Manual tax amount rounding |
Round at invoice level |
Recommended |
Do not change to item-level. Small discrepancies may cause sync failures. This setting applies only to invoices with manual tax rates, which is what Piano creates |
Both |
|
Automatic invoice emails |
Send finalized invoices enabled |
BYOP: disable (required). Stripe Payments: optional |
For BYOP, an enabled invoice email sends the subscriber a Stripe invoice with a payment link your processor will not reconcile, which can cause a double charge. For Stripe Payments, the risk is duplicate emails alongside Piano Email Manager |
Both, required for BYOP |
|
Invoice status |
Past-due |
Default not recommended |
Set the invoice to "Uncollectible". Leaving the default can interfere with Piano-managed cancellation |
Manage failed payments: both client types. Manage invoices sent to customers: BYOP only, because BYOP invoices use collection_method = send_invoice and Stripe's automatic dunning does not apply to them |
|
Subscription status |
Cancel / Past-due |
Default not recommended |
Set the subscription to "Unpaid". The subscription remains active in Stripe, so Piano controls cancellation. "Cancel the subscription" must NEVER be selected for BYOP, as it can lead to unexpected cancellation during grace and retry |
Manage failed payments: both client types. Manage invoices sent to customers: BYOP only |
Billing Settings
Revenue recovery, retries (Only Stripe Payments clients)
In the Stripe Dashboard, go to Billing → Revenue recovery → Retries → Cards. Direct link: dashboard.stripe.com/revenue_recovery/retries.
Recommended configuration:
-
Retry period: 2 weeks (to avoid overlapping periods on monthly subscriptions). Stripe lets you choose 1 week, 2 weeks, 3 weeks, 1 month, or 2 months, and set the number of attempts. Stripe's own recommended setting is 8 attempts within 2 weeks.
-
Subscription status: "Mark the subscription as unpaid"
-
Invoice status: "Mark the invoice as uncollectible"
This setting configures the same retry rules regardless of term length. To use different rules for monthly vs. annual subscriptions, use Automations to configure separate policies.
In the same section, navigate to Local Payment methods and click Manage to enable retries accordingly (e.g. if you use SEPA or other direct debit payment methods).
Invoice Settings
Invoice finalization grace period
In the Stripe Dashboard, navigate to Settings → Billing → Invoices → Invoice finalization grace period and locate the Edit button next to the default rule. Direct link: dashboard.stripe.com/settings/billing/invoice.
Required setting:
-
Set the finalization grace period to 1 hour (default)
-
Do not add additional rules
This setting determines the time between invoice creation and when it's finalized and sent to subscribers. Piano uses this window to validate the invoice before payment is collected.
Upcoming renewal events
In the Stripe Dashboard, navigate to Settings → Billing → Subscriptions and emails → Prevent failed payments → Upcoming renewal events.
Required setting:
Configure events for upcoming renewals to ensure proper validation between Piano and Stripe. This is an important integration point between the systems. Change the "Upcoming renewal events" setting to be triggered 3 days before a subscription renews.
Stripe's dashboard default on a new account is 7 days, which is compatible. It does, however, widen the period within which changes may still happen before the renewal invoice is finalized. On an existing Stripe account, check that the setting is configured at all: if it is off, the pre-renewal sync does not run and subscriptions can go out of sync.
Manual tax amount rounding
In the Stripe Dashboard, navigate to Settings → Billing → Invoices → Manual tax amount rounding.
Required setting:
If you use Piano Tax support, choose "Round manually entered taxes at invoice level". This ensures that the invoice level rounding rules are enabled in your Stripe account invoice settings to prevent discrepancies.
This setting applies only to invoices with manual tax rates, which is what Piano creates. Invoices calculated with automatic Stripe Tax always sum tax amounts first and then round, which is one more reason Stripe Tax must not be enabled while Piano manages tax.
Disable Automatic Invoice Emails
In the Stripe Dashboard, navigate to Settings → Billing → Subscriptions and emails → Manage invoices sent to customers and disable the customer emails toggle for Send finalized invoices and credit notes to customers.
BYOP clients: this is required. It prevents customers from paying directly on Stripe when your own processor is collecting the charge. Also make sure no payment links are enabled on invoices, otherwise there may be double charges.
Stripe Payments clients: this is optional. You may leave the setting enabled if you prefer Stripe to send invoice emails. If you do, make sure Stripe email rules and Piano Email Manager do not conflict or send duplicate emails.
Manage Failed Payments setting
Under Settings → Billing → Subscriptions and emails, navigate to Manage failed payments and update the Subscription status to Unpaid and the Invoice Status to Uncollectible.
This section applies to both Stripe Payments and BYOP clients.
Manage Invoices Sent to Customers (Only Applicable to Non-Stripe Payments Clients)
In the Stripe Dashboard, navigate to Settings → Billing → Subscriptions and emails → Manage invoices sent to customers and update the Subscription status to Unpaid and the Invoice Status to Uncollectible.
These settings apply to BYOP invoices, because BYOP invoices use collection_method = send_invoice and Stripe's automatic dunning does not apply to them. Stripe Payments subscriptions use charge_automatically and are governed by the Manage failed payments section instead, so a pure Stripe Payments client does not need to set the statuses here.
This is important to ensure Piano can manage BYOP grace and retry logic and handle cancellation. In no case set the Subscription status to Cancel.
Pre-switch configuration checklist
Work through this with your Piano team before the Switch.
In Piano
- Stripe Billing enabled on the application by your Piano representative
- Stripe account created or connected under Edit Business → Billing Provider
- Connected Account ID present
- Standard API credentials added and valid (not restricted keys)
- All Stripe payment provider integrations in this application point at the same Stripe account ID
In the Stripe Dashboard, all clients
- Invoice finalization grace period set to 1 hour, with no additional rules
- Upcoming renewal events configured, 3 days before renewal recommended
- Manual tax amount rounding set to invoice level (if you use Piano Tax support)
- Manage failed payments: Subscription status Unpaid, Invoice status Uncollectible
- Stripe Tax not enabled
In the Stripe Dashboard, Stripe Payments clients only
- Revenue recovery retries configured, Smart Retries enabled
- Local payment method retries enabled if you use SEPA or another direct debit method
- Decision made on whether to leave Stripe invoice emails enabled, and checked against Piano Email Manager for duplicates
In the Stripe Dashboard, BYOP clients only
- Send finalized invoices and credit notes to customers disabled
- No payment links enabled on invoices
- Manage invoices sent to customers: Subscription status Unpaid, Invoice status Uncollectible
- Subscription status is never set to Cancel