Option 1 - the ready made product page

No code at all. Link your customer straight to the product page and the platform builds the payment request for you:

Product page link

The page shows the product, lets the customer choose a quantity, and forwards to the payment page with the amount already calculated.

Option 2 - your own page

You already build the payment request yourself and only want to tell us which product is being bought. Add two parameters:

Added to your hosted request
&public_itemId=88&public_quantity=2
    

The amount stays yours - the product is described, never re-priced. Send both parameters together, or the product is not recorded on the transaction.

Where each field appears

Fields marked per language can be filled in once for each language you support. The customer sees the version matching the language of the page, and falls back to your default language when that translation is empty.

Product field Where it is reflected Notes
Name Browser title, product heading, and the "Payment for" line on the payment page Per language
Description Description block under the product name Per language
Receipt text Confirmation and receipt wording Per language. Not shown by every design
Meta title / description / keywords Search engine tags on the product page only Never shown to the customer
Price Unit price. The amount charged is price x quantity Ignored when Dynamic price is switched on
Old price Struck through "was" price beside the current one Not shown by every design
Currency The whole page is priced in it, and it is sent as the transaction currency
Dynamic price Replaces the quantity picker with an open amount box the customer types into The typed amount becomes the transaction amount
Transaction type Whether the payment is a sale or an authorisation only See Auth
Installments Highest value the payments selector offers The selector is hidden when the value is below 2
Quantity from / to / step Minimum, maximum and increment of the quantity picker Physical products only - every other type is fixed at 1 to 10, stepping by 1
Available quantity Caps the quantity the customer can pick, and is enforced again when the payment is taken Leave empty for unlimited. Physical products only
Active Whether the product can be bought at all Switching it off blocks the payment on the Flow design
Product type Decides whether inventory is tracked for this product See the table below
Images 1 to 3 Product images on the product page A smaller thumbnail is generated automatically where one exists
Recurring string Sets up the recurring series for the transaction See Recurring. Not sent by every design
Shop Supplies the banner image, social links and regional settings around the product Set on the shop, not on the product
Brand type Associates the sale with a brand for reporting and affiliate revenue share See Brand/UTM tracking
Tags and categories Grouping and search inside your shop Never shown on the payment page
SKU Your own stock reference Internal only, never shown to the customer

Quantity and stock

The quantity picker and the inventory check are two different things. The picker is what the customer is offered; the inventory check is what actually stops a sale. Both are driven by the fields above.

Behaviour How it works
Highest quantity offered The lower of Available quantity and Quantity to. A product with 3 units left never offers 10, whatever Quantity to says
Increments Counts up from Quantity from in Quantity step units. Set the step to 6 and the customer buys 6, 12, 18
Unlimited stock Leave Available quantity empty. The product is never blocked on inventory and nothing is decremented
When stock is taken Reserved as the payment starts and kept when it is approved. A declined or failed transaction returns the units automatically
Sold out during checkout If the last unit goes while the customer is filling in the form, the payment is declined rather than oversold. On the Flow design the customer is told the item is out of stock
Variants Where a product has stock variants, the variant's own available quantity is used instead of the product's

Product types

The type decides whether the product carries inventory at all. Only Physical products are counted down when they sell - everything else can be sold any number of times, and the quantity fields on those products are ignored in favour of a plain 1 to 10 picker.

Type Inventory tracked Typical use
PhysicalYesGoods you ship and have a finite number of
VirtualNoServices, access, anything you cannot run out of
DownloadNoA file the customer receives after paying
InvoiceNoSettling an invoice you raised
AffiliateNoSales driven through an affiliate link
VoucherNoGift cards and top ups
Pricing planNoA tier the customer subscribes to
RecurringNoA subscription billed on a schedule
UnmanagedNoA product recorded for reporting only

Request parameters

Add these to a hosted page request to tell us which product is being bought. Whichever product you name, the amount you signed is the amount that is charged - the product is described, never re-priced.

Signing them. If you sign the full request - every value in the order it appears in your query string - then both parameters are part of the signature and must appear in the hash in that same position. If you use the short signature (merchant number, amount and currency) or the simplified form, they are not covered by it. Either way the platform checks the product belongs to you before it is shown or charged.

Parameter Name Parameter description Length
public_itemId Numeric id of the product, as shown in your product list. Must be one of your own products 10
public_quantity How many units are being bought. Send it together with public_itemId 10
show_quantity Let the customer change how many units they are buying. See "Letting the customer choose how many" below 5
Item The same product id, used on the ready made product page instead of public_itemId 10

Both values are passed on to processing and stored against the transaction, so the product appears in your reports and in the transaction record.

Checks on the Flow design

The Flow design (ui_version=11) reads the product and puts its name and description in the order summary, in place of the description you would otherwise send. It also refuses to take a payment it cannot honour. Older designs display the product but do not perform these checks.

Situation What the customer sees Can they pay?
The product id does not exist "We could not find the item this payment is for. Please go back to the store and try again." No
The product belongs to a different merchant The same message. One merchant can never sell another merchant's product No
The product is not Active "This item is no longer available for purchase." No
Fewer units available than requested "This item is out of stock and cannot be purchased right now." No
5 units or fewer left "Only 3 left in stock" under the product, as a nudge Yes
The last unit sells while they are on the page The payment is declined and the same out of stock message is shown No

When a payment is blocked the form is put away and the message replaces it, so the customer is never left with a Pay button that can only fail. The order summary stays on screen - knowing which item is unavailable is the point of the message.

Letting the customer choose how many

Send show_quantity=true alongside a product id and the payment page shows a quantity picker. This changes who prices the order, so it is worth being explicit about what happens.

Without show_quantity With show_quantity
The amount you signed is the amount charged. The product is described on the page and never re-priced. The catalogue prices the order: the product's price multiplied by the number of units the customer chose.
public_quantity is fixed at whatever you sent. The customer picks between your Quantity from and Quantity to, in Quantity step increments, never above Available quantity.
trans_amount is authoritative. trans_amount is only the opening figure. If it disagrees with the catalogue, the catalogue wins.

The browser only ever sends a count, never a price, and the page recomputes the amount from your own catalogue before charging. A customer editing the page cannot change what a unit costs - only how many of them they are asking for, and that is bounded by your own limits.

One requirement: the product's currency has to match trans_currency. Multiplying a price in one currency into a transaction in another would charge the right number in the wrong money, so the payment is refused rather than converted.

Page layouts for products

Three layouts of the Flow design put the product ahead of the form instead of beside it. All three fall back to a single stacked column on a narrow screen, product first.

Layout What it shows Use it for
Layout=5 An even split: the product on one side - hero image, thumbnails, name, description, price per unit and the quantity picker - and the payment column on the other A product page that ends in a payment
Layout=6 A full invoice document: both parties, a ruled line-item table, a totals ladder and a balance due, with the payment form as a column beside it that follows you down the page. Prints as the invoice alone Invoices and itemised orders
Layout=7 A full marketing page: a hero band with the product name, your business name, the price and a button down to the checkout; the description and your remaining images below it; then the payment form; then your support email, phone and website A link you send to someone who has not decided yet

Layout is part of the request, so remember to include it in your signature if you sign the full request.

Layout 6 draws the document from the invoice itself. Send shop_cartId (the cart) and trans_refNum (the order reference) and the page renders the line items, both parties and the issue date from your own records rather than from the query string. Both have to belong to the merchant on the request or they are ignored, so a link cannot be edited into showing somebody else's invoice. Invoices created from the control panel already carry both.

Layout 7 fills its help band from your account's own support email, support phone and website. Only the ones you have filled in are shown, and the band disappears when none of them are. It also keeps the line breaks you typed into the product description, so write it in paragraphs.