Why checkout is not working on my app

Checkout fails for exactly four reasons, and only one of them is your account setup. Work through them in this order — unpublished app first, then the address you're on, then the price you're pointing at — before you touch your verification.

Start here: don't go re-do your identity verification. That's the single most common wrong turn, and it costs people days. Checkout refuses a purchase for exactly four reasons, and only one of them has anything to do with your account being set up. Work down this list in order.

1. Has the app been published at least once?

This is the first thing to check, and it's the most common cause. Until your app has been published, it has no real address of its own — and checkout will only run on your app's own addresses. Nothing about your payment settings can fix that; the app simply has to exist at a live address first.

So: publish your app, then try checkout. See Preview vs live: how publishing works if you're not sure whether yours is published.

2. Are you on one of your app's own addresses?

Checkout is locked to the addresses that belong to your app. Those are:

  • yourapp.overskill.app — your app's built-in address
  • Your own custom domain, once it's fully connected and working
  • Your app's own preview addresses

Anywhere else is refused. Two traps here:

  • A custom domain that isn't finished setting up doesn't count yet. If your domain is still verifying, checkout won't accept it — use your yourapp.overskill.app address until the domain is fully live. See Connecting your own domain.
  • The address has to be plain. Your app's front door — https://yourapp.overskill.app — works. A link carrying extra bits on the end (a ?tracking=... tag, a #section jump, a deep path) is not the address checkout matches against.

The reliable test: open https://yourapp.overskill.app in a fresh browser tab, away from the editor, and click Buy there. That's exactly what your customer does. See Checkout only works on your live app link.

3. Does the price you're pointing at still exist?

Your Buy button points at a specific plan. If that plan was deleted, archived, or replaced — or if the button is pointing at a plan that belongs to a different app of yours — checkout refuses it.

This is what's happening when a button that used to work suddenly stops after you reorganized your pricing. Re-check the plan in Monetize and make sure the button points at a live one.

A related version of this: a plan you created by hand in your Whop dashboard is not automatically a plan in your app. Checkout only sells plans that exist on this app in OverSkill. Create your products and prices in OverSkill — Setting prices and subscriptions — and OverSkill sets them up with the payment provider for you. Going the other direction and expecting your app to find them doesn't work.

4. Only now: is your payment setup actually unfinished?

This is the one cause that genuinely means finish your payment setup — and it's last on the list for a reason. It applies when your app has no working payment account attached to it at all.

If that's you, see Why your app cannot take payments even though you are verified — being verified for payouts and being approved to accept payments are two separate steps.

But if causes 1–3 fit your situation, your verification was never the problem. Re-submitting your ID or re-entering your business details will not turn checkout on, and you'll lose days waiting on a review you didn't need.

Which one is it? Ask us

You don't have to guess. Contact support with your live app link and we can see exactly which of the four it was, because each one is recorded distinctly. That's usually a one-message answer.

How payments are wired, in one minute

OverSkill Payments is the built-in rail, and it runs on Whop. You don't need your own payment account to start selling — turn on payments, set a price, publish, and you can take money. Whop securely processes the sale, handles tax, and handles fraud and chargebacks.

Fees: about 2.7% + $0.30 per successful domestic card sale — Whop's own rate, passed through with no OverSkill markup. Full breakdown in Payment fees explained.

Bringing your own Stripe is a separate, limited path — it is not switched on for accounts by default, so don't plan your launch around it. If routing payments through your own Stripe account is a hard requirement for you, contact support and tell us why, rather than hunting for a setting that isn't there.

Setting your currency

Your charge currency is set per price, when you create it, and it defaults to USD. Any standard 3-letter currency code works — USD, EUR, JPY and so on.

The important part: you set it when creating the price, not in a global account setting. So the way to change your default currency is to create your prices in the currency you want. Ask in your app's editor:

Create a €29/month plan for my app.

If you already have prices in the wrong currency, create the replacements in the right one and point your buttons at the new plans.

Testing without paying

You can run a complete, real purchase through your own checkout for $0 using a 100% off test code — and promo/discount codes are accepted at checkout. See Test your checkout without paying.

Was this helpful?

Thanks for the signal — it helps us improve the docs.

More in Payments and selling

Selling your app

Charge for access. Monthly subs, one-time purchases, or a marketplace listing. Set it up in minutes.

Refunds and cancellations

How to handle refund requests and what happens when a customer cancels.

Setting prices and subscriptions

Pick a price model that fits your app — monthly, yearly, one-time, tiered, or all of the above.

Still need help?

If this didn't answer your question, our team is one click away.