Payment Link QR Codes on Snapkit (PayPal.me, Stripe Checkout URLs in the URL Tab)

Snapkit has no Payment or PayPal tab. Encode a PayPal.me, Stripe Payment Link, or other hosted checkout HTTPS URL in the URL tab: URL shapes, static vs dynamic when prices change, iPhone vs Android, and mistakes that charge the wrong account.

Andrei Haiducu
17 min read

Snapkit’s homepage has URL, Text, WiFi, Contact, SMS, Email, and Phone. There is no Payment tab, no PayPal tab, and no Stripe builder. A “scan to pay / donate / settle this invoice” QR is a URL QR. You paste a finished https:// payment or checkout address (PayPal.Me, a Stripe Payment Link, or another hosted checkout URL your dashboard already copied), download the PNG, and the camera opens that HTTPS link. The payment processor does the rest.

This page is the payment-link URL construction and the Snapkit wiring. It is not a rewrite of Bitcoin wallet codes (bitcoin: / ethereum: URI schemes, not fiat checkout pages), URL vs Text (tab choice, not destination strings), WhatsApp wa.me, calendar templates, or Google Maps location. Those never teach paypal.me/{handle}, buy.stripe.com, or why an expired Payment Link still makes a scannable PNG. It is the checkout counterpart to that URL-tab destination series.

Four-step flow: Snapkit URL tab encodes a payment HTTPS link, camera scans the PNG, the checkout URL opens, PayPal or Stripe shows pay or donate

What the QR actually encodes

A payment-link code on this product is a website URL. The printed modules are not a Snapkit merchant account, a card vault, an invoice object, or a fee Snapkit collected. They are the same kind of URL payload as any other URL-tab code.

On scan, the camera treats it like any other https:// link. If the destination is PayPal.Me or a Stripe Payment Link, the OS usually hands that host to the PayPal / Stripe app (when installed and when Universal Links / App Links claim the host) or to the browser. The person still chooses a payment method and taps Pay. That is the same honesty as Snapkit’s SMS tab: the QR starts a checkout, not a completed charge.

Snapkit does not process the payment, confirm the amount, or show you who paid. There is no Snapkit checkout fee and no payment analytics on a static PNG. We only encode the string you pasted.

A bitcoin: address is a different job. That construction lives on Bitcoin wallet QR codes. Do not print a wallet URI and label it “card / PayPal.”

Test the live URL in a browser before you print. A deactivated Stripe Payment Link still makes a scannable PNG.

Exact URL formats

Snapkit’s URL field encodes whatever you typed. There is no silent https:// prefix and no PayPal or Stripe formatter. Paste the finished URL, including the scheme. Formats vary by processor and by dashboard. Prefer the Copy link your processor already built over a slug you typed from memory.

PayPal.Me (paypal.me / www.paypal.me)

PayPal’s documented PayPal.Me help: share paypal.me/{YourName}. Anyone can open it, type an amount, and send. You do not have to expose your email. Copy the handle from PayPal.Me or Account settings — do not invent one.

Open amount (what you want on a tip jar):

https://paypal.me/ExampleCafe

https://www.paypal.me/ExampleCafe is the same product. Include https://.

Suggested amount. PayPal documents a path suffix. paypal.me/ExampleCafe/25 requests 25.00 in that account’s default currency.

https://paypal.me/ExampleCafe/25

Suggested amount plus currency code. PayPal’s own example shape is {amount}{CURRENCY} with no extra slash (their help uses …/25AUD). Some corridors cannot send every currency. Confirm the sender can pay in the code you printed.

https://paypal.me/ExampleCafe/25USD

Handles are alphanumeric, no dashes or spaces, max 20 characters, and cannot be renamed once created. A printed paypal.me/OldBrand does not follow a rebrand. Hide the link in PayPal if you must stop new sends — the PNG will still decode that URL.

Other PayPal HTTPS pages (Donate buttons with hosted_button_id=, invoice emails, checkout.paypal.com) are also URL-tab jobs if you copied a full https:// address. Do not reconstruct query keys from memory. Copy from the dashboard, open the URL logged out, then paste.

Stripe Payment Links (buy.stripe.com and siblings)

Stripe Payment Links are hosted Checkout pages. The Dashboard Copy control (Payment links) emits the public URL. Stripe’s API url field is the same string.

Common live / test hosts:

https://buy.stripe.com/…
https://buy.stripe.com/test_…

test_ in the path is Stripe’s documented test-mode prefix. Do not print a test link on a counter. A test Payment Link still scans; the charge never hits a real card.

Stripe also documents other hostnames from Payment Link submit_type: donate.stripe.com (donate), book.stripe.com (book). Subscribe / pay still use buy.stripe.com. A custom domain you configured in Stripe (pay.example.com/…) is valid if that is the URL the Dashboard copied. Do not invent the token after the slash.

Optional query keys Stripe documents on Payment Links (prefilled_email, prefilled_promo_code, client_reference_id, UTM pairs) are already encoded when you copy from the Dashboard parameter dialog. Extra tracking on a long custom-domain path densifies the QR. Snapkit warns near 1,000 characters and blocks download past about 1,200.

Stripe Checkout Session URLs (checkout.stripe.com/c/pay/… and similar) are usually one-time and expire. Do not print a Session URL you opened in a browser tab. Payment Links are the reusable product.

Deactivate a Payment Link in Stripe and the PNG still scans — the page then says the link is no longer active. That is a processor setting, not a Snapkit bug.

Generic hosted checkout HTTPS

Square Payment Links, Shopify checkout / draft-order links, SumUp, and similar hosted pages are the same Snapkit job: URL tab, exact https:// string. Hosts and path shapes change. There is no universal {vendor}.me/{sku} we can invent here.

You type in the URL tabWhat the PNG holdsWhat you wanted
Copied https://paypal.me/ExampleCafeThat exact stringOpen-amount PayPal.Me
https://paypal.me/ExampleCafe/25That exact stringPayPal suggested 25 in default currency
https://paypal.me/ExampleCafe/25USDThat exact stringPayPal suggested 25 USD (if the corridor allows it)
Copied https://buy.stripe.com/…That exact stringStripe Payment Link checkout
Copied https://donate.stripe.com/… or https://book.stripe.com/…That exact stringStripe donate / book host
Copied https://pay.example.com/… (your Stripe custom domain)That exact stringSame Payment Link, branded host
Copied Square / Shopify / other hosted https://…That exact stringThat processor’s checkout
paypal.me/ExampleCafe (no scheme)Bare hostOften shown as text; one brand may guess a site
paypal:// or stripe://Custom schemeMany cameras ignore it; no web fallback
bitcoin:bc1q… in URL or TextWallet URICrypto app, not fiat checkout — Bitcoin guide
Payment URL pasted into TextCharactersWords on screen, maybe a chip

Build query values with a real encoder if you add them by hand. Do not leave raw spaces, &, or # in a suffix you typed. A copied Dashboard link is already encoded; do not “clean” it.

How to copy the link (then paste into Snapkit)

PayPal.Me. Sign in at PayPal.Me or open Account settings → PayPal.Me profile → copy the https://paypal.me/… link. Add /25 or /25USD only if you want that suggestion on every scan. Open the URL in a private window. Confirm the display name and the currency before you leave the desk.

Stripe Payment Link. Dashboard → Payment links → the link → Copy. Confirm it is a live buy.stripe.com (or donate / book / custom-domain) URL, not buy.stripe.com/test_…. Open it logged out. Confirm the product title, amount, and currency.

Other processors. Share / Copy from that dashboard. If the clipboard dropped https://, type it back.

Then, on snapkit.store:

  1. Choose URL. Not Text. Not Email. Not Phone.
  2. Paste into Website URL. Keep https://.
  3. Leave Make this QR Code Dynamic (Editable) unchecked unless you have a reason to retarget (next section).
  4. Download PNG. Do not screenshot the 256 px preview.

The generator does not rewrite payment URLs and does not talk to PayPal or Stripe.

URL tab vs Text vs a Bitcoin URI

Four things look like “put the payment in the code.” Only one is the Snapkit path for fiat checkout.

URL tab with a PayPal.me or Stripe HTTPS link opens checkout; Text shows the URL as words; bitcoin: is a different job

JobSnapkit tabEncoded payloadOpensDynamic toggle?
Fiat pay / donate / invoice pageURLhttps://paypal.me/…, https://buy.stripe.com/…, or another hosted checkout HTTPS URLBrowser or payment app checkoutYes — URL only
Show the link as wordsTextExact charactersOn-screen textNo
Crypto wallet receiveURL or Text with a wallet URI / addressbitcoin:… or a raw addressWallet app (if it claims the scheme)URL only, and the hop is still Snapkit → URI
Email the bookkeeperEmailmailto:Mail draftNo

Putting https://paypal.me/… in Text does not create a Payment tab Snapkit does not have. Some cameras notice a URL inside the paragraph and offer a chip. Treat that as a bonus. URL vs Text is the tab choice; this page is the destination string.

Putting a wallet address in Text is the Bitcoin job. A customer who expected Apple Pay / card checkout will not open a crypto wallet from that PNG.

Dynamic is not a fourth payment format. It is a short-link wrapper around the same HTTPS destination. The homepage checkbox exists only on URL. Static generation stays in the browser. Dynamic encodes https://snapkit.store/r/…, then a 302. Details: static vs dynamic and how Snapkit generates codes.

Static vs Dynamic when prices change

Static PNGDynamic /r/
What the modules holdThe payment HTTPS URL itselfSnapkit short link
Stable donate handle (paypal.me/ExampleCafe)Short; pattern stays looseAlso short
Long Stripe URL + UTM / prefillsPattern densifies; print largerShort /r/ stays loose
Change the price or campaign after printReprint, or change the processor link if that product allows itRetarget the Snapkit destination
Works if Snapkit is unreachableYesNo — scan never leaves /r/
Free trial expiredn/aLands on /expired
First URL the camera openspaypal.me, buy.stripe.com, or your checkout hostsnapkit.store
App handoff into PayPal / StripeMore reliable when the first host is already theirsExtra hop; more browsers in the middle
Scan countsNo (this product does not invent pixel analytics on static files)Yes, on a paid dynamic plan
Payment confirmation / feesProcessor onlyStill processor only

Static is the default for a tip jar, a printed donate poster, or a Payment Link whose amount will not move. The PNG is the checkout URL. If Snapkit is down, the sticker still works.

Dynamic is the honest choice when you rotate seasonal prices, swap a sold-out SKU, or replace an invoice URL without reprinting the table tent — and you have tested the /r/ hop on both phone brands. The print then depends on Snapkit being reachable and the dashboard still pointing at a live checkout URL.

Do not share one Dynamic short link across “pay the invoice” and “see the menu.” Retargeting the dashboard to a lunch special is how a counter sticker stops taking money.

A Stripe Payment Link you edit in Stripe (price, product, active flag) can change what the same buy.stripe.com/… URL shows. That is processor-side, not Snapkit Dynamic. Static Snapkit + an edited-in-place Payment Link is enough when only the Stripe page changes and the public URL stays the same. Use Snapkit Dynamic when the string must change (new host, new slug, different processor).

After the scan: iPhone vs Android

The PNG holds a URL. The OS decides what happens next. Camera apps are not identical. PayPal documents that senders do not need the PayPal app — the HTTPS page works in a browser. Stripe Payment Links are hosted Checkout in a browser; the Stripe app may claim buy.stripe.com when installed.

SituationTypical resultDo not assume
https://paypal.me/…, iPhone Camera, PayPal installedPreview of the link, then the PayPal app or SafariThat Camera will skip Safari every time
PayPal.Me, iPhone, no PayPal appSafari loads PayPal.Me; sender can still payThat checkout is impossible without the app
PayPal.Me, Android Camera / LensPreview, then Chrome or the PayPal appEvery OEM uses the same chrome
https://buy.stripe.com/…, iPhoneSafari (or Stripe app) hosted CheckoutApple Pay fires with no Checkout page
Stripe Payment Link, AndroidChrome / OEM browser CheckoutGoogle Pay skips the Stripe page
Custom Stripe domainBrowser on your host; app handoff may not fireThe same Universal Link as buy.stripe.com
Dynamic URL, destination is checkoutBrowser to Snapkit, 302, then the same as aboveHandoff as clean as a first-party PayPal/Stripe URL
Airplane / dead dataCamera may lock; checkout still needs a networkOffline pay the way a Text QR would
paypal:// or stripe:// in the QRMany cameras show nothing usefulA Magical app-only fallback

Universal Links / App Links fire on an https://paypal.me/… or https://buy.stripe.com/… navigation when that app is installed. They do not fire on a custom scheme most cameras will not open. They do not fire on a raw card number in Text.

Test the downloaded PNG on one iPhone and one Android. Confirm the merchant name, amount, and currency. Confirm Pay is still yours to tap. Then complete a real small payment (or Stripe test mode on a test PNG you will not print) and check the processor dashboard. A preview that “looks right” is not a settlement.

Print and placement (counter, poster, invoice)

Do not reprint the size or print math here. A paypal.me/Handle URL is a short HTTPS payload, so the pattern stays loose if you download the ~1024 px PNG instead of screenshotting the 256 px preview (test the file).

PlacementWhat matters for checkoutSkip
Counter tip jar / donate boxArm’s-length scan; label “PayPal” or “Card checkout”; amount in ink if the URL has no suffixTiny icon-sized marks next to the terminal
Table tent / check presenterQuiet zone on busy art; one processor per codeOne Dynamic /r/ reused for Wi‑Fi and pay
Flyer / posterSize for the real reading distance; print the human-readable amount and currencyLight yellow modules “to look like PayPal”
Invoice / statement PDFStatic link to this invoice or Payment Link; test expire datesA Checkout Session URL that dies in 24 hours
Window stickerContrast through glass; matte if laminate glare kills lockEncoding a paragraph of UTM on a custom-domain Stripe URL

Print the human-readable amount and “Pay with PayPal / card” beside the mark. If the camera never locks, that is size, contrast, or crop — start at QR code won’t scan, not at the PayPal handle.

Customization (colors, logo, styles) may be entitlement-gated on the homepage. Do not invent extra payment badges in the generator. Contrast still beats branding; light modules on a bright till receipt fail for the same reasons as in the color guide.

Mistakes that never take payment

Wrong currency or account, Text-tab URLs, truncated links, and Dynamic /r/ hops that never reach checkout

What you didWhat the scan doesFix
Personal PayPal.Me on a shop sticker (or the wrong Stripe account)Money lands in the other accountCopy the link from the business dashboard; open it logged out
…/25 when the account default currency is not what the sign saysSuggested amount in the wrong currencyAdd the ISO suffix PayPal documents (25USD) or drop the amount and write it in ink
Payment URL without https://Locks, then text or a one-brand openType the full scheme in the URL tab
Truncated buy.stripe.com/… token404 / “link isn’t active”Copy again; open it once before paste
Printed buy.stripe.com/test_…Test Checkout; no live chargeCopy the live Payment Link
Stripe Checkout Session URL (checkout.stripe.com/c/pay/…)Works once, then expiresPayment Link, not a Session
Deactivated / expired Payment Link or hidden PayPal.MeScan works; page refuses the payReactivate or copy a new live URL; reprint static, or retarget Dynamic
https://paypal.me/… pasted into TextWords; maybe a chipURL tab
paypal:// or stripe://Many cameras show nothing usefulhttps:// checkout URLs
bitcoin:… labeled “scan to pay”Wallet app, or textBitcoin guide vs this page
Long URL + UTM past ~1,000 / 1,200 charsAmber warning, then download blockedShort Dashboard link, or Dynamic /r/
Printed before a real $1 / test chargePreview looked fine; amount or account was wrongPay it yourself; check the processor
Dynamic URL, destination is checkoutPNG encodes /r/…, then a 302Works only while the redirect is live and still points at checkout
Dynamic, free trial expiredScan hits /expiredPaid plan, or a static payment PNG
Dynamic, you later retarget to a menuCounter sticker opens lunchDo not share that short link across jobs
Screenshot of the 256 px previewSoft modules after printDownload PNG (~1024 px)

Dynamic on a payment destination is the subtle one. The print encodes https://snapkit.store/r/…, not paypal.me. The phone must reach Snapkit, get a 302, then land on checkout. That extra hop is why you can retarget a sold-out SKU without reprinting. It is also why an expired trial, a typo in the dashboard, or Snapkit being unreachable means no pay. iOS/Android app-handoff is more reliable when the first URL the camera opens is already PayPal or Stripe. For a sticker you will not reprint, static https://paypal.me/… or the copied Payment Link is the correct default.

Build list (this product)

  1. Open snapkit.store. Choose URL. Not Text. Not Email. There is no Payment tab.
  2. In PayPal.Me, Stripe Payment links, or your other processor, Copy the https:// checkout URL. Confirm live vs test. Confirm the account, amount, and currency in a private window.
  3. Paste the finished URL into Website URL. Include https://.
  4. Leave Dynamic unchecked unless you must rotate destinations after print, and you have tested the /r/ hop on both phone brands.
  5. Download PNG. Do not screenshot the 256 px box.
  6. Scan the file on an iPhone and an Android. Confirm the merchant name. Complete a small real payment (or a Stripe test charge on a test PNG you will not print). Check the processor dashboard.
  7. Print the mark with a quiet zone and the amount / “Pay with …” label beside it. A dead camera lock is size, contrast, or crop — start at QR code won’t scan, not at the handle.

The generator’s job is the PNG. PayPal’s or Stripe’s job (or your other hosted checkout) is the charge. The URL tab is the only Snapkit control that connects the two.

Ready to create your QR code?

Try Snapkit's free QR code generator - no signup required.

Generate QR Code