Accept a Canadian pre-authorized debit payment
Build a custom payment form or use Stripe Checkout to accept payments with pre-authorized debit in Canada.
Checkout
Direct API
Accepting Canadian pre-authorized debit (PAD) payments on your website consists of creating an object to track a payment, collecting payment method information and mandate acknowledgement, submitting the payment to Stripe for processing, and verifying your customer’s bank account.
Note
Pre-authorized debit in Canada is a delayed notification payment method, which means that funds aren’t immediately available after payment. A payment typically takes 5 business days to arrive in your account.
Determine compatibility
To support Canadian pre-authorized debit payments, a Checkout Session must satisfy all of the following conditions:
- You can only use one-time line items ( subscriptions aren’t yet supported in Checkout).
- Prices for all line items must be expressed in Canadian or US dollars (currency code cad or usd ).
- Prices for all line items must be in the same currency. If you have line items in different currencies, create separate Checkout Sessions for each currency.
Presentment currency
Most bank accounts in Canada hold Canadian dollars (CAD), with a small number of accounts in other currencies, including US dollars (USD). It’s possible to accept PAD payments in either CAD or USD, but choosing the correct currency for your customer is important to avoid payment failures.
Unlike many card-based payment methods, you might not be able to successfully debit a CAD account in USD or debit a USD account in CAD. Most often, attempting to do so results in a delayed payment failure that takes up to five business days.
To avoid these failures, it’s safest to take PAD payments in CAD unless you’re confident your customer’s account accepts USD debits.
Accept a payment
Note
Build an integration to accept a payment with Checkout before using this guide.
Enable Canadian pre-authorized debit as a payment method
When creating a new Checkout Session, you need to:
- Enable the related setting Direct Debit in your Dashboard. Stripe automatically displays the related setting Direct Debit to eligible customers using dynamic payment methods . If you currently specify payment _ method _ types , see the migration guide .
- Make sure all your line _ items use the cad currency.
- Specify additional payment_method_options parameters to describe your transaction. Learn more below.
Payments must specify a payment schedule for customers to authorize when checking out. See PAD Mandates for details on how to choose the right mandate options for your business:
| Parameter | Value | Required |
|---|---|---|
payment_method_options[acss_debit][mandate_options][payment_schedule] | The mandate payment schedule. Accepted values are interval, sporadic, or combined. See the PAD Mandates overview to help you select the right schedule for your business. | Yes |
payment_method_options[acss_debit][mandate_options][interval_description] | Text description of the payment schedule. See the PAD Mandates overview to help you construct the right interval description for your business. | Required if payment_schedule value is interval or combined |
payment_method_options[acss_debit][mandate_options][transaction_type] | The type of transactions you’ll use the mandate for, either personal (if the transactions are for personal reasons) or business (if the transactions are for business reasons). | Yes |
Create a Checkout session
Command Line
Select a language
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
During the Checkout session, the customer is presented with a UI modal that handles bank account details collection and instant verification with an optional fallback to verification using micro-deposits. In the uncommon case that the customer opts for micro-deposit verification, Stripe automatically sends two small deposits to the provided bank account which take 1-2 business days to appear on the customer’s online bank statement. When the deposits are expected to arrive, the customer receives an email with a link to confirm these amounts and verify the bank account with Stripe. Once completed, the payment begins processing.
Fulfill your orders
After accepting a payment, learn how to fulfill orders.
Test your integration
Receive micro-deposit verification email
To receive the micro-deposit verification email in a sandbox:
- In Checkout, provide an email in the form of {any _ prefix}+test _ email@{any _ domain} .
- Click Pay .
- Click Agree in the Link your bank account to pay modal.
- Select Use micro-deposit verification .
- Use one of the following test account numbers.
- Click Confirm .
- Click Agree to accept the Pre-authorized debit agreement .
Test payment method tokens
Use test payment method tokens to test your integration without needing to manually enter bank account details. These tokens bypass the bank account collection and verification steps.
| Token | Scenario |
|---|---|
pm_acssDebit_success | The payment succeeds immediately after the mandate is accepted. |
pm_acssDebit_noAccount | The payment fails because no account is found. |
pm_acssDebit_accountClosed | The payment fails because the account is closed. |
pm_acssDebit_insufficientFunds | The payment fails due to insufficient funds. |
pm_acssDebit_debitNotAuthorized | The payment fails because debits aren’t authorized. |
pm_acssDebit_dispute | The payment succeeds but triggers a dispute. |
Test account numbers
Stripe provides several test account numbers you can use to make sure your integration for manually-entered bank accounts is ready for production. All test accounts that automatically succeed or fail the payment must be verified using the test micro-deposit amounts below before they can be completed.
| Institution Number | Transit Number | Account Number | Scenario |
|---|---|---|---|
000 | 11000 | 000123456789 | Succeeds the payment immediately after micro-deposits are verified. |
000 | 11000 | 900123456789 | Succeeds the payment with a three-minute delay after micro-deposits are verified. |
000 | 11000 | 000222222227 | Fails the payment immediately after micro-deposits are verified. |
000 | 11000 | 900222222227 | Fails the payment with a three-minute delay after micro-deposits are verified. |
000 | 11000 | 000666666661 | Fails to send verification micro-deposits. |
000 | 11000 | 000777777771 | Fails the payment due to the payment amount causing the account to exceed its weekly payment volume limit. |
000 | 11000 | 000888888881 | Fails the payment due to the payment amount exceeding the account’s transaction limit. |
To mimic successful or failed bank account verifications in a sandbox, use these meaningful amounts for micro-deposits:
| Micro-deposit Values | Scenario |
|---|---|
32 and 45 | Successfully verifies the account. |
10 and 11 | Simulates exceeding the number of allowed verification attempts. |
| Any other number combinations | Fails account verification. |
Handle refunds and disputes
The refund period for Canadian pre-authorized debit is up to 180 days after the original payment.
Customers can dispute a payment through their bank up to 90 calendar days after the original payment and there is no appeals process.
Learn more about Canadian pre-authorized debit disputes.
Additional considerations
Microdeposit verification failure
When a bank account is pending verification with micro-deposits, it’s possible for the customer to fail to verify for two reasons:
- The micro-deposits failed to send to the customer’s bank account (usually indicates a closed/unavailable bank account or incorrect bank account number).
- The customer made three failed verification for the account. Exceeding this limit means the bank account can no longer be verified or reused.
- The customer failed to verify the bank account within 10 days.
If the bank account fails verification for one of these reasons, you can handle the checkout.session.async_payment_failed event to contact the customer about placing a new order.
