Use PayPortal pay links without a website
Get paid with simple “Pay with card” links you can send over text, social media, email, or anywhere else — no website required.
Overview
PayPortal pay links let you accept card payments and settle in crypto with a single URL. You enter an amount, get a unique link, and send that link to your customer. They pay by card. Funds are processed and then settled to your wallet.
- No website or checkout page required.
- Works anywhere you can paste a URL (text, email, socials, QR codes, invoices, etc.).
- Every payment appears in your PayPortal merchant dashboard.
https://api.payportal.ukIf you are only using the dashboard, you can ignore the API and just create links in the UI.
What you need
- An active PayPortal merchant account.
- A Solana payout wallet saved in your PayPortal settings.
- Your PayPortal API key (
pk_...), if you plan to use the API.
Option 1 – Use the merchant dashboard (recommended)
The dashboard is the fastest way to use PayPortal without a website. You log in, create a link, and paste it wherever you talk to your customers.
Step-by-step
- Go to your merchant dashboard:
https://home.payportal.uk/merchant-dashboard?key=pk_... - In the “Create one-off payment link” card, enter:
- Amount (USD) – how much you want to charge.
- Order note (optional) – order number, customer name, or a short description.
- Click Generate link.
- Copy the link and send it to your customer (text, email, DM, invoice, etc.).
-
When they pay, you’ll see the transaction in your dashboard. The status will switch to
completedonce payment is confirmed.
Option 2 – Generate links from your own tools
If you don’t have a public website, but you do use an internal tool, CRM, or small backend server, you can generate pay links programmatically and send them out automatically.
Your backend calls /v1/checkout-session with your API key.
The response includes a checkoutUrl you can drop into emails, texts,
or invoice templates.
Example: simple Node script
This example creates a single pay link from a Node script.
// install first: npm install node-fetch
import fetch from "node-fetch";
const PAYPORTAL_API_KEY = "pk_YourPortalKeyHere";
async function createPayLink() {
const payload = {
amount: 50.00, // charge the customer $50.00
note: "Order #1234", // optional
customer: { // optional
name: "Customer Name",
email: "[email protected]"
}
// cart: [...] // optional, see table on the right
};
const res = await fetch("https://api.payportal.uk/v1/checkout-session", {
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": PAYPORTAL_API_KEY
},
body: JSON.stringify(payload)
});
const data = await res.json();
if (!res.ok || !data.checkoutUrl) {
console.error("PayPortal error:", data);
return;
}
console.log("Pay link:", data.checkoutUrl);
console.log("Session ID:", data.sessionId);
console.log("Base amount (to you):", data.baseAmount);
}
createPayLink().catch(console.error);
You can copy the printed checkoutUrl and send it to customers,
or plug it directly into your own message templates.
Payload fields
| Field | Description |
|---|---|
amount
required
|
Total charge in USD as a number
(for example 50.00).
|
note
optional
|
Short description such as order ID, customer name, or item summary. This shows in your dashboard. |
customer
optional
|
Object with customer info you want to see in the dashboard:
name, email, phone,
address (line1, line2, city, state, postalCode, country).
|
cart
optional
|
Array of cart items for your records. Each item:
{ sku, name, quantity, unitPrice }.
|
Response from PayPortal
Your script or backend receives JSON like:
{
"checkoutUrl": "https://moonpay.hel.io/charge/...",
"sessionId": "69233...",
"baseAmount": 50.00
}
checkoutUrl is the pay link you send to the customer.
sessionId is what appears in the PayPortal dashboard.
baseAmount is the amount that settles to your wallet
(before network fees).
Understanding statuses and payouts
Each pay link is tied to a session in your dashboard. You can search by
sessionId, note, or status.
- pending – the customer opened the checkout or started paying, but the payment is not yet confirmed.
- completed – payment is confirmed. The Settled to you number in your dashboard shows how much will reach your wallet (before any network fees).
In the dashboard, you can open the details view to see the customer info and any cart items you attached when creating the pay link.
Best practices
- Use the note field for an order number or short description.
- Run a small test payment to yourself to see the full flow end-to-end.
- Keep receipts and invoices wherever you already manage customer communication (email, WhatsApp, etc.) and just paste the PayPortal link where the customer pays.
- If you use the API, keep your PayPortal API key on the server or in private scripts, not in public code.
Security notes
- Never put your PayPortal API key in browser-side JavaScript or public HTML.
- Only use your API key from private scripts, servers, or back-office tools.
- Use strong passwords and 2FA (where available) on the email and accounts tied to payouts.
- Do not share your PayPortal login with customers or third parties.
Support
If you need help using pay links, send us:
- How you’re planning to send links (text, email, invoices, etc.).
- A screenshot of your merchant dashboard if something doesn’t look right.
-
If you use the API: the script or code you’re using to call
/v1/checkout-sessionand any error output.
With that, we can usually point you in the right direction very quickly.