Troubleshooting & FAQ

Common errors, login problems, pending purchases, and the questions support gets asked most.

This page collects the questions that come up most often in support. For processor-specific or feature-specific troubleshooting, follow the links into each feature's own docs.

"My buyer paid but nothing happened" — Pending purchases

This is the single most common operational issue. A buyer paid, the processor confirms the payment in its dashboard, but in CheckoutJoy the order is stuck in Pending status and no automation has fired (no offer grant, no tag, no confirmation email, no Kajabi/Kartra enrolment).

The root cause is almost always a missing or misconfigured webhook in the processor dashboard. Once webhooks are delivering correctly, pending orders flip to Completed automatically and the automations replay. You can fix this yourself in 5–10 minutes — you do not need to contact support.

Step 1 — Confirm it's a webhook problem

In the CheckoutJoy dashboard, open the stuck order and copy the payment reference. Open the same transaction in your processor's dashboard:

  • Is the payment marked successful in the processor? If yes → webhook delivery is the problem (continue below). If no → it's an actual payment failure, not a Pending-order issue.

Step 2 — Check the processor's webhook delivery log

Every supported processor has a dashboard view that shows whether webhooks are firing and whether CheckoutJoy is receiving them. Find your processor below and follow the link to that page — each shows you a list of recent webhook attempts, the response code CheckoutJoy returned, and a Resend button on any individual event.

ProcessorWhere to find the delivery logWhat to look for
StripeDevelopers → Webhooks → your CheckoutJoy endpointFailed deliveries (non-2xx), or no endpoint at all
PayPalDeveloper Dashboard → your app → Webhooks → Event logsMissing endpoint, missing events
PaystackSettings → API Keys & Webhooks → Webhook URL fieldEmpty webhook URL is the #1 cause
RazorpaySettings → Webhooks → your endpoint → Recent deliveriesFailed deliveries, or events not selected
PayFastNotify URL in account settingsPayFast notifies on every transaction; check the configured Notify URL
MollieWebhook is set per-payment; configured automatically by CheckoutJoyIf broken, it's almost always a Mollie API key issue, not webhooks
FlutterwaveSettings → WebhooksMissing webhook URL or events
Klarna / VippsOrder detail page in processor dashboardThese processors occasionally drop the "completed" event server-side — see processor-specific notes below

If you see failed deliveries in the log, click into one and look at the response. The response body usually explains the issue (invalid signature, unknown order, etc.). If you see no webhook attempts at all, the URL isn't configured.

Step 3 — Verify your webhook URL is set correctly

Every processor needs the CheckoutJoy notify URL configured in its webhook settings. The URL is the same format for every processor — only the p= parameter changes:

https://api.checkoutjoy.com/v1/notify?p=<ProcessorName>

Use the exact processor name (case matters). Open your processor's setup doc for the full webhook config (URL + which events to enable):

The most common misconfigurations:

  • No webhook configured at all. The URL field is empty in the processor dashboard.
  • Wrong URL. Typos in the URL or wrong p= parameter (e.g. p=stripe lowercase, or pointing at the wrong processor name).
  • Missing events. Stripe and Razorpay need specific events selected — if you only ticked "payment.success" but not the subscription/invoice events, recurring billing will silently fail.
  • Webhook disabled. Some processors auto-disable webhooks after repeated failures. Re-enable in the processor dashboard.

Step 4 — Resend the missing webhook

Once you've fixed the configuration, you don't have to wait for the next purchase to test:

  • Stripe: Developers → Webhooks → click the failed event → Resend button.
  • PayPal: Developer Dashboard → Webhooks → Simulate / Resend.
  • Paystack: Re-trigger by capturing a small test transaction, or contact Paystack support to resend a specific event.
  • Razorpay: Settings → Webhooks → event details → Retry.
  • PayFast: Resubmit the transaction notification from the PayFast dashboard under the transaction's history.
  • Flutterwave: Settings → Webhooks → log entry → Retry.

When CheckoutJoy receives the "completed" webhook, the order flips to Completed and all downstream automations replay automatically — offer grants in Kajabi, tags in Kartra/Systeme.io, course enrolment in LearnWorlds, confirmation emails, abandoned-cart cancellation, affiliate commission attribution, all of it.

Step 5 — Verify it landed

Refresh the order in your CheckoutJoy dashboard. The status should now show Completed, and the order's event timeline should show the webhook arrival and each automation firing.

For the few cases where this still doesn't work — most commonly with Klarna and Vipps, which occasionally drop the "completed" event on their side and don't provide a self-serve resend — see the processor-specific notes:

In those rare cases the order can be manually transitioned to Completed, which replays automations the same way. For every other processor, the steps above resolve the issue.

Common processor error messages

Stripe — "Continue to Payment" spins forever

Almost always invalid Stripe Secret Key. The error in logs reads Invalid API Key provided: <key-prefix>***. Re-copy your Live Secret Key from Stripe's Developers → API keys and paste it into Settings → Payment Methods → Stripe in CheckoutJoy. See the Stripe doc for full steps.

PayPal — "Expected an order ID to be passed"

Misleading error. The underlying cause is almost always a currency mismatch — the chosen currency isn't supported by PayPal for that account (the most common case is ZAR; PayPal does not support ZAR). Details on the PayPal doc.

PayFast — 505 / generic error page

Most often, the buyer's email matches the merchant account email on PayFast, which PayFast refuses. Try a different test email. If that doesn't fix it, retry — transient PayFast outages occur. Details on the PayFast doc.

Vipps — "unknown payment processor module: vipps"

This is a platform-side error — the Vipps module didn't load on CheckoutJoy. Contact support; it's resolved centrally, not by you. Details on the Vipps doc.

Mollie — Klarna or SEPA not appearing on my checkout

Mollie decides which methods to show based on the buyer's country, currency and your Mollie activation. CheckoutJoy doesn't curate that list. Full explanation on the Mollie doc.

Custom domain returns 404 on a checkout

Three reasons in order of likelihood:

  1. Your CheckoutJoy plan is not active (expired trial, failed billing). The hosted checkout returns 404 when the subscription isn't current. Check Settings → Billing.
  2. The checkout page is not Published. Open the page in the editor and publish it.
  3. The slug in the URL doesn't match the page's configured slug.

See Custom Domains troubleshooting for the full checklist.

My checkout's Terms & Conditions checkbox is unclickable, blocking all sales

Recurring bug pattern with the in-checkout T&C block. Don't wait for a fix — switch to the link-plus-checkbox pattern instead:

  1. Remove the current T&C block on the checkout.
  2. Re-add it as a short consent statement (e.g. "I agree to the Terms & Conditions") with a link out to your full T&C hosted on your own website.
  3. Re-publish the checkout.

This is the recommended pattern in any case (Hosted Checkout — Terms & Conditions best practice) and works around the block bug while you have it.

My account says "inactive" but I'm still being billed

"Inactive" disables your checkout pages from serving customers, but it does not automatically cancel your CheckoutJoy subscription. Two things are happening in parallel:

  • Account state (active / inactive) — controls whether your hosted checkouts respond to traffic.
  • Subscription billing — runs independently off your saved card.

To stop charges, the subscription itself must be cancelled — either self-serve from your dashboard or by contacting support. If you've already been billed after a confirmed cancellation request, support will refund those charges.

Buyers see "page blocked by threat protection" / antivirus warning

Consumer antivirus tools and browser extensions occasionally false-positive on CheckoutJoy checkout pages. The pages don't carry malware — these are vendor reputation/false-positive issues, not actual security problems.

What to do:

  1. Capture the exact warning text and the AV vendor name (Norton, McAfee, Avast, Kaspersky, etc.) from the buyer's screenshot.
  2. Send it to CheckoutJoy support so we can log a delisting ticket with that vendor.
  3. If you don't have a custom domain yet, set one up — running checkouts under your own subdomain reduces reliance on shared-domain reputation. See Custom Domains.

Subscription & cancellation

How do I cancel my CheckoutJoy subscription?

You can cancel from your dashboard at any time, or contact support. If you want to stop billing but keep your data so you can return later, ask support to mark your account inactive instead of deleting it.

If I cancel my CheckoutJoy subscription, will my buyers' subscriptions still be charged?

Yes. Cancelling CheckoutJoy only removes your access to the dashboard. Existing recurring subscriptions in your connected payment processor (Stripe, PayPal, PayFast, etc.) continue to bill your buyers on schedule — they're managed by the processor directly with the buyer's card.

If you also want to stop your buyers being charged, cancel each subscription explicitly before cancelling CheckoutJoy — either from the dashboard or in the processor's dashboard. Once you've lost CheckoutJoy access, those subscriptions are managed only from the processor side.

Before cancelling, export your orders to CSV from the dashboard — the CSV remains valid after cancellation.

My card failed and my account went inactive without warning

Dunning emails go to the billing email on file — which may not be the same as your login email. Check that inbox (and the spam folder). To restore access, support can re-enable the account so you can update the payment method, then the next billing cycle proceeds normally.

To prevent this, keep your billing email and login email aligned, or both in mailboxes you actively monitor.

"Pausing" a subscription isn't the same as cancelling

A pause typically only delays the next billing cycle. If you don't cancel before the cycle resumes, billing starts again. To stop billing permanently, cancel (or delete the account / mark it inactive).

How does my CheckoutJoy annual subscription renew?

Annual subscriptions paid by card renew automatically off the saved card — no manual invoice or EFT step. If you'd prefer a manual invoice + bank-transfer renewal, contact support before your renewal date.

Affiliate questions

"My referral signed up but I haven't been paid yet"

There's a 30-day waiting period before affiliate commissions become payable. The hold exists because of CheckoutJoy's refund policy — if the referred buyer refunds during the window, the commission is reversed. A purchase on the 19th of a month becomes a payable commission on the 19th of the next month, assuming the referral is still valid. See the Affiliates doc for the full explanation.

Clicks show in my affiliate dashboard but no sales are attributed

The tracking cookie isn't being read at checkout. Most often: the tracking script isn't on the landing page where the affiliate link points, or the checkout is on a completely different domain from the site. Full troubleshooting.

"Does CheckoutJoy support…?" — Payment processor support

Common questions about whether a specific processor is supported:

ProcessorStatus
Stripe, PayPal, Adyen, PayFast, Paystack, Razorpay, Mollie, Klarna, Vipps, Xendit, Flutterwave, Instamojo, Iyzico, MercadoPago, Midtrans, Coinbase, PaddleSupported — see the Processors section in the docs.
GoCardlessNo longer supported. Removed due to low usage / high maintenance overhead.
Coinbase CommerceDiscontinued. Coinbase shut down Coinbase Commerce. A MoonPay-style replacement is being evaluated.
Lemon SqueezyNot supported.
2CheckoutNot supported.
AirwallexNot currently supported.
RevolutNot currently supported (under consideration).
Nomupay / Total ProcessingNot currently supported.
Trust PaymentsOn the roadmap, not committed.
WorldPayNot currently scoped.

If the processor you want isn't in the list above and isn't visible in the dashboard's Processors / Integrations list, it isn't currently integrated. For Merchant of Record options, Paddle is the integrated MoR.

"Does CheckoutJoy support…?" — CRM and tools

ToolHow to connect
Kajabi, Thinkific, Kartra, Systeme.io, LearnWorlds, TeachableNative integrations — see Integrations
CalendlyNative integration — paid bookings gated through CheckoutJoy. Details
QuadernoNative integration — automatic sales-tax compliance
ConvertKitNative integration
ZapierNative — covers most CRMs that aren't directly integrated
HighLevel (GHL)Supported — when adding tags on a product, press Enter after typing each tag so it becomes a chip
HubSpotNo direct integration — connect via Zapier
KeapNo direct integration — connect via Zapier
DubsadoNo direct integration — connect via Zapier

Security & PCI

Does CheckoutJoy ever store card data?

No. CheckoutJoy stays in PCI SAQ-A scope — card details are entered directly into the processor's hosted fields (Stripe Elements, PayPal's hosted page, etc.) and never reach CheckoutJoy's servers. There is no server-to-server (S2S) card flow.

PCI-to-PCI token migrations (moving stored cards between processors)

Token transfers — for example moving stored cards from Stripe to a new processor — are negotiated directly between the two processors. Both must accept inbound PAN/token transfer in a compatible format. Once tokens are in the new processor, the subscriber remapping on CheckoutJoy is a separate (smaller) exercise. CheckoutJoy doesn't broker the token transfer itself.

How to get help

  • Emailsupport@checkoutjoy.com (or reply on any active support thread).
  • In-dashboard AI assistant — answers most product and account questions instantly, can create/update products, pull analytics, and handles most things normally emailed to support. Runs on Claude models via AWS Bedrock; data stays within CheckoutJoy's infrastructure (nothing sent to third parties).
  • For UI bugs, include a screenshot or short Loom video — text-only descriptions are usually too ambiguous to diagnose.
Troubleshooting & FAQ