You sent a customer a payment link, and now they’re telling you it doesn’t work. Maybe the page won’t load, maybe it says the link has expired, or maybe they get all the way to the end and the payment fails. It feels urgent because it is: someone wants to pay you and can’t.
The good news is that almost every “payment link not working” problem falls into a handful of causes, and you can usually tell which one in a couple of minutes. This guide covers Stripe Payment Links, PayPal.Me links and PayPal’s business payment links, in the order you should check them.
First, work out which case you’re in
Ask the customer exactly what they see, or better, a screenshot. Then match it to one of these:
- The page doesn’t load at all, or shows a “not found” error: the link was probably copied or pasted incorrectly (step 1).
- Stripe shows an expired or deactivated page: the link was turned off or hit its payment limit (step 2).
- The page loads but no real money ever arrives: you may have shared a test-mode link (also step 2).
- PayPal shows “something went wrong” or the payment is denied: your account may have a restriction (step 3).
- The payment goes through but sits as pending, or shows a different currency or amount: a currency setting is the likely cause (step 4).
- It works for you but not for the customer, especially when they tapped it inside Instagram, WhatsApp or Facebook: an in-app browser issue (step 5).
- The checkout loads fine but the card is declined: the customer’s bank or fraud screening said no (step 6).
1. Check the link itself was copied correctly
Start with the boring cause, because it’s the most common. Links get cut off when they wrap in a message, pick up a trailing full stop or bracket, or lose a character when someone retypes them from a screenshot.
Open the exact link you sent, from the same message, on your own phone. If it fails for you too, copy a fresh one: in Stripe, use the copy icon next to the link on the Payment Links page; in PayPal, copy it from your saved links and buttons. Stripe links normally start with buy.stripe.com unless you have set up your own custom domain.
For PayPal.Me, the format is paypal.me/ followed by your name. PayPal says these names contain only letters and numbers, so a link with spaces, dashes or other symbols in the name part is wrong. The name isn’t case sensitive, and your exact link is shown in your PayPal profile settings. PayPal also says a PayPal.Me name can’t be changed once created, so an old link you think you “renamed” may not exist.
2. Stripe link deactivated, limited or in test mode
If the customer sees a Stripe page saying the link is no longer available or has expired, the link has been deactivated. Stripe’s docs say that after you deactivate a payment link, customers can no longer use it to make a purchase and are redirected to an expiration page. QR codes for that link go to the same expiration page.
A link can also switch itself off. When you create a link you can tick “Limit the number of payments.” Stripe says that once the link reaches that limit it automatically deactivates, and anyone who opens it afterwards sees the default deactivation message or a custom message you set. This catches out sellers who set a limit of one for a single client and later reuse the same link.
To fix it, open the link in your Stripe Dashboard and check its status and payment limit. Stripe says a deactivated link can be made active again, or you can simply create a new link and send that. Payment links can’t be deleted, only deactivated, so old links may still be sitting in your list.
Also make sure you didn’t share a test link. Stripe has a separate test environment so you can try things without real money. A link created while your Dashboard is in test mode or a sandbox looks almost identical to a live one, but Stripe’s example test links contain “test_” in the address, and test environments don’t move real money through banks or card networks.
If your link has “test” in it, or the payment never appears in your live Dashboard, switch the Dashboard to live mode and create the link there. Because test mode never touches real card networks, a test link will never pay you, no matter what card the customer uses.
3. Your PayPal or Stripe account has a restriction
If the link opens but payments are refused, look at your own account before blaming the customer. PayPal’s developer troubleshooting guide for payment links says account restrictions can prevent customers from completing payments, and recommends logging in to check for notifications or required actions, then contacting PayPal support if needed.
For a limited PayPal account, PayPal says to go to the Resolution Center or click the bell icon on your dashboard, and complete the steps listed there, which often means uploading documents. Only send what PayPal asks for. Be wary of emails about a “limited account” that don’t match anything in your Resolution Center; PayPal warns these can be phishing.
PayPal.Me has one more switch: PayPal says you can turn off “My Link,” which prevents people from sending you money through it. If you turned it off at some point, turn it back on. Also note that PayPal’s payment links and buttons are available only for Business accounts.
On Stripe, check your Dashboard for any banner or email asking for more information about you or your business. Stripe can pause an account’s ability to take payments when required verification details are outstanding, and the fix is to supply what it asks for.
4. Currency, country and amount problems
Currency mismatches cause a surprising number of “it didn’t work” messages, especially with international customers.
On PayPal, your Payment Receiving Preferences can block payments sent in a currency you don’t hold, or from customers in other countries. If a payment arrives in a currency you don’t hold and isn’t auto-converted, it can sit pending until you accept it. Check the payment in your account and adjust these preferences if they’re stricter than you need. PayPal also notes that payment methods such as Pay Later and Venmo depend on each customer’s country, so a customer abroad may see fewer options than you do.
On Stripe, Adaptive Pricing is always on for Payment Links, so customers in many countries see the price converted into their local currency. That’s helpful, but it can lead to a customer saying “the amount is wrong” when it’s simply shown in their currency. If you collect shipping addresses, only the countries you selected appear in the country list, so a customer in an unlisted country can’t finish checkout.
If the amount itself is wrong, check how the link was set up. With PayPal.Me you can add an amount, and optionally a currency code, to the end of the link, so an old link may still carry an old price. With Stripe’s “customers choose what to pay” links, you can set a minimum and maximum, and Stripe’s default maximum is 10,000.00 USD unless you ask Stripe support to raise it. Fixed prices come from the product attached to the link, so update the product or create a new link.
5. In-app browsers inside Instagram, WhatsApp and TikTok
When a customer taps a link inside a social or messaging app, it often opens in that app’s own built-in browser rather than Safari or Chrome. In general, these built-in browsers can block pop-ups, struggle with bank security checks such as card verification screens, and lose the customer’s saved logins.
Stripe notes that whether customers see Apple Pay or Google Pay depends on their device and the browser they’re using, so wallet buttons may be missing in an in-app browser even though they show up for you.
The fix is simple: ask the customer to tap the menu (usually three dots) and choose “Open in browser” or “Open in Safari/Chrome,” then try again. If they’re stuck, they can copy the link and paste it into their normal browser. Ad blockers and strict privacy extensions can also interfere, so a private window with extensions off is a good second test.
6. The card or payment was declined
If the checkout page works but the payment fails at the end, the link isn’t the problem. Stripe explains that payments fail for three main reasons: the customer’s card issuer declines the charge, Stripe’s fraud screening (Radar) blocks a high-risk payment, or there’s an integration error.
Issuer declines are decided by the customer’s bank, based on things like spending patterns, balance and card details. Stripe passes on the decline reason it receives, and you can see it on the failed payment in your Dashboard. The usual fix is for the customer to contact their bank, check the card details and security code, or try another card or payment method. If Radar blocked a payment you know is genuine, Stripe lets you add it to an allow list so future matching payments aren’t blocked; it doesn’t retry the original one, so the customer needs to pay again.
How to stop this happening again
Most of these problems can be caught before a customer ever sees them. Test every new link yourself from your phone, inside the app you’ll share it in, before sending it out. Create links in live mode only, use Stripe’s payment limit only when you mean it, and set a custom deactivation message that tells customers how to reach you.
Review PayPal’s Payment Receiving Preferences once so foreign payments aren’t silently blocked or left pending, and answer Stripe or PayPal verification requests quickly so your account stays able to take payments. When you send a link in a chat, add a short line asking the customer to open it in their browser if it doesn’t load inside the app.
It also helps to have more than one way for customers to pay, so a single broken link doesn’t stall sales while you sort out a restriction or a setting. OneSol gives you a free link-in-bio page for your products, links and booking forms, and Pro ($9 a month, $1 for the first month) lets you take payments straight into your own Stripe, PayPal, Razorpay or Square account with no OneSol commission. It won’t fix a problem on your Stripe or PayPal account itself, but it gives customers one stable page to come back to with every way to pay.