Skip to content

Payment links and hosted checkout

Payment links and hosted checkout are the two ways to take a payment when the customer is not standing at your till.

  • A payment link is a web page you make in Musqet and send to a customer, by message, email or however you like. They open it and pay. You make and manage links in My Musqet, the merchant dashboard.
  • Hosted checkout is a Musqet-hosted payment page you send customers to from your own website or app. You create the checkout through the API and redirect the customer to it. This is aimed at developers, and is covered in For developers below.

In My Musqet, open Take payments and choose Payment Links. You need payment links enabled for your business, at least one payment method set up, and the Take payments permission to create one.

Fill in:

  • What it is for (a description the customer sees).
  • The amount.
  • Part payment, if you want to let the customer pay less than the full amount. Tick it and set a minimum. See Letting a customer pay part for what is and is not live today.
  • When it expires. The date defaults to a week from today. After it passes, the link can no longer be paid.

Save, and Musqet gives you the link’s web address to share.

Payment links are made in My Musqet only. The Musqet mobile app does not make payment links; the “links” you can make there are tip links, which are a separate thing.

When you make a link, Musqet shows you its web address with a Copy button. Every link in your Payment Links table also has its own copy button. Copy the address and send it to the customer any way you like.

There is no built-in QR code for the link itself. The customer sees a QR code only after they open the link and choose to pay in bitcoin, which is the QR for that bitcoin invoice.

A link shows one of four statuses:

  • Active — not paid yet, and still in date.
  • Partially paid — some money has come in against it, but not the full amount.
  • Paid — the full amount has been received.
  • Expired — the expiry date has passed. Expired takes priority: a link past its date reads as Expired even if it had been paid.

You can filter the Payment Links table by status.

Open a link from the table to see its detail: the amount, its status, and a list of the payments made against it. A single link can be paid in more than one go, so this is where you see each payment and what it was paid with.

From the detail page you can also refund a payment: a card payment is refunded back to the card, and a bitcoin payment is recorded as a manual bitcoin refund.

To stop a link being paid, delete it. Deleting needs the Take payments permission, and you cannot delete a link that has already been paid. Deleting hides the link from customers; the record of it and any payments already taken is kept.

When a customer opens the link, the page offers the ways your business can actually take money. Which options show depends on what you have set up:

  • By card if your business takes card payments.
  • Apple Pay and Google Pay if your business is set up for wallet payments.
  • With bitcoin if your business takes bitcoin.

The customer enters their card details on the payment page and pays. If the amount is paid in full the link becomes Paid; a card payment can also leave a link Partially paid.

Where your business supports them, the customer can pay with a wallet on their phone instead of typing card details. Google Pay shows when your business is set up for wallet payments. Apple Pay appears once it has been enabled for live payments, so it may not be visible on every business yet.

Wallet payments on a link are a card payment underneath, so they go through the same bank checks as a typed card.

On a card or wallet payment, the customer’s bank may ask them to confirm the payment, for example by approving it in their banking app. The payment page sends the customer to their bank to do this and brings them back:

  • If the bank confirms, the payment goes through and the page shows it succeeded.
  • If the bank declines, the page shows the payment was declined.
  • If the check could not be completed, the page says so and the customer can try again.

This check is run by the bank, not by Musqet, so exactly what the customer is asked to do depends on their bank.

If your business takes bitcoin, the customer can pay the link over Lightning or on-chain. The page shows a QR code and an Open in wallet button. See Bitcoin payments for how bitcoin acceptance works.

You can allow part payment on a link and set a minimum when you make it. The amount, the minimum and the running balance are all tracked, and a card payment for less than the full amount will leave the link Partially paid.

What is not live yet is a customer choosing a smaller amount to pay online. If a link has already been part paid, or a customer tries to pay an amount other than the full balance, the payment page tells them online part payment is not available yet and asks them to pay the full amount or contact you. Treat part payment today as something you reconcile yourself, not a self-service option for the customer.

Hosted checkout lets you send a customer to a Musqet-hosted payment page from your own website or app, and get them back when they are done. It is a redirect model, like Stripe Checkout: you do not embed a script, you send the customer to a Musqet URL (or show that URL in an iframe).

Hosted checkout is bitcoin only. It accepts Lightning and on-chain payments. Card, Apple Pay, Google Pay and the 3-D Secure flow described above are part of the payment-link page, not hosted checkout.

Create a checkout through the API with the amount, currency and an order id, then redirect the customer to the hosted page. The page shows a bitcoin QR and an Open in wallet button, updates live as the payment lands, and then returns the customer to your site. Add ?iframe=true to the URL to embed the page rather than redirect to it. There is no separate “pay button” script to drop in; the hosted page is the widget.

Bring the customer back, and trust what you are told

Section titled “Bring the customer back, and trust what you are told”

When the checkout is done, Musqet redirects the customer back to the successUrl you supplied, with the outcome as signed parameters (businessId, checkoutId, status, and a signature).

Verify the signature before you trust the result. The parameters travel through the customer’s browser, so treat them as untrusted until you have checked the signature against your key. Do not mark an order paid on the status value alone. For a guaranteed server-to-server signal, use a webhook or watch the checkout (below) rather than relying on the redirect.

To learn the moment a checkout is paid, without polling hard:

  • Server-sent events: subscribe to GET /api/v1/checkout/subscribe. It emits an open event, then a checkout-status-changed event when the status moves.
  • Polling: read GET /api/v1/checkout/{id}.
  • Webhooks: register a webhook endpoint through the API to receive checkout updates server-to-server.

If a customer is not going to finish, you can cancel the checkout so it is not left hanging. Cancel is available for hosted-page checkouts; it marks the checkout cancelled and, where you supplied a webhook, notifies you. Cancelling never marks a checkout paid.

The payment-link actions in this page are also available as a public REST API under /api/v1/payment-link (create, list, get, list payments, delete, and refunds), authenticated with your API key. Use it to make and manage links from your own systems instead of the dashboard.

What you seeWhat it meansWhat to do
The customer cannot pay part of the amount onlineOnline part payment is not switched on yetAsk them to pay the full amount, or take the part payment another way and reconcile it against the link
A card was declined on the pageThe bank did not authorise it, or the extra bank check failedThe customer should check with their bank or try another card. The page shows whether it was declined or the check did not complete
A link still shows unpaid after the customer paidThe payment may still be confirming, or it went to a different linkOpen the link’s detail and check its payments. For bitcoin, allow a short time to confirm
You cannot delete a linkThe link has already been paid, or you do not have the Take payments permissionPaid links are kept for the record and cannot be deleted
Apple Pay is missing on the pageApple Pay is not yet enabled for live payments on that business, or the business is not set up for wallet paymentsCard entry and Google Pay, where supported, still work
A customer paid on hosted checkout but was not returned to your siteThe successUrl was missing or wrong, or the redirect was interruptedConfirm the payment from the webhook or by reading the checkout; fix the successUrl for next time
  • Bitcoin payments — how Lightning and on-chain acceptance work, which a link or checkout uses to take bitcoin.
  • Card payments — taking a card on the terminal, and reading a decline.
  • Refunds — giving money back on a payment.