https://merchant-demo.zahlo.eu.
1
Create the product
In the dashboard, open Products and add a product with a one-time price in EUR, for example “T-shirt”, €25.00.
2
Create the link
Open Links, create a payment link, pick the price and the quantity, and save. Copy the link’s URL (
…/pay/<id>).To send customers back to your site after paying, set a redirect URL. Its host must be a registered checkout domain: add it under Developers → Checkout domains first (HTTPS only in live). Without a redirect URL, customers see Zahlo’s confirmation page and no domain is needed.All prices on a link use one currency. A link can also apply a coupon or accept promotion codes.3
Test a payment
Open the link in a private window and pay with the Sandbox test card
4111 1111 1111 1111, expiry 03/30, CVC 737. Check that the payment appears under Payments with the link’s product.4
Fulfil the order
Each paid order appears under Payments, with the customer’s email. Fulfil from there; reaching the redirect URL is not proof of payment, because anyone can open it.To fulfil automatically, add a webhook endpoint for
checkout.session.completed and handle it as in Hosted checkout with Next.js: verify the signature, re-fetch the session, and record the event and the order change in one transaction.5
6
Stop a link
Deactivate a link under Links when the offer ends. New checkouts stop at once, and a payment that still completes on an already open checkout is refunded automatically.
7
Go live
Only steps 3, 4 (if you use a webhook), 5 (if you set a redirect URL) and 7 apply to links, plus recreating the product:Your live account starts empty, and Sandbox IDs, keys and secrets don’t work there. Recreate what this integration uses, in this order (details: Go live; your live dashboard’s Go live page at
https://merchant.zahlo.eu/merchant/go-live tracks each step):- Create a live API key and set
ZAHLO_API_KEYto it (zk_live_…). Code that readsZAHLO_API_BASEsets it tohttps://merchant.zahlo.eu. - Run
setup-catalogagainst live. It creates the samelookupKeys and coupon codes, so your code needs no change. - Recreate your payment links; live links have new URLs.
- Add your live webhook endpoint, set
ZAHLO_WEBHOOK_SECRETto its new signing secret, and confirm one live delivery arrives. - Register your site’s checkout domain in live (HTTPS only), plus the Apple Pay domain if you embed checkout with wallets.
- Customers, subscriptions and saved payment methods don’t carry over; real checkouts create them.
- Make one small live payment, check that
payment.confirmedand your fulfilment ran, then refund it.