Virtual Terminal

Take credit card payments straight from your Kantivo desktop accounting software. Useful for phone payments, counter charges, and any time a self-serve checkout link isn't the right fit.

Gateway Setup

Kantivo's virtual terminal runs on top of your active Stripe gateway. If you haven't connected one yet:

  1. Go to Settings → Payment Gateway Settings
  2. Click Add Gateway and pick Stripe
  3. Paste in your Stripe Publishable Key and Secret Key from dashboard.stripe.com/apikeys
    • Start with test keys (pk_test_… / sk_test_…) while you get familiar with the workflow
    • Switch to live keys (pk_live_… / sk_live_…) only when you're ready for real charges
  4. Click Test Connection to confirm Kantivo can talk to Stripe
  5. Map a deposit account (where net proceeds land) and a fee expense account (where merchant fees post)
  6. Save the gateway

Once the gateway is active, you'll see a Virtual Terminal entry under the Payments menu in the Kantivo desktop app.

Test cards: While you're in test mode, use 4242 4242 4242 4242 (any future expiry, any CVC) to simulate a successful charge. Stripe also publishes test cards for declines and insufficient funds — see the troubleshooting section below.

Opening the Terminal

Inside Kantivo, navigate to Payments → Virtual Terminal. The terminal screen has three areas:

Charging a Card

To run a card through the virtual terminal:

  1. Pick a customer from the dropdown (or leave blank for a one-off charge)
  2. Optionally pick an invoice to apply the payment to
  3. Enter the amount (auto-filled when an invoice is selected)
  4. Enter the card details — number, expiry, CVC. These fields are Stripe Elements, which means the card data goes straight to Stripe and never touches Kantivo
  5. Glance at the fee preview to confirm the merchant fee and net deposit
  6. Click Charge

Kantivo sends the card token to Stripe, Stripe runs the charge, and the result comes back to Kantivo within a second or two. On success, the payment is recorded, the invoice (if selected) is marked paid, and the fee expense is posted automatically.

Applying to an Invoice

Linking the charge to an invoice keeps your accounts receivable accurate:

Charging Without an Invoice

If there's no invoice to apply to, leave the invoice field blank. The payment is recorded against the customer as a credit on account, which you can later apply manually or use to issue a refund. This is common for:

Fees & GL Posting

The fee preview shows three numbers:

FieldWhat it represents
Charge amount What the customer's card is debited for (the gross amount)
Merchant fee Calculated from your gateway's percent + flat fee setting (e.g. 2.9% + $0.30)
Net deposit What Stripe will eventually pay out to your bank account

When the charge succeeds, Kantivo posts the following journal entry automatically:

Charge History

The Recent Payments feed on the terminal screen records every charge you've put through. Each row shows:

Clicking any row opens the full payment detail, including the linked journal entry and (if applicable) the invoice it was applied to.

Refunds & Voids

Open a successful charge from Recent Payments and use Refund (after Stripe has settled) or Void (before settlement). Kantivo will:

Troubleshooting

"No gateway configured"

If the terminal screen shows this message, the gateway either isn't saved, isn't active, or the API keys aren't valid:

  1. Open Settings → Payment Gateway Settings
  2. Confirm at least one Stripe gateway exists and is marked Active
  3. Click Test Connection. A green check means the keys are valid; a red message means double-check them against your Stripe dashboard

Charge Declined

When a card is declined, Stripe returns a reason and Kantivo surfaces it on the terminal screen. The most common reasons:

No journal entry is created for declined charges — there's nothing to clean up.

Useful Stripe test cards (test mode only):
  • 4242 4242 4242 4242 — succeeds
  • 4000 0000 0000 0002 — declined (generic)
  • 4000 0000 0000 9995 — declined (insufficient funds)
Any future expiry and any 3-digit CVC.
PCI note: The virtual terminal is designed so card numbers, expiry dates, and CVCs are entered into Stripe-hosted fields and never reach the Kantivo desktop app or its database. Do not store card numbers elsewhere — typing the number into a memo or notes field defeats the protection and pulls your environment into PCI scope.