Take payments in Canada without a big-bank merchant account.
CanPay Direct wires your app to Stripe, Moneris, Helcim, Square, Bambora and Paysafe using one code-first SDK. No underwriting meetings, no bank rep gatekeeping — just API keys, webhooks, and same-week go-live.
- PCI-DSS scoped via hosted fields
- Code-only. No paperwork reps.
- ●Payouts to any CA bank
1import Stripe from "stripe";2import { db } from "@/lib/db";3 4// Spin up a Canadian Stripe account in one file.5// No merchant account rep. No big-bank underwriting.6const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);7 8export async function createCheckout(sessionId: string) {9 const cart = await db.cart.find(sessionId);10 11 return stripe.checkout.sessions.create({12 mode: "payment",13 currency: "cad",14 line_items: cart.items.map((i) => ({15 quantity: i.qty,16 price_data: {17 currency: "cad",18 unit_amount: i.amountCents,19 product_data: { name: i.name },20 },21 })),22 payment_method_types: ["card", "acss_debit"],23 success_url: "https://you.ca/success?sid={CHECKOUT_SESSION_ID}",24 cancel_url: "https://you.ca/cart",25 metadata: { cart_id: sessionId, country: "CA" },26 });27}One SDK · six Canadian-ready gateways · zero bank reps
The big-bank problem
Big-bank merchant accounts were built for retail, not code.
For decades, taking card payments in Canada meant booking an appointment with a bank rep, handing over two years of financials, and waiting weeks for an underwriter to approve you. CanPay Direct skips the bank entirely: connect a regulated payment gateway with API keys, drop a few lines of code into your checkout, and you are live.
Big-bank underwriting
The legacy Canadian path
- Weeks of underwriting paperwork
- Personal guarantees & business financials
- Rolling reserves held by the bank
- Locked into a single acquirer
- Chargeback fees on top of processing
- Rate changes negotiated annually by a rep
Code-first with CanPay Direct
The way Canadian teams ship in 2026
- Sign up online with a CA business number
- API key in minutes — no human underwriter
- Funds settle to any Canadian chequing account
- Swap gateways without re-plumbing checkout
- Transparent interchange-plus pricing
- Live in test mode the same afternoon
Canadian gateway comparison
Six gateways, one SDK. Pick what fits — swap when you outgrow it.
Every gateway below is reachable from CanPay Direct without re-writing your checkout. Stripe gets you live fastest; Moneris keeps the bank-owned acquirer crowd happy; Helcim wins on transparent interchange-plus pricing. All six settle funds to any Canadian chequing account.
| Capability | StripePick Code-first · Recommended | Moneris Bank-owned legacy | Helcim Canadian challenger | Square Omnichannel | Bambora Acquirer aggregator | Paysafe Alt-payment / high-risk |
|---|---|---|---|---|---|---|
| Big-bank relationship required | No | Yes (BMO/RBC) | No | No | No | No |
| Time to first live charge | ~12 minutes | 2–4 weeks | 1–3 days | ~1 day | 3–7 days | 5–10 days |
| Setup method | API keys only | Bank rep + paper app | Online signup + KYC | Online signup | Online + underwriting | Online + risk review |
| CAD domestic card rate | 2.9% + 30¢ | 1.5–2.5%* | 0.5% + Interchange | 2.6% + 10¢ | 2.6% + 15¢ | 2.9% + 30¢ |
| Interac Online / ACSS debit | ACSS debit | Interac | Interac + ACSS | Limited | Interac | Interac + eTransfer |
| Subscriptions & invoicing | Built-in | Add-on | Built-in | Built-in | Add-on | Built-in |
| Hosted checkout (PCI scope) | Stripe Checkout | Hosted pay page | Helcim.js | Square Web Pay | Hosted tokenization | Hosted fields |
| Payouts to CA bank | Any CA bank | Same-bank only | Any CA bank | Any CA bank | Any CA bank | Any CA bank |
| Swap gateway without re-plumbing | Yes (SDK) | No | Yes | Partial | Partial | Yes |
How it works
From sign-up to first charge in an afternoon.
The traditional Canadian merchant-account onboarding takes weeks of paperwork and bank meetings. The CanPay Direct path collapses that into three steps you can finish between standup and end-of-day.
- Step 01
Create a gateway account
Sign up at Stripe, Helcim or Square with your Canada Revenue Agency business number. KYC takes minutes online — no bank rep, no underwriting appointment, no personal guarantee. Grab your publishable and secret API keys from the dashboard.
Time: 5–12 minutes · Documents: BN, ID, void cheque - Step 02
Drop in the CanPay SDK
Install the SDK, paste your keys into .env, and call createCheckout() with the cart. Hosted fields keep you out of PCI scope. One abstraction routes the same call to Stripe, Moneris, Helcim, Square, Bambora or Paysafe — swap gateways later without touching checkout code.
Time: ~30 minutes · Lines of code: under 50 - Step 03
Go live & settle to any CA bank
Flip the toggle from test to live mode. Funds settle CAD (or USD) into any Canadian chequing account on a rolling 2-to-7 day schedule depending on gateway. Webhooks reconcile orders in real time. Add subscriptions, refunds, and disputes with the same SDK.
Time: same afternoon · Payouts: T+2 to T+7
Code-first by default
One adapter, six gateways, the same five function calls.
Drop the CanPay SDK into a single API route and your checkout is gateway-agnostic forever. Switch from Stripe to Helcim when volume justifies interchange-plus pricing; add Paysafe for a high-risk product line — all without re-plumbing the cart, the webhooks, or the reconciliation pipeline.
Stripe Checkout
Stripe Checkout in CAD with Interac-eligible ACSS debit. Two API calls, zero PCI scope, and funds land in any Canadian chequing account on a T+2 rolling basis.
Try this in your repo →1import Stripe from "stripe";2 3const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!);4 5export async function POST(req: Request) {6 const { cartId, items, email } = await req.json();7 8 const session = await stripe.checkout.sessions.create({9 mode: "payment",10 currency: "cad",11 customer_email: email,12 payment_method_types: ["card", "acss_debit"],13 line_items: items.map((i: { name: string; cents: number; qty: number }) => ({14 quantity: i.qty,15 price_data: {16 currency: "cad",17 unit_amount: i.cents,18 product_data: { name: i.name },19 },20 })),21 success_url: "https://you.ca/thanks?sid={CHECKOUT_SESSION_ID}",22 cancel_url: "https://you.ca/cart",23 metadata: { cart_id: cartId, country: "CA" },24 });25 26 return Response.json({ url: session.url });27}What you ship with
Everything a Canadian checkout needs, none of the bank overhead.
The CanPay SDK ships with the building blocks every Canadian commerce team rebuilds anyway — subscriptions, webhooks, reconciliation, fraud, multi-currency, and payouts. The difference is you can pick the gateway that fits each product line instead of being locked into one acquirer.
Hosted checkout fields
Tokenized card inputs served from each gateway's PCI-compliant iframe. You never touch raw PANs, so your SAQ-A stays under 30 questions and your audit stays small.
Subscriptions & billing
Recurring CAD billing with proration, dunning, retries, and metered usage. Stripe Billing and Helcim recurring are first-class; Moneris and Bambora ship a recurring add-on.
Fraud & 3-D Secure
Stripe Radar, Helcim Fraud Defender, and 3-D Secure 2 (SCA-ready) for European expansion. Liability shift is automatic on supported cards.
Unified webhooks
One normalized event stream across every gateway. payment.succeeded, payment.failed, refund.created, payout.paid — your order pipeline never branches on the source.
Multi-currency CAD / USD
Charge customers in CAD or USD with automatic settlement conversion. Stripe and Helcim support multi-currency settlement; Moneris requires a separate USD facility.
Payouts to any CA bank
Funds settle into any Canadian chequing account on a T+2 to T+7 schedule depending on gateway. No need to bank with the acquirer — Moneris is the only exception.
Refunds, partials & disputes
Full and partial refunds, dispute evidence submission, and chargeback tracking are all in the SDK. Dispute webhooks fire before the chargeback window closes.
Apple Pay & Google Pay
Tap-to-pay on iOS, Google Pay on Android, and Interac Online where supported. The SDK auto-detects device capabilities and surfaces the right wallets.
PCI-DSS scope reduction
Stay at SAQ-A with hosted fields, or SAQ-A-EP if you self-host. We hand you a pre-filled SAQ template per gateway to satisfy your QSA.
Interchange-plus pricing
Helcim and Stripe publish rates publicly. For high volume we recommend Helcim's interchange-plus; for speed-to-market Stripe's flat rate wins.
Reconciliation events
Every payout is decomposed into its constituent charges, refunds, and fees before it hits your ledger. Sync to QuickBooks, Xero, or Sage Intacct.
Gateway portability
Swap acquirers without re-plumbing checkout. The CanPay adapter exposes the same five function calls across every supported gateway — your cart code is sticky, not your acquirer.
Pricing
Pay for the SDK, not the bank rep.
No setup fees, no monthly minimums, no rolling reserves. You always pay the gateway's processing fee directly — CanPay Direct is a thin SDK layer with transparent per-tier pricing in Canadian dollars.
Starter
For your first Canadian checkout
Plus gateway fees (e.g. Stripe 2.9% + 30¢)
Start free- Stripe, Helcim or Square integration
- Hosted checkout fields (SAQ-A)
- Up to 1,000 charges / month
- Unified webhook router
- CAD & USD settlement
- Community Discord support
Growth
When volume justifies interchange-plus
Per month, billed CAD. Gateway fees pass through.
Start 14-day trial- All six gateways (Stripe, Moneris, Helcim, Square, Bambora, Paysafe)
- Subscriptions & dunning
- Up to 50,000 charges / month
- Refunds, partials, dispute evidence
- Reconciliation to QuickBooks / Xero / Sage
- Email + chat support, 1 business day SLA
Scale
For teams running multiple product lines
Custom. Volume-based, annual contract.
Talk to us- Unlimited charges & gateways
- Dedicated gateway routing per product line
- Multi-entity & multi-currency settlement
- PCI-DSS review & pre-filled SAQ template
- On-call engineer + 1-hour SLA
- Quarterly rate optimization review
Frequently asked
Straight answers about Canadian payments, no bank-speak.
We get these questions from Canadian founders every week. If yours is not here, our team replies within one business day on Growth and Scale plans.
Launch Canadian payments this afternoon.
Sign up for a free Starter account, drop the SDK into a single API route, and take your first live charge before end-of-day. No bank rep, no underwriting meeting, no merchant account required.
No credit card required · No setup fees · Cancel anytime