Charge Saved Stripe Cards in Zoho Books Off-Session

Can Zoho Books charge saved Stripe cards off-session?

Charging Saved Stripe Cards Off-Session from Zoho Books: The Complete Guide

Charging Saved Stripe Cards Off-Session from Zoho Books: The Complete Guide

Can Zoho Books charge a customer's saved card without them being present? For most businesses using Stripe, yes, but only through specific workflows. Knowing how these work and where the limits are can save hours of troubleshooting and help prevent double charges, failed payments, and compliance problems.

This guide covers the supported approaches, from native options that need no code to custom API automation, so you can choose the right path for your billing setup.


What "Off-Session" Actually Means (And Why It Matters)

Before looking at how Zoho Books works, it helps to define the term. In Stripe's model, an off-session payment is made when the customer isn't present at checkout. The card was saved earlier with explicit consent, using a SetupIntent or the setup_future_usage parameter, so the merchant can charge it later.

This is different from simply storing a card number. The customer must authorize future charges, and that authorization must be captured through a compliant flow. This distinction matters because Zoho Books can only charge cards saved through its own Stripe integration flow, not cards saved directly in the Stripe Dashboard or through a third-party system.

Keep that constraint in mind as you compare the approaches below.


At a Glance: What Zoho Books Supports

Use Case Supported Natively? Code Required?
Recurring invoice auto-charge✅ YesNo
Manual charge on a specific invoice✅ YesNo
Customer portal auto-charge setup✅ YesNo
Arbitrary charge unrelated to an invoice❌ Not documented—
Charging cards saved in Stripe Dashboard❌ Not nativelyYes (API)
Cross-system card migration❌ Not supportedRequires Stripe migration

This is a straightforward, reliable option for predictable billing. Zoho Books supports automatic charging on recurring invoices through Stripe, with no code or manual intervention.

How It Works

When Zoho Books generates a recurring invoice, it automatically charges the saved card associated with that customer. The invoice is marked paid, and the transaction is reconciled in Zoho Books without manual steps.

Setup Steps

  1. Connect Stripe under Settings → Online Payments → Payment Gateways and confirm the integration is active.
  2. Save the customer's card through Zoho's flow. There are two paths:
    • Customer-driven: The customer pays an invoice through the payment link or customer portal and opts in to authorize future automatic charges.
    • Admin-driven: Add a card directly to the customer record, if your Zoho Books edition supports it.
  3. Create a Recurring Invoice profile for the customer.
  4. In the recurring invoice preferences, enable "Create, Charge, and Send Invoices" so Zoho charges the card automatically when each invoice is due.
  5. Configure retry rules and failure notifications in the recurring invoice settings.

Supported gateways for auto-charge: Stripe, Authorize.Net, PayPal Payflow Pro, PayPal Payments Pro, CSG Forte, and GoCardless.

Pros

  • Zero code required
  • Payments are recorded and reconciled automatically in Zoho Books
  • Works well for subscription-style billing

Limitations

  • Only works for cards saved through Zoho's own payment flow
  • Best suited to scheduled or recurring billing, with less flexibility for ad hoc charges
  • Feature availability varies by Zoho Books plan and region

Approach B: Manual "Charge Saved Card" on an Existing Invoice

For a one-off invoice, if a customer already has an authorized card on file in Zoho Books, you can charge it from the invoice screen without customer interaction.

Steps

  1. Open the invoice in Zoho Books.
  2. Click Record Payment and look for a Charge Customer or Charge Card option.
  3. Select the saved card, or enter a different valid card, and confirm.

Zoho Books processes the charge through Stripe and marks the invoice paid automatically.

Important Notes

  • The option appears only if the customer has an authorized card stored in Zoho Books.
  • Menu names may vary by plan, region, and Zoho Books version.
  • If the option isn't available, the customer likely has no card saved through Zoho's flow. Send them a payment link to authorize one first.

Approach C: Custom Automation via Stripe API + Zoho Books API

When native options don't fit, such as when cards were saved outside Zoho, you need ad hoc charges, or you need more control, a custom integration may be the right choice.

Architecture Overview

The flow has four stages: trigger → charge → record → handle failures.

1. Trigger the flow

Use a Zoho Books workflow rule, a Zoho Flow automation, or a Deluge custom function to identify the right moment. For example, the invoice reaches "Sent" status, hits its due date, or a webhook fires.

2. Create a PaymentIntent in Stripe

Call Stripe's PaymentIntent endpoint with off_session=true and confirm=true:

POST /v1/payment_intents
  amount=<amount_in_cents>
  currency=<currency_code>
  customer=cus_xxx
  payment_method=pm_xxx
  off_session=true
  confirm=true

Always include an idempotency key, using the Zoho Books invoice ID, to prevent double charges if the request is retried.

3. Record the payment in Zoho Books

After a successful charge, call the Zoho Books API to record the payment:

POST /customerpayments

Apply it to the invoice and include the Stripe charge ID as the payment reference for traceability.

4. Handle failures gracefully

If Stripe returns authentication_required or a card error:

  • Send the customer a payment link so they can authenticate and pay manually.
  • Tag the invoice in Zoho Books as requiring action.
  • Use Stripe webhooks (payment_intent.succeeded, payment_intent.payment_failed) as your source of truth. Don't rely only on the synchronous API response.

Security note: Store your Stripe secret key in Zoho Connections or a secure vault like Zoho Vault. Never embed it in plain script text.

Pros

  • Works with cards saved anywhere in Stripe
  • Supports custom triggers, retries, and multi-system workflows
  • Works with Make.com or n8n for no-code or low-code orchestration if you prefer not to write Deluge

Limitations

  • Requires development work and ongoing maintenance
  • You must handle SCA failures, refunds, and fee reconciliation manually
  • Stripe-initiated payments recorded via API won't carry Zoho's native gateway metadata. Refunds may need to be issued in Stripe first, then recorded as credits in Zoho Books.

For help building this kind of custom integration, Creator Scripts' Zoho services team has experience connecting Zoho Books with external payment APIs.


Approach D: Migrate to Zoho Billing for Subscription-Style Businesses

If your off-session charges are subscriptions, involving recurring amounts, dunning logic, card-on-file management, or hosted payment pages, Zoho Billing (formerly Zoho Subscriptions) is built for this purpose.

It handles retries, failed payment recovery, proration, and customer self-service out of the box. The trade-off is migration effort and additional cost. Businesses with subscription-based billing should consider it.


Approach E: Charge in Stripe, Sync Manually (Stopgap Only)

Charge from the Stripe Dashboard, then record the payment in Zoho Books by hand, through a bank feed, or with a CSV import. This works as a temporary fallback, but it doesn't scale and adds reconciliation risk. Use it only while you implement a proper solution.


Full Comparison

Approach Effort Code Needed Handles Stripe-Saved Cards Ad Hoc Charges Auto-Reconciled
A. Recurring auto-chargeLowNoNoNo✅ Yes
B. Manual charge saved cardLowNoNoYes✅ Yes
C. API automationHighYes✅ Yes✅ YesCustom
D. Zoho BillingMediumNoNeeds migrationLimited✅ Yes
E. Manual syncLowNoYesYes❌ No

Critical Considerations Before You Build

SCA and 3-D Secure

Strong Customer Authentication (SCA) is mandatory in the EU, UK, and increasingly in India. Even a correctly saved card can fail an off-session charge if the issuing bank requires authentication for that transaction. Stripe and the issuer make this determination. Zoho Books cannot override it.

Always build a fallback: if an off-session charge fails with authentication_required, send the customer a Zoho Books payment link so they can complete authentication manually.

Off-session charges require clear, documented customer authorization. SEPA Direct Debit, ACH, and other debit methods have additional mandate rules. Make sure your payment authorization language, in your terms of service, invoices, or checkout flow, explicitly covers future merchant-initiated charges.

Card Migration

If your customers' cards currently live only in the Stripe Dashboard, not in Zoho Books, you can't simply import them. Stripe tokenizes and controls card data, and raw card numbers can't be exported. Your options are:

  1. Contact Zoho support to ask whether existing Stripe customer IDs and payment method tokens can be linked to Zoho Books customer records.
  2. Have customers re-authorize by sending them a Zoho Books payment link with the option to save their card for future charges.

Refunds and Disputes

  • Native Zoho payments: Issue refunds from within Zoho Books.
  • API-created payments (Approach C): Issue the refund in Stripe first, then record a credit note or refund in Zoho Books to keep the books balanced.

Follow this sequence to get a working solution:

  1. Check the customer record in Zoho Books for saved payment methods (customer record → payment methods or cards tab).
  2. If no card is saved via Zoho, send a payment link with the option to authorize future charges. This captures consent and saves the card through Zoho's compliant flow.
  3. For predictable billing, set up a recurring invoice with auto-charge enabled. This is the lowest-effort, most reliable path.
  4. For individual invoices, use the manual "Charge Customer" option on the invoice screen.
  5. If you need flexible charging of Stripe-saved cards, build Approach C using Zoho Flow + Stripe webhooks. Start with a single invoice type, validate the flow end to end, then expand.
  6. Contact Zoho support to confirm which features are available on your plan and in your region, and whether existing Stripe payment method tokens can be linked.

Zoho Flow: The Automation Bridge Worth Knowing

Teams that want to automate the Approach C workflow without writing full Deluge scripts can use Zoho Flow. Build trigger-based workflows that connect Zoho Books events to Stripe API calls, handle conditional logic for failures, and route notifications through a visual interface. It's useful for teams that want automation without a dedicated developer.

For more on building complex automations with Zoho Flow, see our guide to mastering Zoho Flow custom function outputs.


Key Takeaways

  • Zoho Books can charge saved Stripe cards off-session, but only cards saved through its own integration flow, not cards saved directly in Stripe.
  • Two native paths exist: automatic charging on recurring invoices and manual charging on individual invoices.
  • SCA/3DS can still cause off-session charges to fail, so build a fallback payment link flow.
  • Cards saved outside Zoho Books require a custom API integration (Approach C) or customer re-authorization.
  • Zoho Flow is the recommended low-code bridge for automating Stripe API calls from Zoho Books events.
  • Plan and region availability varies. Confirm with Zoho support before building around a specific feature.

Official References

Originally discussed in the Zoho community: Zoho Books and Stripe autocharge integration


Need help building a custom Stripe + Zoho Books integration? The Creator Scripts team specializes in Zoho automation and API integrations. Explore our Zoho services or get in touch directly to discuss your billing workflow.