Checkout links
A checkout link is a reusable payment URL you create from the dashboard and share anywhere. Every time the link is opened, a fresh checkout is created and the customer pays through the regular hosted payment page via QPay, SocialPay, Pocket, and other channels.
The link is a public address of the form https://byl.mn/h/pay/{slug}, so you can put it in Facebook, Instagram, chats, emails, or a QR code. No website, API integration, or code required.
How is this different from a checkout?
A checkout created via the Checkout API is a single purchase page that is consumed once paid. A checkout link is long-lived: any number of customers can pay through the same link any number of times — a new checkout is minted automatically on every visit.
Link types
Every link is one of two types:
- Products or subscriptions — sells items at fixed prices. Each line is a registered price or an ad-hoc name and amount (see the sections below).
- Customers choose what to pay — an open-amount link for donations, tips, and pay-what-you-want payments. The customer decides the amount right on the payment page.
The type is fixed after creation
You pick the link's type when creating it and can't change it later. If you need the other type, create a new link.
Creating a link
- In the dashboard, open your project's Checkout links (Төлбөрийн линк) menu and click New link.
- Pick the link type.
- Fill in the following:
- Name (required) — up to 255 characters. Internal-only; customers never see it.
- Success URL (optional) — where to send the customer after a successful payment. Leave empty to show a generic success message.
- For a products link, add at least one item; for a customer-choice link, fill in the title and amount settings.
- Choose what information to collect from the customer.
- Save — the link is ready to share.
Customers choose what to pay
Use this type to collect donations, tips, or payments whose amount isn't known up front. The customer-facing fields are:
- Title (required) — shown on the payment page, e.g. "Support our work".
- Description (optional) — a short blurb displayed under the title.
- Image (optional) — JPEG or PNG, up to 12MB, displayed on the payment page.
Suggested amounts
Add up to 6 preset amounts (e.g. 5,000₮, 10,000₮, 20,000₮). They appear as small chips under the amount field on the payment page; clicking one fills the field. Customers can always type a custom amount instead.
Amount limits
Enable Set limits to constrain what customers can enter:
- Minimum amount — amounts below this are refused.
- Maximum amount — amounts above this are refused.
Both are optional and can be set independently. Preset amounts must fall within the limits. Regardless of limits, a single payment can never exceed the platform maximum of 10,000,000₮.
On the payment page
A customer opening the link lands on a payment page showing the image, title, and description. The amount field is focused automatically, so they type an amount (or tap a preset), fill in their details, pick a payment channel, and pay — all on one page. Out-of-range amounts get a clear validation message.
Specifying items
(Applies to "Products or subscriptions" links only.)
Each line item is one of two kinds:
- Registered price — pick a price registered in the Products menu. The link always sells at the price's current amount: change the price and the link follows, no need to recreate it. Product stock and product-scoped promotion codes only work with registered prices.
- Ad-hoc item — type a name (up to 255 characters) and a unit amount directly, without registering a product.
Recurring prices are not supported
Checkout links are built for anonymous, walk-up customers, so recurring prices can't be sold through a link. To sell subscriptions, use the Checkout API.
Quantity
Each item has a fixed quantity (minimum 1). Enable "Customer can adjust quantity" to let the customer pick their own quantity on the payment page:
- Minimum — defaults to 1.
- Maximum — leave empty for unlimited.
If the product has a stock limit, the selectable maximum is automatically capped at the available stock.
Collecting customer information
| Setting | Default | Description |
|---|---|---|
| Email address | Collected | Asks for the customer's email during payment. |
| Phone number | Not collected | Asks for a phone number. |
| Delivery address | Not collected | Asks for a delivery address. |
| Promotion codes | Disabled | When enabled, the customer can apply a promotion code. |
Collected information is stored with each checkout and included in the checkout.completed webhook.
Custom fields
Beyond the standard fields above, each link can ask up to 3 questions of your own — a company name, a VAT number, a seat type. The customer fills them in on the payment page after the email and phone fields.
| Setting | Description |
|---|---|
| Label | The question as the customer sees it. Up to 100 characters. |
| Type | Text (up to 255 characters), Numeric (digits only — VAT or registration numbers), Dropdown (the customer picks one of the options you list, one per line). |
| Required | When on, the field can't be left blank. |
| Key | Identifies the answer in the API and webhooks (a-z, 0-9, _). Leave it blank to derive one from the label (e.g. "Company name" → company_name). Keep it stable if your webhook handler reads answers by key. |
Answers show on the payment's detail page and arrive in the checkout.completed webhook as a custom_fields array with each field's key, label, type and value. For dropdowns, value is the option's key (e.g. "VIP" → vip) — see the webhook page for the full shape.
Changes to the fields apply from the next visit on; checkouts that have already been paid keep the answers they collected.
Working with product stock
When an item on the link has a stock limit:
- As soon as the stock can no longer cover the link's minimum demand, the link shows a "sold out" page and stops taking orders. If the same product appears on several lines, their combined demand is what counts.
- The maximum quantity a customer can pick is capped at the available stock.
- Another customer's in-flight (unpaid) checkout temporarily holds stock, so a link can be sold out for a few minutes — it reopens by itself if that checkout is never paid.
Top up the stock (or remove the limit) and the link starts selling again with no further action.
QR code
The link's detail page shows a QR code of the link. Use the Download QR button to save it as a PNG — print it, place it next to your till, or put it on posters and brochures. Scanning it takes the customer straight to the payment page.
Managing links
- Deactivate / Activate — a deactivated link no longer opens (404). Use this to pause sales.
- Edit — change the name, items, and amount settings at any time (everything except the type). Changes apply from the next visit.
- Delete — links with no completed payments can be deleted. A link that has taken payments can't be deleted (to preserve history) — deactivate it instead.
- The link's detail page lists its completed checkouts (email, amount, date). Custom field answers are shown on each payment's detail page.
Notes
- Every visit mints a new checkout that expires after 24 hours. The link itself never expires and has no usage cap.
- The number of active links depends on your Byl plan: Starter allows 5, Growth is unlimited. The limit doesn't apply in test mode. When you hit it, upgrade your plan or deactivate a link you no longer use.
- A link created in a Test project runs in test mode — create the link on your Live project when you're ready to sell for real.
- Purchases through a link fire the regular
checkout.completedwebhook and notifications. - Checkout links are currently managed from the dashboard only (no API).
Next steps
- Product stock — set a stock limit and let the link enforce it
- Promotion codes — allow discounts on your link
- Webhooks — record every payment in your own system automatically