# 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 (ACSS) provided by [Payments Canada](https://www.payments.ca).

Before debiting a customer’s bank account, you must collect a [mandate](https://docs.stripe.com/payments/acss-debit.md#mandates) 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: https://stripe.com/en-ca/pricing/local-payment-methods#pre-authorised-debits-in-canada
## Eligibility and availability 

### Account eligibility
Business location: CA, US
Account type: ✓ Merchant, ✓ Platform or marketplace (Connect)
Business model: ✓ B2B, ✓ B2C
Stripe accounts in the following countries can accept Canadian pre-authorized debit payments that settle in a supported currency.

AMER: CA, US

Customers in the following countries can use Canadian pre-authorized debit.

AMER: CA

### Payment support
Buyer location: CA
Presentment currency: CAD, USD
Geographic coverage: ✓ Domestic, ✓ Crossborder
### Transaction limits 

ACSS 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 ACSS Debit refund. If you submit a refund while the payment is pending, Stripe starts the refund only after the [Charge](https://docs.stripe.com/api/charges/object.md) 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](https://dashboard.stripe.com/payments) or [Refunds API](https://docs.stripe.com/api/refunds/create.md). 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](https://docs.stripe.com/payments/acss-debit.md#avoid-duplicate-credits) 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](https://dashboard.stripe.com/payments). Open the payment and click **View Details** on the refund entry, or [retrieve the Refund object](https://docs.stripe.com/api/refunds/retrieve.md) and check its `status` field. Stripe also notifies you of the final refund status using the `refund.updated` or `refund.failed` *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) event. When a refund succeeds, the status of the [Refund](https://docs.stripe.com/api/refunds/object.md) 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.

> 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`](https://docs.stripe.com/api/events/types.md#event_types-charge.dispute.created) *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) event. You can review the dispute and its reason in the [Dashboard](https://dashboard.stripe.com/disputes), or retrieve the [Dispute object](https://docs.stripe.com/api/disputes/object.md) and check its `reason` field. When the dispute closes, Stripe sends you the [`charge.dispute.closed`](https://docs.stripe.com/api/events/types.md#event_types-charge.dispute.closed) webhook event.

#### Responding to disputes 

You can’t submit evidence or counter an ACSS 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 ACSS 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.

> 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](https://docs.stripe.com/payments/acss-debit.md#avoid-duplicate-credits) 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](https://www.payments.ca/sites/default/files/h1eng.pdf) 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](https://docs.stripe.com/payments/acss-debit/accept-a-payment.md) guide explains hosted mandate collection. See [Custom PAD mandate agreements](https://docs.stripe.com/payments/acss-debit/custom-pad-agreement.md) 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](https://docs.stripe.com/api/mandates.md).

#### 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](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-acss_debit-mandate_options-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](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-acss_debit-mandate_options-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](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-payment_method_options-acss_debit-mandate_options-transaction_type) that defines whether transactions are for `personal` or `business` reasons.

#### Use with Invoicing and Subscriptions 

If you use ACSS Debit with [Invoicing](https://docs.stripe.com/invoicing.md) or [Subscriptions](https://docs.stripe.com/billing/subscriptions/overview.md), set [`default_for`](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-payment_method_options-acss_debit-mandate_options-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](https://www.payments.ca/sites/default/files/h1eng.pdf) 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](https://dashboard.stripe.com/account/branding).

> 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:

1. Turn off Stripe emails in [Dashboard email settings](https://dashboard.stripe.com/account/emails).
2. 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.
3. Use [`charge.pending`](https://docs.stripe.com/api/events/types.md#event_types-charge.pending) to 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](https://docs.stripe.com/webhooks.md#verify-events) and allow traffic from Stripe’s [public IP addresses](https://docs.stripe.com/ips.md).

## Stripe product support 
Checkout UIs:
  ✓ Full page (Recommended)
  ✗ Payment Links
  ✓ Embedded form
  ✗ Express Checkout Element
  ✗ In-app payments

Products:
  ✗ Managed Payments
  ✓ Billing
  ✓ Invoicing
  ✓ Adaptive Pricing
  ✗ Customer Portal
  ✓ Radar
  ✗ Terminal
  ✓ Connect

APIs:
  ✓ Checkout Sessions (Recommended)
  ✓ Payment Intents
  ✓ Payment Intents with setup_future_usage
  ✓ Setup Intents
### Integration guides 

> Subscription mode in [Checkout](https://docs.stripe.com/payments/checkout.md) isn’t yet supported. To learn about early access when this feature is available, [contact us](mailto:payment-methods-feedback@stripe.com?subject=PADs%20Subscription%20Mode%20User%20Interest) to join the waitlist.

Use one of these guides to integrate Canadian pre-authorized debit:

- [Checkout](https://docs.stripe.com/checkout/quickstart.md): Stripe’s prebuilt, hosted checkout page
- [Elements](https://docs.stripe.com/payments/quickstart.md): Stripe’s drop-in UI components
- [Invoicing](https://docs.stripe.com/invoicing/no-code-guide.md)
- [Subscriptions](https://docs.stripe.com/billing/subscriptions/overview.md)

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](https://docs.stripe.com/payments/acss-debit/accept-a-payment.md) or [Save Canadian pre-authorized debit details for future payments](https://docs.stripe.com/payments/acss-debit/set-up-payment.md).

### Product limitations 

- Checkout supports ACSS Debit in payment and setup modes. Checkout subscription mode doesn’t support ACSS 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 ACSS Debit.

### Radar support 

Radar’s default controls apply to ACSS Debit. Custom Radar settings for ACSS Debit are in private preview.

### Connect 

To use ACSS Debit in a *Connect* (Connect is Stripe's solution for multi-party businesses, such as marketplace or software platforms, to route payments between sellers, customers, and other recipients) integration, you must enable ACSS 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`](https://docs.stripe.com/connect/charges.md#on_behalf_of) because the connected account is the *merchant of record* (The legal entity responsible for facilitating the sale of products to a customer that handles any applicable regulations and liabilities, including sales taxes. In a Connect integration, it can be the platform or a connected account) for the transactions.

You can’t clone ACSS 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](https://docs.stripe.com/billing/revenue-recovery/smart-retries.md#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](https://dashboard.stripe.com/revenue_recovery/retries), [one-off invoices](https://dashboard.stripe.com/settings/billing/invoices/general), or both.

Stripe can automatically retry each failed ACSS Debit payment once, no more than 30 days after the original payment attempt. These limits differ from card retries because ACSS 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](https://docs.stripe.com/api/charges/object.md#charge_object-payment_method_details) for [Charges](https://docs.stripe.com/api/charges/object.md). 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](https://docs.stripe.com/api/events/types.md#event_types-charge.updated), [charge.succeeded](https://docs.stripe.com/api/events/types.md#event_types-charge.succeeded), and [charge.failed](https://docs.stripe.com/api/events/types.md#event_types-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 

#### 1. Select Canadian pre-authorized debit

The customer selects Canadian pre-authorized debit at checkout.

#### 2. Provide bank account details

The customer uses Stripe-hosted instant verification or manually enters their institution, transit, and account numbers.

#### 3. 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.

#### 4. 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 ACSS 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 ACSS Debit flow in desktop and mobile browsers.

For PaymentIntents integrations, handle [`payment_intent.processing`](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.processing), followed by [`payment_intent.succeeded`](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded) or [`payment_intent.payment_failed`](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.payment_failed). For Checkout, [`checkout.session.completed`](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed) means the customer completed the Checkout Session; handle [`checkout.session.async_payment_succeeded`](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.async_payment_succeeded) or [`checkout.session.async_payment_failed`](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.async_payment_failed) for the final delayed outcome. See [Accept a payment](https://docs.stripe.com/payments/acss-debit/accept-a-payment.md) and [Fulfill orders](https://docs.stripe.com/checkout/fulfillment.md).

### 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](https://docs.stripe.com/payments/payment-intents.md#dynamic-statement-descriptor) for each `PaymentIntent` with [`statement_descriptor`](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-statement_descriptor). For account-level configuration, see [statement descriptors](https://docs.stripe.com/get-started/account/statement-descriptors.md).

Only the first 15 alphanumeric characters of the descriptor appear on the bank statement. Descriptors can’t use `<`, `>`, `'`, or `"`. For example, `ROCKETRIDESLIMITED` appears as `ROCKETRIDESLIMI`. 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 ACSS Debit for connected accounts](https://docs.stripe.com/payments/acss-debit.md#enable-acss-debit). 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 ACSS 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](https://dashboard.stripe.com/settings/payment_methods). 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](https://docs.stripe.com/payments/acss-debit/accept-a-payment.md).
