Crypto
Live today · no account- SetupZero — works out of the box
- CustodyNever — peer to peer
- ChargebacksNone — the transaction is final
- FeesNetwork gas only
- Best forAgents, global buyers, instant settlement
Crypto links work the moment you clone — four chains, no account, no custody. Cards are real Stripe Elements that go live with your key. Try both below — nothing on this page is a mockup.
A real, signed link to your wallet — created on click, no backend needed. Prefer a card? ↓
Or buy from the catalog
The technical playbook behind this exact site — clone it, ship it, own every piece.
Real Stripe Elements dressed as a card — tilts to your cursor, guides you field to field, and settles straight to your own Stripe account. It goes live the moment you add two env vars; until then it's an honest preview.
Which rail?
Ship both. Point buyers at whichever fits — or let them choose.
Crypto, start to settled
One POST — or the form above. The link carries the amount, the chains, and your wallet addresses, signed so nothing can be swapped in transit.
It's just a URL and a QR code. Drop it in an invoice, a chat message, a checkout page — anywhere a buyer can tap.
The payer picks a chain and signs. Funds land directly in your wallet — no middle account, nothing to withdraw.
For developers
curl -X POST https://pay.one.ie/ \
-H 'Content-Type: application/json' \
-d '{
"protocol": "payment_link_create",
"data": {
"amount": 25,
"unit": "usd",
"product": "Pro plan",
"merchantSlug": "your-workspace",
"chains": ["SUI", "ETH", "SOL", "BTC"],
"treasuries": { "SUI": "0x...", "ETH": "0x..." }
}
}'
# → { "success": true, "data": { "url": "https://pay.one.ie/l/...", "qr": "..." } }
# Signed server-side. Visiting the link verifies the signature before it
# renders — an unsigned or tampered link never reaches a payer. // src/pages/api/pay/create-intent.ts — real, ships in the starter
const stripe = new Stripe(env.STRIPE_SECRET_KEY, {
httpClient: Stripe.createFetchHttpClient(), // runs on Cloudflare Workers
})
const intent = await stripe.paymentIntents.create({
amount, currency: 'usd',
automatic_payment_methods: { enabled: true },
})
return Response.json({ clientSecret: intent.client_secret })
// <PhysicalCardCheckout /> mounts live Stripe Elements on that clientSecret.
// The webhook verifies every event's signature (constructEventAsync —
// Workers' SubtleCrypto is async). Fail-closed without the two keys. Run one wallet keygen, share a link, or add your Stripe key. That's the whole setup.