Skip to main content
After a successful checkout, Nova.Pay can offer the customer an additional product — an upsell — charged to the same saved payment method with a single click. The customer does not need to re-enter their card details or go through a new checkout flow, making this a frictionless way to increase revenue per transaction.

How It Works

1

Customer Completes Checkout

The customer submits a payment via POST /payments as described in the Create a Payment guide. Nova.Pay processes the charge and returns a PaymentResult object.
2

Check for an Upsell Offer

If the checkout page has an upsell product configured and the payment was successful, the PaymentResult response will include an offer field. This value is a signed GlobalID (SGID) — a time-limited, single-use token that authorises the upsell charge.
If offer is absent from the response, either the checkout page has no upsell configured or the payment did not succeed.
3

Present the Upsell in Your UI

Display the upsell offer to the customer immediately after payment confirmation — for example, in a modal or a dedicated confirmation page section. Show the product name, price, and a clear call-to-action button.
The offer SGID is single-use and time-limited. Do not cache it or delay presenting it to the customer. Once expired or used, the token cannot be reused and a new checkout must be initiated.
4

Submit the Upsell if the Customer Accepts

If the customer clicks the upsell call-to-action, POST the offer SGID to the /upsell endpoint. Nova.Pay charges the original payment method on file — no additional card data is required.Endpoint: POST /upsell
The POST /upsell endpoint is not host-restricted. You can call it from your server or directly from the customer’s browser.
The meta object is optional and can carry any key-value pairs you want to associate with this upsell event (e.g. UI placement, A/B test variant).

Upsell Response Fields

A successful POST /upsell call returns an UpsellResult object.
string
required
Status of the upsell order (e.g. "paid", "pending", "refused"). Handle "refused" gracefully — the customer’s card may have been declined for the additional charge.
array
Array of gateway-level payment IDs created for the upsell order.
string
URL to the generated boleto PDF for the upsell order. Present only if the original order was paid via boleto.
string
Base64-encoded Pix QR code image for the upsell order. Present only if the original order was paid via Pix.
string
Hosted URL for the Pix QR code image of the upsell order. Present only if the original order was paid via Pix.
string
ISO 8601 timestamp indicating when the upsell Pix QR code expires. Present only if the original order was paid via Pix.