Canadian pre-authorized debit payments
Learn how to accept pre-authorized debit payments in Canada.
Stripe users in Canada and the United States can accept pre-authorized debit payments (PADs) from customers with a Canadian bank account using the Automated Clearing Settlement System (the related setting) provided by Payments Canada.
Before debiting a customer’s bank account, you must collect a mandate that defines the payment schedule or terms.
Stripe provides hosted mandate collection using your preferred terms, hosted bank-account collection, and instant bank verification (with delayed microdeposit verification in rare cases). Verification is required to accept PADs and can help reduce payment failures and fraudulent activity.
Final confirmation can take up to 5 business days, and PAD payments can fail or be disputed after initiation.
| Payment method family | Bank Debits |
|---|---|
| Usability | Reusable |
| Access type | Instant provisional access |
| Payment confirmation timing | Delayed |
| Settlement timing | Standard payout schedule |
| Pricing | View pricing details |
Eligibility and availability
Account eligibility
| Business location | Canada United States |
|---|---|
| Account type | Merchant Platform or marketplace (Connect) |
| Business model | B2B B2C |
Payment support
| Buyer location | Canada |
|---|---|
| Presentment currency | CAD, USD |
| Geographic coverage | Domestic Crossborder |
Transaction limits
the related setting Debit transactions have a minimum amount of 0.50 in the applicable currency. The default maximum, without increased large-charge limits, is 999,999.99. If Stripe enables increased limits, the absolute hard cap is 9,999,999.99 for two-decimal currencies. Merchant or platform Risk limits can lower the effective maximum.
Presentment currency
Most Canadian bank accounts hold Canadian dollars (CAD), though some hold US dollars (USD). You can accept PAD payments in CAD or USD, but use the currency that the customer’s account supports to avoid payment failures.
Unlike many card payment methods, a CAD account might not successfully accept a USD debit, and a USD account might not successfully accept a CAD debit. Most often, attempting this results in a delayed payment failure that can take up to 5 business days. Use CAD unless you’re confident the customer’s account accepts USD debits.
Capabilities
| Recurring payments | Supported |
|---|---|
| Payment authorizations | Extended authorizations Flexible extended authorizations Incremental authorizations Decremental authorizations Re-authorizations |
| Payment captures | Manual capture Partial capture Multi-capture Over-capture |
| Refunds | Partial refunds Full refunds Submission window: 180 days Processing time: 3 business days |
| Disputes | Partial disputes Full disputes |
Refunds
Refunds for PADs must be submitted within 180 days of the original payment. Refunds typically take 3 business days to process. If you accidentally debit your customer, contact them immediately to help avoid a payment dispute.
You can’t cancel an the related setting Debit refund. If you submit a refund while the payment is pending, Stripe starts the refund only after the Charge succeeds. If the Charge fails, Stripe cancels the pending refund because the customer’s bank account was never debited.
Refund process
You initiate a full or partial refund through Stripe using the Dashboard or Refunds API. Stripe sends it as a separate credit to the customer’s bank account, not as a reversal.
The credit isn’t explicitly labeled as a refund on the customer’s bank statement, it references the original payment’s statement descriptor. Notify your customer when you issue a refund so they can identify the credit. Follow the duplicate-credit guidelines before issuing a refund for a payment that the customer might also dispute with their bank.
Tracking refunds
You can view refund status in the Dashboard. Open the payment and click View Details on the refund entry, or retrieve the Refund object and check its status field. Stripe also notifies you of the final refund status using the refund.updated or refund.failed webhook event. When a refund succeeds, the status of the Refund object transitions to succeeded. If a refund fails, the status transitions to failed, Stripe returns the amount to your Stripe balance, and you must arrange an alternative way to provide your customer with a refund.
Avoid duplicate credits
To reduce the risk of a double credit:
- Confirm with your customer that you’re processing the refund so they don’t independently file a dispute with their bank.
- Tell your customer the expected 3-business-day processing time.
- Issue the refund through Stripe only after the original payment has fully settled.
Caution
Issuing a refund doesn’t prevent a dispute from being processed. A malicious customer can still file a dispute with their bank after receiving a refund, resulting in a double credit against you.
Disputes
Canadian pre-authorized debit payments can only be disputed once.
Dispute process
Customers can dispute a Canadian pre-authorized debit through their bank on a no-questions-asked basis. Personal-account disputes can be filed up to 90 calendar days after the debit; business-account disputes can be filed up to 10 business days after the debit. There is no inquiry phase.
When the bank creates a dispute, Stripe deducts the dispute amount and the applicable dispute fee from your Stripe balance.
Dispute notifications
When a customer files a dispute with their bank, Stripe sends you the charge.dispute.created webhook event. You can review the dispute and its reason in the Dashboard, or retrieve the Dispute object and check its reason field. When the dispute closes, Stripe sends you the charge.dispute.closed webhook event.
Responding to disputes
You can’t submit evidence or counter an the related setting Debit dispute, so you don’t have any intermediate response deadlines between dispute creation and closure. Contact your customer directly if you want to resolve the situation.
Dispute outcomes
You can’t win an the related setting Debit dispute. The bank’s decision is final and non-appealable, and Stripe doesn’t refund the dispute fee. If you reach an arrangement with your customer and they agree to return the funds, they must make a new payment.
Warning
If you proactively issue a refund while the customer’s bank also initiates the dispute process, the customer might receive two credits for the same transaction. Follow the refund guidelines to avoid this.
PAD transaction failures
PAD transactions can fail at any point from initiation through confirmation. Reasons include insufficient funds, an invalid account number, or a customer disabling debits with their bank.
If a payment fails after funds have been made available in your Stripe balance, Stripe immediately removes the funds from your Stripe account. In rare situations, Stripe receives a PAD failure after a PaymentIntent transitions to succeeded. Stripe then creates a dispute with a reason of insufficient_funds, incorrect_account_details, or bank_cannot_process, and charges a failure fee.
Mandates
Stripe helps you collect a mandate during the payment flow. The mandate authorizes your business to debit the customer’s account. In Canada, mandates are called pre-authorized debit (PAD) agreements. Payments Canada Rule H1 governs PAD mandate collection, confirmation, and pre-debit notification requirements.
Stripe initiates the first debit immediately after mandate acceptance. You must notify customers with confirmation of a new mandate within 5 calendar days after they accept it.
What customers authorize
A PAD agreement authorizes debits under its agreed payment schedule and terms. It includes the customer’s institution number, transit number, account number, name, and email.
Collect mandates
The Accept a payment guide explains hosted mandate collection. See Custom PAD mandate agreements to create a custom agreement that meets Payments Canada requirements.
Stripe-hosted payment flows collect the required bank details and mandate acceptance. If you build a custom collection flow, follow the applicable Payments Canada requirements before confirming the payment.
Manage mandates
Manage mandates in the Dashboard or with the Mandates API.
Cancel mandates
Customers can request cancellation at any time, including by properly giving oral notice to the business or by contacting their bank. Canceling a mandate invalidates all future debit requests. To accept additional payments, collect a new mandate.
Payment schedule
Each PAD mandate must specify a payment schedule that defines when and how debits can be charged.
| Schedule | Use case |
|---|---|
interval | Subsequent payments can be charged on a specified schedule or on triggering events clearly described in the mandate with an interval description. This includes one-time payments on a specific date, payments on a set of dates or regularly, and payments triggered by defined criteria or events. Example interval descriptions include “on the 5th of every month,” “on completion of checkout,” “on acceptance of a contract,” “when a customer balance owing reaches 100 USD,” and “when any invoice becomes due.” |
sporadic | Infrequent or irregular debits without predictable periods. A sporadic PAD can be charged at arbitrary times only with the customer’s express authorization at the time of payment, such as when they log in to your website. Collecting a sporadic mandate in advance lets the customer trigger a payment with a single step. |
combined | A mandate that allows both interval and sporadic debits. |
Transaction type
Each PAD mandate must specify a transaction type that defines whether transactions are for personal or business reasons.
Use with Invoicing and Subscriptions
If you use the related setting Debit with Invoicing or Subscriptions, set default_for to ['invoice', 'subscription']. This lets you reuse the payment method for invoice and subscription payments without creating a new mandate.
Mandate and debit notification emails
Payments Canada network rules require these customer notifications:
- A mandate-confirmation email when a mandate is established
- A debit-notification email each time a debit is made
If verification requires microdeposits, Stripe also sends reminder emails with a link to a hosted verification page.
Stripe sends these notifications by default. You can customize their colors and logo.
Warning
If you send custom notifications, you must support mandate confirmations, debit notifications, and applicable microdeposit reminders. You can’t send custom notifications for only one type.
To send custom notifications:
- Turn off Stripe emails in Dashboard email settings .
- Send a mandate-confirmation email no later than 5 calendar days after acceptance. Include the mandate and collected bank-account information: institution number, transit number, and the account number’s last four digits. Stripe initiates the first debit immediately after acceptance.
- Use
charge.pendingto trigger each debit-notification email. Include your contact information, the bank account’s last four digits, and the amount to be debited.
When handling charge.pending, verify incoming webhook signatures and allow traffic from Stripe’s public IP addresses.
Stripe product support
| Products | Checkout Payment Links Payment Element Express Checkout Element Mobile Payment Element Managed Payments Billing Invoicing Adaptive Pricing Customer Portal Radar Terminal Connect |
|---|---|
| APIs | PaymentIntents PaymentIntents with setup_future_usage SetupIntents CheckoutSessions |
Integration guides
Note
Subscription mode in Checkout isn’t yet supported. To learn about early access when this feature is available, contact us to join the waitlist.
Use one of these guides to integrate Canadian pre-authorized debit:
- Checkout : Stripe’s prebuilt, hosted checkout page
- Elements : Stripe’s drop-in UI components
- Invoicing
- Subscriptions
If you prefer to manually list payment methods or want to save Canadian pre-authorized debit details for future payments, use Manually configure Canadian pre-authorized debit as a payment or Save Canadian pre-authorized debit details for future payments.
Product limitations
- Checkout supports the related setting Debit in payment and setup modes. Checkout subscription mode doesn’t support the related setting Debit.
- Payment Element requires an existing PaymentIntent . Deferred-intent integrations and Elements with the Checkout Sessions API aren’t supported.
- Express Checkout Element, iOS Payment Sheet, and Android Payment Sheet don’t support the related setting Debit.
Radar support
Radar’s default controls apply to the related setting Debit. Custom Radar settings for the related setting Debit are in private preview.
Connect
To use the related setting Debit in a Connect integration, you must enable the related setting Debit on your platform and request the acss_debit_payments capability for your connected accounts.
Mandates and on_behalf_of
You must collect a mandate for each connected account that you process destination charges on_behalf_of because the connected account is the merchant of record for the transactions.
You can’t clone the related setting Debit payment methods and their mandates to connected accounts for use with destination charges. You must create a new PaymentIntent or SetupIntent with on_behalf_of set to the connected account to collect a new mandate authorization from the customer.
Billing retries
Enable Direct Debit retries to have Stripe automatically retry failed Direct Debit payments caused by insufficient funds. You can turn on retries for recurring subscription invoices, one-off invoices, or both.
Stripe can automatically retry each failed the related setting Debit payment once, no more than 30 days after the original payment attempt. These limits differ from card retries because the related setting Debit payments are asynchronous and can take several business days to complete.
Debit failure fees aren’t charged for retry attempts that we initiate automatically.
Timing
With Canadian pre-authorized debit, it can take several business days for funds to become available in your Stripe balance. The number of business days it takes for funds to become available is called the settlement timing. Payments are generally submitted on the same day that they’re created, but are processed on the following business day if they’re created on a non-business day or after the cutoff time.
You can access the expected_debit_date for Canadian pre-authorized debit under payment_method_details for Charges. This is an estimated date of when the funds might be debited. This estimate isn’t guaranteed and the actual date might vary. This information is available in API responses and in charge.updated, charge.succeeded, and charge.failed webhook events when the debit date can be determined.
The following table describes the settlement timings for Canadian pre-authorized debit payments that Stripe offers. T+x refers to x business days after submission, which might differ from the payment creation date.
| Settlement type | Payment Success | Funds Available | Cutoff time |
|---|---|---|---|
| Standard Settlement | T+4 at 21:00 UTC | T+5 at 00:00 UTC | 17:00 US/Eastern |
Customer experience
- Select Canadian pre-authorized debit The customer selects Canadian pre-authorized debit at checkout.
- Provide bank account details The customer uses Stripe-hosted instant verification or manually enters their institution, transit, and account numbers.
- Verify the account and authorize the mandate The customer verifies the account instantly when available, or completes microdeposit verification later. Microdeposits typically arrive in 1–2 business days and must be verified within 10 days. The customer reviews and accepts the PAD agreement before debit initiation.
- Payment submitted and confirmed asynchronously After authorization, the customer sees your integration's submitted or processing state, not final success. Success or failure can take up to 5 business days. When the final status arrives, notify the customer that the payment is complete or ask them for another payment method.
Authorization and payment confirmation
The standard the related setting Debit flow doesn’t require redirecting the customer to an external bank authorization page. In a custom Stripe.js integration, Stripe opens an on-page modal to collect bank details, verify the account, present the PAD agreement, and collect authorization. Stripe-hosted Checkout collects this information on the Stripe hosted checkout page, while embedded Checkout remains within the business’s page.
Customers follow the same the related setting Debit flow in desktop and mobile browsers.
For PaymentIntents integrations, handle payment_intent.processing, followed by payment_intent.succeeded or payment_intent.payment_failed. For Checkout, checkout.session.completed means the customer completed the Checkout Session; handle checkout.session.async_payment_succeeded or checkout.session.async_payment_failed for the final delayed outcome. See Accept a payment and Fulfill orders.
Transaction identifiers
PAD payments appear on customers’ bank statements with a statement descriptor. The default descriptor depends on the Stripe account associated with the payment and, for Connect payments, the charge type. You can set a dynamic statement descriptor for each PaymentIntent with statement_descriptor. For account-level configuration, see statement descriptors.
Only the first 15 alphanumeric characters of the descriptor appear on the bank statement. Descriptors can’t use <, >, ', or ". For example, the related setting appears as the related setting. Banks can format the displayed value differently, including lowercase or uppercase.
| Default statement descriptor | Dynamic statement descriptor | Merchant name | Bank statement descriptor |
|---|---|---|---|
| Rocket Rides | Unspecified | Rocket Rides | Rocket Rides |
| Rocket Rides | Sunday Ride | Rocket Rides | Sunday Ride |
For Connect payments, descriptor ownership depends on the charge type:
| Charge type | Descriptor taken from |
|---|---|
| Direct | Connected account |
| Destination | Platform |
| Separate charge and transfer | Platform |
Destination (with on_behalf_of) | Connected account |
Separate charge and transfer (with on_behalf_of) | Connected account |
For Connect setup details, see Enable the related setting Debit for connected accounts. A PAD mandate created with on_behalf_of one connected account belongs to that account and can’t be reused for another connected account.
To retrieve the PAD mandate ID, expand latest_charge on the PaymentIntent and read latest_charge.payment_method_details.acss_debit.mandate. Make the request in the Stripe account that owns the PaymentIntent. Stripe doesn’t expose a separate merchant-facing the related setting network transaction ID.
When matching a payment to a customer or contacting support, use the debit date and amount, the bank account’s last four digits, the displayed statement descriptor, and the PAD mandate ID.
Enable Canadian pre-authorized debit
If you use our front-end products, you can enable Canadian pre-authorized debit directly from your payment method settings. Stripe then automatically determines the most relevant payment methods to display to your customers.
If your integration requires manually listing payment methods, learn how to manually configure Canadian pre-authorized debit as a payment.
