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.
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.
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.
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.
Processor
Where to find the delivery log
What to look for
Stripe
Developers → Webhooks → your CheckoutJoy endpoint
Failed deliveries (non-2xx), or no endpoint at all
PayPal
Developer Dashboard → your app → Webhooks → Event logs
Missing endpoint, missing events
Paystack
Settings → API Keys & Webhooks → Webhook URL field
Empty webhook URL is the #1 cause
Razorpay
Settings → Webhooks → your endpoint → Recent deliveries
Failed deliveries, or events not selected
PayFast
Notify URL in account settings
PayFast notifies on every transaction; check the configured Notify URL
Mollie
Webhook is set per-payment; configured automatically by CheckoutJoy
If broken, it's almost always a Mollie API key issue, not webhooks
Flutterwave
Settings → Webhooks
Missing webhook URL or events
Klarna / Vipps
Order detail page in processor dashboard
These 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.
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:
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.
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.
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.
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.
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.
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.
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 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.
Your CheckoutJoy plan is not active (expired trial, failed billing). The hosted checkout returns 404 when the subscription isn't current. Check Settings → Billing.
The checkout page is not Published. Open the page in the editor and publish it.
The slug in the URL doesn't match the page's configured slug.
"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.
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:
Capture the exact warning text and the AV vendor name (Norton, McAfee, Avast, Kaspersky, etc.) from the buyer's screenshot.
Send it to CheckoutJoy support so we can log a delisting ticket with that vendor.
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.
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.
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.
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.
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).
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.
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.
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.
Supported — see the Processors section in the docs.
GoCardless
No longer supported. Removed due to low usage / high maintenance overhead.
Coinbase Commerce
Discontinued. Coinbase shut down Coinbase Commerce. A MoonPay-style replacement is being evaluated.
Lemon Squeezy
Not supported.
2Checkout
Not supported.
Airwallex
Not currently supported.
Revolut
Not currently supported (under consideration).
Nomupay / Total Processing
Not currently supported.
Trust Payments
On the roadmap, not committed.
WorldPay
Not 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.
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.
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.
Email — support@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.