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.appaddress 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#sectionjump, 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.
What to read next
- Checkout only works on your live app link — cause 2 in detail
- Why your app cannot take payments even though you are verified — cause 4 in detail
- Test your checkout without paying — prove the whole flow for $0
- Payment fees explained — what each sale costs you
- Setting prices and subscriptions — creating the plans your buttons point at